Free tier servers are a great way to find out what your tools really cost. I took an Oracle Cloud ARM VM with 6 GB of RAM, put a self-hosted deploy platform on it, and asked it to run four things at once: a developer toolbox, WordPress, MySQL and a Minecraft server. Then I rebooted it twice and wrote down what happened.
glincker / levelrail
Self-hosted alternative to Vercel and Coolify. Git push, HTTPS, logs, rollback. No Kubernetes.
Levelrail
Self-hosted PaaS: deploy on git push to your own servers, with logs, metrics, HTTPS and rollback.
One Go binary, Docker runtime, no Kubernetes. Apache 2.0.
Website · Docs · Install · Production ready · Compare · FAQ · Roadmap · Changelog · Discussions
English · 简体中文 · Español · Português (BR) · Deutsch · Français · 日本語
Levelrail is an open source (Apache 2.0) self-hosted PaaS for developers and small teams who want a Vercel, Heroku or Railway style workflow on servers they own. It runs on any Linux server, from a small VPS to a rack (the one measured host is a 2 vCPU, 8 GB box), and turns plain servers into a private cloud with Git deploys (forge webhooks), HTTPS, databases with verified backups, metrics, logs and alerts, without Kubernetes and without the monitoring stack you would otherwise bolt on.
Status: pre-1.0 (v0.x). Single-server is production ready…
The cast
- it-tools, a static toolbox app. It used about 2.3 MiB of RAM and answered in 1 ms. Basically a rounding error.
- WordPress and MySQL 8.4. 33 MiB for WordPress, 467 MiB for MySQL. MySQL is the one that always shows up with a suitcase.
- Minecraft (Java 21). 2.24 GiB out of a 2.5 GiB limit, 97 percent right after start. No out-of-memory kill. Java will use every byte you hand it and then ask what is for dessert.
The install command returned in under a second because the work is asynchronous. All four containers were up, and Minecraft was healthy, about 107 seconds after I submitted the request, image pulls included. Host memory went from 0.7 GB to 3.4 GB and stayed there, with about 2.4 GB still available.
Watching a boot, second by second
After a clean reboot I sampled memory as the machine came back:
| Time after boot | Used memory |
|---|---|
| 39 s | 1.27 GB |
| 60 s | 3.2 GB (the JVM and MySQL waking up) |
| steady | 3.35 GB |
SSH came back 28 seconds after I issued the reboot. Docker started the containers at roughly the 19 second mark, the control plane answered its health check at 33 seconds, and Minecraft was healthy at about 80 seconds. Available memory never dropped below 2.5 GB.
The reboot that fought itself
The first reboot did not go well. The new control plane would not start: Address already in use on port 80. The old install I had left on the same machine was still enabled, and its sockets grabbed the port first. Two versions of the same platform, fighting over the front door.
Here is the funny part. While the control plane was not running at all, Docker restarted all four app containers on its own, 9 seconds after boot, because they carry a restart policy. The apps were up and serving before the thing that manages them had started. That is what you want: the apps should not depend on the control plane being alive.
I disabled the old service and rebooted again for the clean run above.
Two rough edges I found
- After the reboot Docker assigned new loopback ports to two apps. The platform remembered the old ones for about 30 seconds until its next reconcile, which means a proxy pointed at a stored port would have returned errors for half a minute. I fixed it by refreshing the ports at boot.
- Minecraft logged two scary looking health check errors while it was starting, 35 seconds apart. They fixed themselves, and they made the logs noisy. Noise like that trains you to ignore the real alarm.
What I took from it
- A 6 GB free VM is plenty for a small stack. It is not plenty for a stack with a JVM in it unless you set a memory limit. I did.
- Measure the boot, not just the steady state. The peak is at about 60 seconds, and that is when things fall over.
- Restart policies on the apps and a small control plane make reboots boring, which is the goal.
The platform I used is Levelrail, which I build and run my own sites on: https://github.com/glincker/levelrail
What is the most RAM-hungry thing you run at home?

