{"id":1275,"date":"2026-11-02T03:59:36","date_gmt":"2026-11-02T03:59:36","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/?p=1275"},"modified":"2026-11-02T03:59:37","modified_gmt":"2026-11-02T03:59:37","slug":"oracle-cloud-always-free-vps-complete-step-by-step-tutorial","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/oracle-cloud-always-free-vps-complete-step-by-step-tutorial\/","title":{"rendered":"Oracle Cloud Always Free VPS \u2014 Complete Step-by-Step Tutorial"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Beginner to Advanced | Updated: November 2, 2026 | Verified against official Oracle Cloud Infrastructure documentation<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide walks you through logging in to Oracle Cloud, configuring networking, creating a free Linux virtual machine, connecting through SSH, and verifying that your server is working.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It also covers the three problems you encountered earlier: ARM capacity errors, AMD image incompatibility, and public IPv4 assignment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. What we are going to build<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Architecture of a basic publicly accessible Oracle Cloud Linux VPS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Available Always Free compute options<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Resource<\/th><th>AMD Micro<\/th><th>ARM Ampere A1<\/th><\/tr><tr><td>Shape<\/td><td><code>VM.Standard.E2.1.Micro<\/code><\/td><td><code>VM.Standard.A1.Flex<\/code><\/td><\/tr><tr><td>Architecture<\/td><td>x86_64<\/td><td>ARM64<\/td><\/tr><tr><td>CPU<\/td><td>1\/8 OCPU, burstable<\/td><td>2 OCPUs total<\/td><\/tr><tr><td>RAM<\/td><td>1 GB per VM<\/td><td>12 GB total<\/td><\/tr><tr><td>Free allowance<\/td><td>Up to 2 VMs<\/td><td>Up to 2 VMs sharing allowance<\/td><\/tr><tr><td>Use case<\/td><td>SSH, Linux labs, lightweight websites<\/td><td>Docker, APIs, multiple small applications<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle currently documents 1,500 free A1 OCPU-hours and 9,000 GB-hours monthly, equivalent to 2 OCPUs and 12 GB of memory for Always Free tenancies. It also provides 200 GB of combined Always Free boot\/block storage. Oracle Documentation<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For your account: Start with AMD E2 Micro because your A1 creation previously failed due to unavailable capacity. You can attempt ARM again whenever capacity becomes available.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Log in to Oracle Cloud<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/images.openai.com\/static-rsc-4\/Bi8UFc7deUeG7welQJC0WU1WO3eVq9uzRRVnOZ_YlwFqW1ePTXMBC5D3c_Jju28gagDNNvCiR5OIl9QfOQPEsjvXHH5Ajik6NsX2oYRn0iHE5x-sqLhLBBOdzNviPwubxMOGV9P_ioTM3oV9Va52i5yXlsNzNE1HvMyn9PQrVJs?purpose=inline\">Cloud Infrastructure | Oracle<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle Cloud Infrastructure Console<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Official Oracle account login and infrastructure management portal<a href=\"https:\/\/cloud.oracle.com\/?utm_source=chatgpt.com\">Open Oracle Cloud Console<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1 \u2014 Open the login portal<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open Chrome, Edge, Safari, or Firefox.<\/li>\n\n\n\n<li>Visit <code>https:\/\/cloud.oracle.com<\/code>.<\/li>\n\n\n\n<li>Select Sign In, if prompted.<\/li>\n\n\n\n<li>Enter your Cloud Account or Tenancy name, then continue.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Your tenancy name identifies the Oracle Cloud account. It is not necessarily the same as your username or compartment name.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2 \u2014 Authenticate<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select the appropriate identity domain, commonly <code>Default<\/code> for newer accounts, if Oracle prompts you.<\/li>\n\n\n\n<li>Enter your registered username or email address.<\/li>\n\n\n\n<li>Enter your password.<\/li>\n\n\n\n<li>Complete multifactor authentication if enabled.<\/li>\n\n\n\n<li>Wait for the OCI Console dashboard to appear.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">If this is your first sign-in, use the activation link from your Oracle welcome email and complete password setup and verification. Oracle Documentation+1<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3 \u2014 Verify the region<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Find the region selector near the top of the OCI Console.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your earlier error referenced <code>ap-mumbai-1<\/code>, which corresponds to India West (Mumbai).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check that this is also the home region of your tenancy. Oracle Always Free compute must be provisioned in the tenancy&#8217;s home region, not just any region that you subscribe to. Oracle Documentation<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4 \u2014 Navigate to Compute<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">From the OCI Console:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Navigation menu (\u2630) \u2192 Compute \u2192 Instances<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You will see the list of virtual machines in the selected compartment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you have an existing instance, inspect it before creating another one. Otherwise, continue with the networking setup below.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Create the Virtual Cloud Network (VCN)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A VCN is your private network inside Oracle Cloud. Your VM needs a subnet, routing, an Internet Gateway and security rules to communicate with the Internet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since you already created <code>vcn-free-vps<\/code> with a public subnet, you can skip creating another VCN. The following steps are for anyone starting from a new account.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5 \u2014 Open the VCN Wizard<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to Networking \u2192 Virtual Cloud Networks.<\/li>\n\n\n\n<li>Select your compartment.<\/li>\n\n\n\n<li>Click Start VCN Wizard.<\/li>\n\n\n\n<li>Choose Create VCN with Internet Connectivity.<\/li>\n\n\n\n<li>Click Start VCN Wizard again.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Example VCN configuration<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Setting<\/th><th>Example<\/th><\/tr><tr><td>VCN name<\/td><td><code>vcn-free-vps<\/code><\/td><\/tr><tr><td>Compartment<\/td><td>Your root compartment<\/td><\/tr><tr><td>IPv4 CIDR<\/td><td><code>10.0.0.0\/16<\/code><\/td><\/tr><tr><td>Public subnet CIDR<\/td><td><code>10.0.0.0\/24<\/code><\/td><\/tr><tr><td>Private subnet CIDR<\/td><td><code>10.0.1.0\/24<\/code><\/td><\/tr><tr><td>DNS<\/td><td>Enabled<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Click Next \u2192 Create \u2192 View VCN.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The VCN Wizard automatically creates public and private subnets, route tables, basic security lists, and the necessary network gateways. Oracle Documentation<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6 \u2014 Verify the networking<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open the VCN and check:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Component<\/th><th>Expected value<\/th><\/tr><tr><td>VCN<\/td><td>Available<\/td><\/tr><tr><td>Public subnet<\/td><td>Available<\/td><\/tr><tr><td>Internet Gateway<\/td><td>Created and enabled<\/td><\/tr><tr><td>Public subnet route<\/td><td><code>0.0.0.0\/0<\/code> \u2192 Internet Gateway<\/td><\/tr><tr><td>Default security list<\/td><td>Includes SSH ingress rule<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A public IP alone is insufficient without the correct Internet Gateway, routing and security configuration. Oracle Documentation<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Create your Always Free AMD virtual machine<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 7 \u2014 Open the instance-creation wizard<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Navigate to:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compute \u2192 Instances \u2192 Create Instance<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle&#8217;s current workflow contains five main stages:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create compute instance<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">5 stages<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Basic<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Security<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Networking<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Storage<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">5<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Review<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 8 \u2014 Configure Basic Information<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Enter the following:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Setting<\/th><th>Select<\/th><\/tr><tr><td>Name<\/td><td><code>oracle-amd-free-vps<\/code><\/td><\/tr><tr><td>Create in compartment<\/td><td><code>rajesh61 (root)<\/code><\/td><\/tr><tr><td>Availability domain<\/td><td><code>AD-1<\/code><\/td><\/tr><tr><td>Capacity type<\/td><td>On-demand<\/td><\/tr><tr><td>Fault domain<\/td><td>Let Oracle choose<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For your Mumbai region, Oracle lists one availability domain, so AD-2 and AD-3 are not available alternatives. Oracle Documentation<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 9 \u2014 Select the correct OS image<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This step is important because your previous AMD attempt failed with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Shape VM.Standard.E2.1.Micro is not valid for image...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You were switching from an ARM VM configuration to an AMD VM configuration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Go to Image \u2192 Change Image and select a compatible image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended OS image selection<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Setting<\/th><th>Select<\/th><\/tr><tr><td>Image source<\/td><td>Platform Images<\/td><\/tr><tr><td>Operating system<\/td><td>Oracle Linux<\/td><\/tr><tr><td>Preferred version<\/td><td>Oracle Linux 9<\/td><\/tr><tr><td>Architecture<\/td><td>x86_64<\/td><\/tr><tr><td>Image build<\/td><td>Compatible build shown in Console<\/td><\/tr><tr><td>Licensing<\/td><td>Always Free Eligible<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If the Oracle Linux 9 build is not compatible with E2 Micro, try Oracle Linux 8 x86_64 or another Always Free-eligible x86_64 image, such as a supported Ubuntu version.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Never reuse an image marked <code>aarch64<\/code> when creating an AMD instance. Oracle documents cross-architecture image mismatches as a cause of this error. Oracle Documentation<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 10 \u2014 Choose the AMD shape<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Click Change Shape, then:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select Virtual Machine.<\/li>\n\n\n\n<li>Open Shape series.<\/li>\n\n\n\n<li>Choose Specialty and previous generation.<\/li>\n\n\n\n<li>Select <code>VM.Standard.E2.1.Micro<\/code>.<\/li>\n\n\n\n<li>Confirm Always Free Eligible.<\/li>\n\n\n\n<li>Click Select Shape.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">EXPECTED SHAPE SUMMARY<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">VM.Standard.E2.1.Micro<\/h2>\n\n\n\n<h1 class=\"wp-block-heading\">1\/8<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">OCPU<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">1 GB<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">RAM<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">50 GB<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Boot disk (default)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the latest Oracle Console, E2 Micro is grouped under Specialty and previous generation, not necessarily the main AMD shape category. Oracle Documentation<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the shape is disabled, revisit Change Image and choose an image explicitly compatible with E2 Micro.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 11 \u2014 Configure Security<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For your initial Linux VPS, leave the default security options unless you have a specific requirement.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Setting<\/th><th>Recommendation<\/th><\/tr><tr><td>Confidential computing<\/td><td>Disabled<\/td><\/tr><tr><td>Secure Boot<\/td><td>Default<\/td><\/tr><tr><td>Measured Boot<\/td><td>Default<\/td><\/tr><tr><td>Trusted Platform Module<\/td><td>Default<\/td><\/tr><tr><td>Compute Instance Monitoring<\/td><td>Enabled<\/td><\/tr><tr><td>Run Command<\/td><td>Enabled if available<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Do not enable premium services without first checking their billing terms.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Configure networking and SSH<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 12 \u2014 Select your existing public network<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open the Networking stage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Choose Select existing virtual cloud network and enter:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Setting<\/th><th>Your value<\/th><\/tr><tr><td>Virtual cloud network<\/td><td><code>vcn-free-vps<\/code><\/td><\/tr><tr><td>Subnet<\/td><td><code>public<\/code><\/td><\/tr><tr><td>DNS record<\/td><td>Yes<\/td><\/tr><tr><td>Network security groups<\/td><td>No, use security lists initially<\/td><\/tr><tr><td>Automatically assign public IPv4<\/td><td>Yes<\/td><\/tr><tr><td>Private IPv4<\/td><td>Automatically assigned<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">These are the same settings you successfully configured earlier.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle&#8217;s public IPv4 assignment option is only available for a public subnet. Oracle Documentation<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 13 \u2014 Generate your SSH key pair<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is essential. Without the matching private key, you may be unable to log in to your Linux VM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Under Add SSH Keys:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Choose Generate a key pair for me.<\/li>\n\n\n\n<li>Click Save Private Key.<\/li>\n\n\n\n<li>Optionally click Save Public Key.<\/li>\n\n\n\n<li>Store both files securely.<\/li>\n\n\n\n<li>Confirm the key configuration appears in the instance review.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Understand your SSH keys<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Private key \u2014 stays on your computer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Never share it or upload it to a public repository.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Public key \u2014 installed on the VM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The matching private key is used to authenticate your SSH connection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle cannot provide you with the generated private key again after the VM is created, so keep a secure backup. Oracle Documentation<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Configure storage and create the VM<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 14 \u2014 Configure the boot volume<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open Storage.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Setting<\/th><th>Recommended<\/th><\/tr><tr><td>Custom boot volume<\/td><td>Disabled<\/td><\/tr><tr><td>Default boot volume<\/td><td>50 GB<\/td><\/tr><tr><td>Performance<\/td><td>Default\/Balanced<\/td><\/tr><tr><td>In-transit encryption<\/td><td>Enabled<\/td><\/tr><tr><td>Additional block volume<\/td><td>None<\/td><\/tr><tr><td>Encryption key<\/td><td>Oracle-managed default<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The default 50 GB boot volume counts against the 200 GB Always Free storage allowance. Oracle Documentation<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 15 \u2014 Review the configuration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Your final review should look similar to this:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Oracle AMD Free VPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Target: $0\/month<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Property<\/th><th>Value<\/th><\/tr><tr><td>Shape<\/td><td>VM.Standard.E2.1.Micro<\/td><\/tr><tr><td>Operating system<\/td><td>Compatible x86_64 Linux image<\/td><\/tr><tr><td>Availability domain<\/td><td>AD-1<\/td><\/tr><tr><td>Capacity<\/td><td>On-demand<\/td><\/tr><tr><td>Storage<\/td><td>50 GB<\/td><\/tr><tr><td>VCN<\/td><td>vcn-free-vps<\/td><\/tr><tr><td>Subnet<\/td><td>public<\/td><\/tr><tr><td>Public IPv4<\/td><td>Yes<\/td><\/tr><tr><td>SSH keys<\/td><td>Configured<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Click View Estimated Cost before creation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You previously saw a boot-volume estimate of <code>$2.76\/month<\/code>. An estimated price does not necessarily reflect applied Always Free allowances. However, you should verify that your storage and all other resources remain within the eligible limits rather than treating every estimate as automatically free.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 16 \u2014 Click Create<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once the settings are correct, click Create.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The instance should move through the following states:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Provisioning<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Running<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If Oracle returns a capacity error, refer to the troubleshooting section below. Capacity is not guaranteed, even for eligible free-tier shapes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Log in to your Oracle VM using SSH<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 17 \u2014 Find the public IP address<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Navigate to:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compute \u2192 Instances \u2192 oracle-amd-free-vps<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open the instance details page and find Instance access \u2192 Public access IP address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copy that IP address.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 18 \u2014 Connect from macOS<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open Terminal on your Mac.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First secure the private key you downloaded:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 400 ~\/Downloads\/your-private-key.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Connect to Oracle Linux:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -i ~\/Downloads\/your-private-key.key opc@YOUR_PUBLIC_IP<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <code>your-private-key.key<\/code> with the actual filename and <code>YOUR_PUBLIC_IP<\/code> with the address from the OCI Console.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For Ubuntu images, use the username <code>ubuntu<\/code> instead of <code>opc<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The official Oracle documentation confirms these default Linux usernames and SSH connection requirements. Oracle Documentation<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 19 \u2014 Connect from Windows<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open Windows PowerShell:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -i \"C:\\Users\\YourUser\\Downloads\\your-private-key.key\" opc@YOUR_PUBLIC_IP<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use the matching private key and ensure its file permissions restrict access to your Windows user.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When SSH asks you to verify the host key, confirm that the fingerprint corresponds to the intended VM before accepting it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 20 \u2014 Verify that you are inside the VM<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>whoami\nhostname\ncat \/etc\/os-release\nuname -m\nfree -h\ndf -h \/\nip -br address<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For an AMD VM, <code>uname -m<\/code> should show:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>x86_64<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For an ARM VM, it should show:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>aarch64<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These commands confirm your username, operating system, architecture, memory, storage and networking.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. Update Linux and test a website<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 21 \u2014 Update the operating system<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For Oracle Linux 8 or 9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dnf update -y<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For Ubuntu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt upgrade -y<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Reboot if required by updates, then reconnect using SSH.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 22 \u2014 Install NGINX (Oracle Linux example)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">NGINX lets you verify that your VPS can serve a simple website.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dnf install -y nginx\nsudo systemctl enable --now nginx\nsudo systemctl status nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify locally:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -I http:\/\/127.0.0.1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A successful response generally includes <code>HTTP\/1.1 200 OK<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 23 \u2014 Allow HTTP in OCI<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Your VCN&#8217;s security rules and your Linux firewall both matter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Networking \u2192 Virtual Cloud Networks \u2192 vcn-free-vps \u2192 Security Lists<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Find the security list associated with your public subnet. Add these ingress rules as needed.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Protocol<\/th><th>Source<\/th><th>Destination port<\/th><\/tr><tr><td>TCP<\/td><td>Your public IP <code>\/32<\/code><\/td><td>22 (SSH)<\/td><\/tr><tr><td>TCP<\/td><td><code>0.0.0.0\/0<\/code><\/td><td>80 (HTTP)<\/td><\/tr><tr><td>TCP<\/td><td><code>0.0.0.0\/0<\/code><\/td><td>443 (HTTPS, when configured)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For a public website, HTTP and HTTPS must be reachable. SSH should ideally be restricted to your own IP. Oracle Documentation<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On Oracle Linux, check whether <code>firewalld<\/code> is running:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo firewall-cmd --state<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If it reports <code>running<\/code>, enable HTTP:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo firewall-cmd --permanent --add-service=http\nsudo firewall-cmd --reload<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle&#8217;s Linux NGINX documentation covers configuring the host firewall for web access. Oracle Documentation<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 24 \u2014 Test your public website<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Open this URL in your browser:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:&#47;&#47;YOUR_PUBLIC_IP<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You should see the NGINX welcome page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a real website, configure DNS and TLS\/HTTPS before publishing sensitive or authenticated applications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. Troubleshooting \u2014 errors you encountered<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">These are the most relevant fixes for your Oracle Free Tier setup.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Error 1 \u2014 Out of capacity for VM.Standard.A1.Flex<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle currently has no available A1 capacity for the selected availability domain. Your Mumbai region has one AD, so switching to AD-2 or AD-3 is not possible there. Try fewer A1 resources, use E2 Micro if available, or retry A1 later. None guarantees capacity. Oracle Documentation+1<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Error 2 \u2014 Shape E2.1.Micro is not valid for image<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Change to a compatible x86_64 image. Do not keep the earlier ARM64 image OCID when switching to AMD. Check the compatible-shapes list in the Console. Oracle Documentation<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Error 3 \u2014 Public IPv4 assignment disabled<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Select a public subnet in a VCN with Internet connectivity. A private subnet cannot be assigned a public IPv4 address. Oracle Documentation<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Error 4 \u2014 SSH permission denied (publickey)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check that the correct private key and username are being used. Oracle Linux uses <code>opc<\/code>; Ubuntu uses <code>ubuntu<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Error 5 \u2014 SSH connection timed out<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verify the VM is Running, public IP exists, port 22 is allowed, the subnet routes to an Internet Gateway, and your local network permits SSH. Oracle Documentation<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SSH diagnostic commands<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On macOS:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nc -vz -G 5 YOUR_PUBLIC_IP 22<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If the port responds but SSH authentication fails, investigate your private key and username.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For additional SSH logging:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -v -i ~\/Downloads\/your-private-key.key opc@YOUR_PUBLIC_IP<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">10. Protect your Always Free account from unexpected billing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle&#8217;s Always Free allowance applies only to eligible resources within documented limits. On a paid or trial account, additional or ineligible usage can create charges.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 25 \u2014 Create a budget alert<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Navigate to:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Billing &amp; Cost Management \u2192 Budgets \u2192 Create Budget<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Choose your root compartment or a dedicated workload compartment.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Setting<\/th><th>Suggested value<\/th><\/tr><tr><td>Budget name<\/td><td><code>oracle-free-tier-alert<\/code><\/td><\/tr><tr><td>Scope<\/td><td>Your workload compartment<\/td><\/tr><tr><td>Schedule<\/td><td>Monthly<\/td><\/tr><tr><td>Budget amount<\/td><td>$1, or equivalent currency<\/td><\/tr><tr><td>Threshold metric<\/td><td>Actual Spend<\/td><\/tr><tr><td>Threshold<\/td><td>100%<\/td><\/tr><tr><td>Email<\/td><td>Your billing notification email<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Important: Oracle budgets are soft limits. They notify you of spending; they do not automatically stop or prevent charges. Oracle Documentation+1<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 26 \u2014 Monitor storage usage<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Review both attached and unattached boot\/block volumes. Terminating an instance through the Console can preserve its boot volume by default, so old volumes may continue consuming free storage allowance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When deleting a test VM you no longer need, carefully review the Permanently delete the attached boot volume option. Only delete storage when its data is no longer needed. Oracle Documentation<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 27 \u2014 Keep your VPS secure<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable MFA for your Oracle Cloud login.<\/li>\n\n\n\n<li>Never share the SSH private key.<\/li>\n\n\n\n<li>Restrict SSH ingress to trusted IP addresses.<\/li>\n\n\n\n<li>Install operating-system security updates regularly.<\/li>\n\n\n\n<li>Keep database ports closed to the public Internet.<\/li>\n\n\n\n<li>Set up backups for anything important.<\/li>\n\n\n\n<li>Monitor disk, memory and application health.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle also notes that idle Always Free instances may be reclaimed under its published utilization criteria. Avoid treating these VMs as guaranteed production hosting. Oracle Documentation<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">11. Final hands-on validation checklist<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use this checklist after completing the tutorial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">VM deployment progress0 of 13 checks complete<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">0%<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle Cloud account login successfulCorrect home region selectedVCN and public subnet availableInternet Gateway and default route verifiedAlways Free-eligible x86_64 image selectedVM.Standard.E2.1.Micro shape selectedSSH private key saved securelyPublic IPv4 address assignedInstance state is RunningSSH login successfulOS architecture and disk verifiedWeb server accessible on public IPv4Billing alert configured<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">12. Official Oracle documentation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">These are the primary resources used to verify the procedure:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Compute\/Tasks\/launchinginstance.htm?utm_source=chatgpt.com\">Creating an Oracle Compute Instance<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/FreeTier\/freetier_topic-Always_Free_Resources.htm?utm_source=chatgpt.com\">Always Free Resource Limits<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Network\/Tasks\/quickstartnetworking.htm?utm_source=chatgpt.com\">Virtual Networking Wizards<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Compute\/Tasks\/connect-to-linux-instance.htm?utm_source=chatgpt.com\">Connecting to a Linux Instance<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Compute\/Tasks\/troubleshooting-ssh-connection.htm?utm_source=chatgpt.com\">Troubleshooting SSH Connections<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recommended configuration for your next attempt<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Because you already created <code>vcn-free-vps<\/code> and its public subnet, do not recreate the network. Return to Compute \u2192 Instances \u2192 Create Instance, select AMD E2 Micro with a compatible x86_64 Linux image, attach an SSH key, and reuse your existing networking.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your immediate goal is to get one AMD VM into the Running state and successfully log in using SSH. Once that works, you will have a functioning Oracle Cloud Linux VPS and can proceed to install applications.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Beginner to Advanced | Updated: November 2, 2026 | Verified against official Oracle Cloud Infrastructure documentation This guide walks you through logging in to Oracle Cloud, configuring&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1275","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1275"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1275\/revisions"}],"predecessor-version":[{"id":1276,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1275\/revisions\/1276"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}