Oracle Cloud Free Tier
October 03, 2025
Oracle has a very generous free tier that comes with dozens of fully loaded footguns.
Free tier
In particular, they offer
Arm-based Ampere A1 cores and 24 GB of memory
which means you can have a 4 vCPU, 24 GiB RAM Arm VPS free forever. It does mean that you'll probably have to switch from x86, but that was pretty easy for me.
The other things I were considering were
- OVH VPS-1: 4 vCPU, 8 GiB RAM, $4.90/mo. Not to be confused with d2-2: 1 vCPU, 2 GiB, $6.57/mo
- DigitalOcean: 1 vCPU, 1 GiB RAM, $6/mo
Creating an account
When you first create your free-tier account, you'll need to provide a credit card. Oracle will auth the card for $1 but it won't settle the charge. Also, it takes like 15 minutes to create the account.
Unfortunately, your account will be locked to a single region. When you try to create a VM, you'll need to fill out a giant form. I honestly wouldn't worry about the answers at all; just try to skip everything to get to the end so you can attempt to actually create it. It will most likely fail because there's too much demand from free-tier accounts. And you can't try switching regions without creating a new account, but I doubt other regions have capacity for free-tier VMs anyway.
So in order to spin up your free VM, you'll need to upgrade your account to a pay-as-you-go account. You can continue using free forever resources without paying anything. This will result in a $100 auth on your credit card and takes over 2 hours.
Installing Debian
Oracle doesn't provide Debian images and there are no "community" Debian images either. You could provide your own Debian image, but that's a pain. There's an amazing reddit thread where people talk about starting from an Ubuntu image and installing Debian over that.
There are 3 approaches:
- Upgrading from Ubuntu to Debian via apt
dding a Debian image over the disk- Running the Debian installer, which is what I did
wget https://moeclub.org/InstallNET.sh
# edit the script, which only goes up to 12/bookworm, to support 14/forky
bash InstallNET.sh --debian 14 -firmware --password 123456
Note the single dash on -firmware but the double dashes elsewhere.
Internet gateway
With that plan in mind, I created an Ubuntu "Ampere" instance with 4 vCPUs and 24 GiB RAM. I gave the boot volume all of my 200 GB free block storage with the max VPUs.
Then I tried SSH-ing into the instance but no luck. It turns out that when you create an internet gateway for a VPC, if you check "associate with route table", it... just bricks the internet gateway? As far as I can tell, that setting does not add any routes to the route table and prevents you from adding it as a target for any route tables. So I had to recreate the internet gateway without "associate" checked and manually add it as the route.
Caddy
That's all the footguns I ran into, I think. I just wanted to call out that switching from nginx to Caddy has been amazing. I've set up 11 subdomains in 3 lines of config each. My nginx configs were 22-45 lines each.