On this page
- Step 1 — Create the account (the hardest step)
- Step 2 — Set a cost alert before you create anything
- Step 3 — Create the ARM instance (your $0 server)
- Step 4 — Attach extra storage and run your app
- Step 5 — Put HTTPS and a CDN in front
- Step 6 — Add a database (optional)
- Step 7 — Keep the instance alive
- Where AI coding assistants get this wrong
- Checklist
- FAQ
- Related topics
- Sources
How to Deploy Your First App on Oracle Cloud for Free
Deploy an app on Oracle Cloud for $0: Ampere A1 ARM VM (2 OCPU/12 GB), 200 GB block storage, Autonomous DB, and the idle-reclamation trap.
Quick answer
- Oracle Cloud’s Always Free tier is the only one of the big providers that gives you a real, always-on VM for $0: an Ampere A1 ARM instance (2 OCPU, 12 GB RAM) plus two AMD micro VMs.
- You also get 200 GB of block storage, 10 GB of object storage, and two Autonomous Databases — enough to run a genuine web app with a database, indefinitely.
- The trade-off is operational: Oracle reclaims idle instances, quietly changes limits, and its signup verification rejects people. Keep the VM busy and stay under the current limits.
- In June 2026 Oracle halved the ARM allowance from 4 OCPU/24 GB to 2 OCPU/12 GB without announcing it — verify current limits before you build.
Step 1 — Create the account (the hardest step)
Go to signup.oraclecloud.com and fill out the form. Oracle requires a credit or debit card for identity verification — no virtual or prepaid cards — and runs aggressive fraud screening. If you get rejected, common fixes are: use the same address/card details as your bank, don’t use a VPN, and try a different browser or network.
You’ll pick a home region during signup. This is permanent for Always Free resources — you cannot move free compute to another region later, so choose one that has had ARM capacity (community-reported regions with good Ampere availability: US East (Ashburn), US West (Phoenix), EU Frankfurt, and AP Mumbai have historically been reliable, but availability changes — check OCI status before committing).
You get $300 of credit valid for 30 days for paid services, plus the Always Free resources that never expire.
How to verify it worked: you land in the OCI console at cloud.oracle.com and the Free Tier banner shows your $300 credit and 30-day countdown.
Step 2 — Set a cost alert before you create anything
In the console, open the hamburger menu → Billing & Cost Management → Budgets → Create Budget. Set a monthly budget of $10 with alerts at 50% and 100%. Always Free resources won’t trigger it — anything that does is a mistake.
How to verify it worked: the budget appears in the list with status Active.
Step 3 — Create the ARM instance (your $0 server)
- Hamburger menu → Compute → Instances → Create instance.
- Name it
myappand pick a compartment (the root one is fine). - Under Image and shape → Change image, choose Ubuntu (an “Always Free eligible” image; no license cost).
- Under Shape → Change shape, select Ampere → VM.Standard.A1.Flex and set 2 OCPUs and 12 GB of memory. (On a Pay As You Go account, Oracle Support has said 4 OCPU/24 GB may still be allowed — see the note below.)
- Leave the boot volume at the default size (minimum 47 GB) — it counts against your 200 GB block storage allowance.
- Under Networking, keep the default VCN and public subnet, and select Assign a public IPv4 address.
- Add SSH keys — paste your public key or let Oracle generate a key pair and download the private key.
- Click Create.
If you get “Out of host capacity for shape VM.Standard.A1.Flex” — the famous ARM capacity error — retry in a few minutes, try a different availability domain, or resize to 1 OCPU/6 GB first. It’s temporary, not a rejection of your account.
How to verify it worked: the instance shows Running and ssh ubuntu@<public-ip> connects with your key.
Note on the June 2026 limit change
In June 2026 Oracle quietly halved the Always Free Ampere A1 allowance from 4 OCPU/24 GB to 2 OCPU/12 GB (1,500 OCPU-hours + 9,000 GB-hours per month). Instances above the new limits on free accounts were shut down. Oracle Support told some Pay As You Go users the old 4/24 allowance still applies to them, but that was never documented publicly — and if a grandfathered instance is ever terminated, it may not be recreatable above the new limits. Treat 2 OCPU/12 GB as the safe baseline.
Step 4 — Attach extra storage and run your app
Your 200 GB block volume allowance covers the boot volume and additional volumes. To keep data separate from the OS:
- Block Storage → Block Volumes → Create block volume, size it (e.g., 100 GB), and attach it to the instance.
- SSH in, format and mount it (or use it directly with Docker:
sudo docker run -d -v /mnt/data:/data ...).
Then deploy your app however you like — Docker, systemd, or docker-compose on the ARM VM is the standard setup. The VM is a real 2-core box; it handles Node, Python, Postgres, or Ollama-class workloads comfortably within 12 GB.
How to verify it worked: your app responds on http://<public-ip>:<port> from a browser, and df -h shows the attached volume mounted.
Step 5 — Put HTTPS and a CDN in front
Don’t open ports 80/443 to the raw VM and skip TLS. Two options:
- Oracle’s free load balancer (10 Mbps, one instance included) terminates TLS at the edge.
- Cloudflare in front of the VM — free, gives you HTTPS, DDoS protection, and caching, and Oracle’s 10 GB/month outbound transfer goes much further when static assets are served from Cloudflare’s cache. See How to Set Up Cloudflare for a Small Project — it’s the setup most Oracle free-tier users run.
How to verify it worked: https://your-domain loads the app, the connection is TLS, and a curl -I shows Cloudflare’s cf-ray header.
Step 6 — Add a database (optional)
You have two free paths:
- Autonomous Database — create an Autonomous Database instance and choose the Always Free configuration (2 databases, 20 GB each, included). It’s a managed Oracle database with an OCI wallet for connection — heavier to set up than Postgres, but genuinely free.
- Postgres/MySQL/SQLite on the VM — zero extra services to manage, and it costs nothing. For a vibecoder app, this is usually the right call:
apt install postgresqland point your app atlocalhost.
How to verify it worked: your app reads and writes rows; on the Autonomous path the OCI console shows the DB’s CPU/IO usage at Free tier status.
Step 7 — Keep the instance alive
Oracle’s stated policy: idle Always Free instances may be reclaimed. An instance is “idle” if for a 7-day period its CPU, network, and memory utilization are all under 20% (95th percentile; memory applies to A1 shapes only). This is the #1 way people lose their free VM. Prevention:
- Point an external uptime check at the app (UptimeRobot, or a Cloudflare Worker cron) so there’s real traffic.
- Add a cron job for maintenance (backups, cache warming) so CPU stays nonzero.
- Keep a database on the VM so memory utilization is meaningful.
Also re-check the Always Free limits a couple of times a year — Oracle has shown it will change them with zero notice.
How to verify it worked: the instance has been running for 30+ days without a stop event, and the Idle column in the compute console (where shown) reads no reclamation notice.
Where this bites vibecoders
The AI-generated deployment plan for Oracle Cloud usually says “create a VM and run your app with Docker.” That part is fine — OCI is the one place where a real always-on VM is genuinely $0. The part the AI won’t tell you: the instance can be reclaimed for being idle, the ARM limits were halved with no announcement in 2026, capacity errors are common, and the signup verification can reject you for reasons you’ll never fully understand. Oracle’s free tier is the most powerful of any major cloud — and the most conditional. Treat the VM as a pet you have to feed traffic, not a set-and-forget server.
Where AI coding assistants get this wrong
- Assuming the 4 OCPU/24 GB ARM allowance still exists — it was halved to 2 OCPU/12 GB in June 2026 for free accounts.
- Generating instance shapes that exceed Always Free limits (e.g., E4 or VM.Standard2 shapes), which bill against the $300 trial credit and stop when it runs out.
- Leaving the instance idle and unmonitored, triggering Oracle’s 7-day idle reclamation.
- Opening 22/80/443 to the world without SSH key-only auth or a CDN, turning the free VM into a botnet target.
- Creating the ARM instance in the wrong region — Always Free compute is locked to your home region, and capacity varies wildly by region.
Checklist
- Create the account with a real (non-virtual) card and pick a home region with ARM capacity
- Set an OCI Budget alert ($10) before creating anything
- Create the Ampere A1 instance at 2 OCPU / 12 GB with an Always Free-eligible image
- Attach extra block storage (within the 200 GB allowance) for app data
- Put Cloudflare or the free load balancer in front — no raw HTTP to the VM
- Choose a database: Autonomous DB (Always Free) or Postgres on the VM
- Keep the instance busy (uptime check + cron) to avoid idle reclamation
- Confirm $0 usage in Billing → Cost Analysis after a week
- Re-verify the Always Free limits every few months
FAQ
Is Oracle Cloud really free forever?
The Always Free resources are — no expiry date, no card charges. You get an ARM VM (2 OCPU/12 GB), two AMD micro VMs, 200 GB of block storage, 10 GB of object storage, and two Autonomous Databases at no cost as long as the account stays active. What’s not free: anything beyond those limits, and the $300 trial credit only lasts 30 days.
Will Oracle delete my free VM?
It can. Oracle reclaims Always Free compute instances that sit idle — CPU, network, and memory all below 20% (95th percentile) for a 7-day window. Keep the instance doing something (a cron job, an uptime check, your actual app) and you’re fine. Oracle also quietly halved the ARM allowance in June 2026, so stay under the current limits.
Does Oracle Cloud require a credit card?
Yes, for identity verification at signup — a real credit or debit card, not virtual or prepaid cards. Oracle puts a temporary hold on it and does not charge it for Always Free resources. Signup is also the hardest part of OCI’s free tier: its fraud screening rejects accounts for reasons that aren’t always obvious.
How much traffic can the free Oracle VM handle?
The ARM instance is a full 2-core, 12 GB VM — roughly the size of a small paid EC2 instance, free. It comfortably runs a real web app, a self-hosted Postgres, or a home-lab stack. The free tier’s 10 GB/month outbound data transfer is the tighter constraint for a busy app; put Cloudflare in front to absorb traffic.
Should I upgrade to Pay As You Go?
Only if you need it. Upgrading keeps Always Free resources free, lets you provision past capacity errors, and (per unconfirmed support statements) may restore the 4 OCPU/24 GB ARM allowance — but it also means anything beyond the free limits bills you, and you’re trusting a support email for the grandfathering. For a pure $0 project, stay on the free tier and retry capacity errors.
What happens when the 30-day trial ends?
The $300 credit expires and any paid (non-Always Free) resources you created are stopped. The Always Free resources keep running untouched. If you never upgrade to Pay As You Go, your tenancy stays on the free tier forever — you just can’t create paid resources.
Related topics
- How to Launch Free Infrastructure on AWS, GCP, or Azure
- How to Deploy Your First App on Cloudflare for Free
- How to Set Up Cloudflare for a Small Project
- How to Choose a Cloud Provider for Your AI-Generated App
- How to Reduce Your Cloud Bill Without Breaking Production
- Budget Cloud and PaaS Compared