How to Get a Free VPS with 4 CPUs and 24GB RAM
The Best Free VPS Nobody Talks About
AWS free tier gives you a t2.micro — 1 vCPU, 1GB RAM, and it expires after 12 months. Google Cloud and Azure are similar. Then there's Oracle Cloud, quietly offering 4 ARM OCPUs and 24GB of RAM for free. Forever.
No credit card surprises. No 12-month expiry. The Always Free tier includes Ampere A1.Flex instances that outperform most paid entry-level VPS plans. The catch? They're almost always out of stock.
Here's how to get one, and what to do with it once you have it.
Step 1: Create an Oracle Cloud Account
Sign up at cloud.oracle.com. You'll need a credit card for verification but won't be charged — and you can't accidentally spend money if you stay on the Always Free tier.
Pick a home region close to you. This matters — you can't change it later, and your free instances will live in this region. We use Frankfurt (eu-frankfurt-1).
Step 2: Set Up Networking
Before launching an instance, you need a Virtual Cloud Network (VCN):
- Go to Networking → Virtual Cloud Networks
- Click Start VCN Wizard → Create VCN with Internet Connectivity
- Accept the defaults and create it
Then open the ports you'll need. Go to your VCN → Public Subnet → Default Security List → Add Ingress Rules:
- Port 80 (HTTP) — Source CIDR:
0.0.0.0/0 - Port 443 (HTTPS) — Source CIDR:
0.0.0.0/0 - Port 22 (SSH) — already open by default
Step 3: The Capacity Problem
Try to create an A1.Flex instance through the console and you'll likely see:
Out of host capacity.
Oracle's free ARM instances are extremely popular. Capacity comes and goes — sometimes it's available at 3 AM, sometimes not for days. Clicking "Create" manually is a losing game.
The solution: automate it. We built a script that keeps retrying until a slot opens up.
Step 4: Install the OCI CLI
You'll need Oracle's CLI tool. SSH into any existing server (or use your local machine) and install it:
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
Then configure it:
oci setup config
This walks you through entering your tenancy OCID, user OCID, region, and generating an API key. Upload the public key to your Oracle Cloud profile under Identity → Users → API Keys.
Step 5: Grab Your Instance
Clone the grabber script:
git clone https://github.com/zerodeps-dev/oracle-arm-grabber.git
cd oracle-arm-grabber
cp .env.example .env
Fill in your .env with your OCIDs. To find them:
- Compartment ID — Identity → Compartments (or just use your tenancy OCID from the OCI CLI config)
- Subnet ID — Networking → VCNs → your VCN → Public Subnet
- Image ID — Compute → Images, or list them with:
oci compute image list --compartment-id YOUR_ID --shape VM.Standard.A1.Flex --query 'data[?contains("display-name", `Ubuntu`)].{name:"display-name",id:id}' --output table - Availability domains —
oci iam availability-domain list --query 'data[].name' --output table
Then run it:
source .env && ./grab.sh
The script cycles through all availability domains, retrying every 60 seconds. Leave it running — most people get their instance within a few hours to a couple of days.
Step 6: Secure It
Once your instance is up, SSH in and lock it down:
# Update everything
sudo apt update && sudo apt upgrade -y
# Open ports in iptables (Oracle's Ubuntu image blocks them by default)
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save
The security list you configured earlier handles the cloud firewall. The iptables rules handle the OS-level firewall — Oracle's default Ubuntu image ships with these locked down even when the cloud security list allows traffic.
What Can You Do With It?
4 OCPUs and 24GB of RAM is a serious machine. Here's what we run on ours:
Static Website Hosting
Install Caddy — it handles HTTPS automatically via Let's Encrypt:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install caddy
Add your site to /etc/caddy/Caddyfile:
yourdomain.com {
root * /srv/www/yoursite
file_server
}
Point your domain's DNS A record to your instance's public IP, and Caddy handles the rest — automatic HTTPS, HTTP/2, zero config.
Docker Apps
With 24GB of RAM, you can run multiple containerized services. Install Docker:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
We run an uptime monitor (SiteWatch) and an MCP server for Claude — both as Docker containers, both behind Caddy's reverse proxy.
Reverse Proxy
Caddy makes reverse proxying trivial. Add entries to your Caddyfile:
app.yourdomain.com {
reverse_proxy localhost:3000
}
api.yourdomain.com {
reverse_proxy localhost:8080
}
Each subdomain gets its own automatic HTTPS certificate.
MCP Server Hosting
If you use Claude (Web App, Desktop, or CLI), you can self-host MCP servers that give Claude access to your tools. We run a GitHub Issues MCP server that lets Claude manage our project boards — all on the free Oracle instance.
The Numbers
Here's what Oracle's Always Free tier actually gives you:
- 4 Ampere A1 OCPUs — ARM-based, surprisingly fast
- 24 GB RAM — more than most $20/month VPS plans
- 200 GB boot volume — plenty for most workloads
- 10 TB/month outbound — you're not hitting this with personal projects
- No expiry — it's free as long as Oracle offers the program
You can use this as a single beefy instance or split it into up to four smaller ones. We run one instance with the full allocation and it handles everything we throw at it.
The Catch
There are a few things to know:
- ARM architecture — most software works fine, but check compatibility for niche tools. Docker images need ARM builds (most popular ones have them).
- Idle reclamation — Oracle may reclaim instances that are truly idle (no CPU usage for 7 days). Running any workload prevents this.
- Capacity lottery — getting the instance is the hardest part. The grabber script solves this, but it still requires patience.
- Region lock — your free tier is locked to your home region. Choose wisely during sign-up.
For personal projects, side businesses, and self-hosted tools — it's hard to beat free.