Josh Ramirez
← Back to the journal

Departed Jan 2026 · returned Feb 2026

Something Running Somewhere

Oracle Free Tier · Infrastructure · Shipped

Steady state. Players come and go; the box keeps the world.

Departure

I wanted a computer that didn't go to sleep when I closed the laptop — always on, reachable from school, home, or my phone, and free. Oracle's Always Free tier hands out a 4-OCPU ARM box with 24GB of RAM and 200GB of NVMe if you can wrestle one out of capacity, so I went hunting for one. On top of it I stacked the things I'd been hearing about for years and never had a reason to learn: Tailscale, SSH keys, tmux, Vim. The visible payload was a Minecraft server my friends could join 24/7. The real payload was finally living inside a stack instead of reading about one.

Approach

  • Oracle Cloud ARM A1
  • Ubuntu
  • Tailscale
  • tmux
  • PaperMC
  • GeyserMC

$0 budget — Oracle Always Free Tier only; school firewall in the path.

Field log

  1. Late Jan 2026

    The whole project compressed into one frame: my laptop here, the box somewhere over the Great Lakes.
  2. Late Jan 2026

    Wanted a computer that didn't sleep when I closed the laptop. Reachable from school WiFi, from cellular, from anywhere. Free. Heard the Oracle Always Free tier hands out a 4-OCPU ARM box with 24GB of RAM if you can wrestle one out of capacity. Went hunting.

  3. Jan 30, 2026

    Picked the VM.Standard.A1.Flex shape — 4 OCPU ARM64, 24GB RAM, 200GB NVMe. The console kept refusing it.

    The free tier is real. So is the line for it.
  4. Jan 30, 2026

    Switched availability domains, retried, retried. AD-1 took it on the fourth try. Instance came up as oram-A1-Server, status ACTIVE, a green tile in the dashboard. Four cores, twenty-four gigs, two hundred GB of NVMe — billed at zero dollars. I had a computer somewhere in Phoenix that I'd never see.

  5. Day 2

    Every layer in the path was a different no.
  6. Day 2

    Couldn't reach the public IP from school WiFi. Installed Tailscale on the box and on my laptop and the diagram collapsed into one hop. `ssh oram` from anywhere — no port forwarding, no static IP, no VPN client to launch. The mesh doesn't care about the edge.

    A network above the network.
  7. Day 3

    Generated an ed25519 keypair. Public lock on the server, private key on disk and nowhere else. Disabled `PasswordAuthentication` in sshd_config. First clean `ssh oram` with no prompt was the moment the project actually existed.

  8. Day 5 — first long-running build

    Closing the laptop closed the world.
  9. Day 5

    Closed the laptop mid-build. Came back to dead processes — the SSH session ended and took the shell, the shell took everything under it. Wrapped every long-running thing in tmux from then on. Detach, walk between buildings, reattach to the same cursor.

    Detach, walk to a different building, reattach. The cursor is exactly where I left it.
  10. Week 1

    Edited config files on the box itself instead of scping them back and forth. `vimtutor` is twenty minutes and it's the first thing I'd recommend to anyone with shell access. The muscle memory only stuck because the server I was editing was mine. Switched to Neovim once `:wq` stopped feeling like a fight.

  11. Week 1 — the picture

    Seven layers, $0 worth of hardware.
  12. Week 2

    Installed PaperMC on OpenJDK 21. Pasted in Aikar's flags so the JVM would actually use the 24GB instead of fighting default heap settings. Layered GeyserMC on top so my friend on a Switch could join the same Java world. Pointed it at the Tailscale name. Friends were on within an hour.

    Aikar's flags so the JVM stops choking on its own defaults; Geyser so Bedrock and Java sit at the same table.
  13. Throughout

    The build never ran first time. Out of capacity, connection refused, OOMKilled, address already in use, host key verification failed. Each error was a specific question with a specific answer somewhere — paste the full message, get the next move. AI was a tireless debugging partner; the work was still mine.

  14. Steady state

    Server log scrolls whether I'm watching or not. Uptime measured in weeks, then months. Bill from Oracle: $0.00. Bill from Tailscale: $0.00. The error messages were the path.

From the gallery

Editing the box from inside the box.
What I'll still be using a year from now.
The whole infrastructure on one page.

What I came back with

$0 always-on server

Lesson from the terrain

Always-on is mostly about removing yourself from the path. The box doesn't need me logged in — it needs Tailscale to be findable, SSH keys to be trusted, tmux to outlive the session, and Aikar's flags so the JVM stops choking on its own defaults. Every error along the way — out of capacity, connection refused, OOMKilled — was the next instruction, not a wall.

Cross-links