Introduction
Creating a free Linux virtual machine on Oracle Cloud Infrastructure (OCI) is one of the best ways to experiment with cloud computing without spending [a lot of] money. Oracle offers an Always Free tier that includes ARM and AMD-based virtual machines, storage, and networking resources at no cost.
This step-by-step guide walks you through the entire process.
Why Use OCI Free Tier?
Oracle’s Free Tier includes:
- Up to 2 AMD-based VM instances
- Up to 4 ARM Ampere A1 cores and 24 GB RAM (flexible)
- 200 GB block storage
- Always Free resources that don’t expire
This makes OCI especially attractive compared to other providers when you need more RAM or CPU for free.
Create an OCI Account
- Go to the official Oracle Cloud website.
- Click Start for free.
- Create an account using your email.
- Add payment verification (credit card required, but you won’t be charged for Always Free resources).
- Verify your identity and log in. Once your account is created, you’ll land in the OCI Console dashboard.
Prerequisites
Networking prerequisites
Steps that I should follow to create and setup the network for an always free linux image that can be accessed via public IP.
To run an Always Free Linux VM with a public IP in Oracle Cloud Infrastructure, you need a minimal VCN + subnet + internet gateway + routing + security rules. Below is the typical setup flow.
Create a VCN
- Go to Networking → Virtual Cloud Networks

- Click Create VCN

- Choose VCN Only
- Example configuration:
| Setting | Value |
| Name | vcn-adan |
| CIDR block | 10.0.0.0/16 |
Create an Internet Gateway
Inside the VCN:
- Gateways → Internet Gateways
- Click Create Internet Gateway
- Name: free-igw

- Enable it.
This allows the subnet to reach the internet.
Create a Public Subnet
Inside the VCN:
- Go to Subnets
- Click Create Subnet

Example config:
| Setting | Value |
| Name | public-subnet |
| CIDR | 10.0.1.0/24 |
| Subnet Type | Regional |
| Route Table | Default |
| Public Subnet | Yes |

Configure the Route Table
Edit the route table attached to the subnet.
Add route rule:
| Destination | Target |
| 0.0.0.0/0 | Internet Gateway |
Target = free-igw
This allows outbound internet access.

Configure Security Rules
Open the Security List for the subnet/vcn.
Add Ingress rule:
| Type | Source | Port |
| SSH | 0.0.0.0/0 | 22 |

Optional rules:
| Purpose | Port |
| HTTP | 80 |
| HTTPS | 443 |
Step 3: Navigate to Compute Instances
- Open the navigation menu (☰ in the top-left).
- Go to Compute → Instances.
- Click Create Instance.
Now you’re ready to configure your VM.
Step 4: Configure Your Linux VM
Name Your Instance 
raphael
2. Choose Placement
Select the default compartment unless you’ve created a custom one.

Advanced options:

Step 5: Choose a Free Shape
Image and shape

Click Change Shape and select an Always Free eligible shape:

Recommended Option (Best Value)
- VM.Standard.A1.Flex (ARM-based)
- Up to 4 cores
- Up to 24 GB RAM
This gives significantly more resources than most free tiers.

Alternative Option
- VM.Standard.E2.1.Micro (AMD-based)
- 1 OCPU
- 1 GB RAM
Make sure the shape says Always Free eligible.

Note: even now the estimated OCI cost is non zero! If you choose the shape and option as in the article, there will be no extra charge so the environment usage is free.

Proceed through the next screens: Security, Networking etc.
/Networking
Here I chose to create a new Virtual cloud network and consistently updated the names with the instance name I chose:

Add SSH Keys
download and save the keys

Storage
Here I also use lowest performance possible to minis resource usage:

Create: click CREATE

Connectivity
The first step to test the connectivity I used a simple ssh client installed on may macbook, it is important to note the following steps:
I used the command in the format: ssh -i in order to specify the the path to the private key file which I created and downloaded as part of the process outlines before.
Also, it is important to note that the connectivity onwards the public IP address did not work immediately after creating the instance even if everything was showing to be in good order on the OCI interface. But after 2 days the connectivity worked OK. Most likely after 2 days of week end, certain updates on the OCI side were completed so everything resumed to normal operation.
Next, I will write an article describing how to setup the connection to the new created Oracle Linux instance.
