In Part 14 , I finished HMAC webhook signing. The backend was complete — JWT auth, PostgreSQL, Redis caching, rate limiting, circuit breaker, worker pool, webhook delivery, migrations, Docker. All running locally.
But "runs on my machine" isn't a portfolio project. It's a homework assignment.
Time to ship it.
The Stack Being Deployed
Go backend — ~15MB Docker image (multi-stage build, CGO_ENABLED=0)
PostgreSQL 16 — with golang-migrate running schema migrations on startup
Redis — for caching, rate limiting, and refresh token storage
Oracle Cloud Free Tier — 1GB RAM, 45GB disk, already provisioned
Everything wired together with docker-compose.yml . One command to start the entire stack.
Step 1: The VM Was Fine, Actually
I was worried about the free tier specs. Turned out the "1GB" in the tier name refers to RAM, not disk. The actual disk is 45GB — plenty.
free -h # 954MB RAM, 552MB available df -h # 45GB disk, 41GB free
Enter fullscreen mode
Exit fullscreen mode
The real constraint: no swap .…