Deploys and releases · 8 min read
systemd or pm2 for a small Node app on one VPS?
Compare systemd and pm2 for one Node app on one server: the pm2 symlink trap, restart after a crash, secrets, memory limits, logs, and which we pick.
9 articles about systemd.
Deploys and releases · 8 min read
Compare systemd and pm2 for one Node app on one server: the pm2 symlink trap, restart after a crash, secrets, memory limits, logs, and which we pick.
Deploys and releases · 9 min read
We sent 20 requests per second through Caddy while restarting a Go service. About one in four failed. Measure your own restart, then pick a fix that fits.
Deploys and releases · 9 min read
Socket activation let a Go service restart without refusing a connection, but slow requests waited over five seconds. Setup, code, and when to use it.
Deploys and releases · 9 min read
Keep each release in its own directory behind a current symlink, switch atomically, prune old ones, and roll back with one command, including the database caveat.
VPS operations · 9 min read
Cron, curl and systemd are enough to catch a down app, a filling disk, low memory, an expiring certificate and a silent backup. Working scripts included.
Go in production · 10 min read
Handle SIGTERM with signal.NotifyContext, drain requests with Server.Shutdown, stop workers cleanly and set TimeoutStopSec so systemd waits long enough.
Go in production · 10 min read
A Go program with 40 MiB of live data was OOM-killed in an 80 MiB container. See what GOMEMLIMIT fixes, what it costs in CPU, and where the limit is soft.
Deploys and releases · 10 min read
Design a health endpoint and a deploy gate that reject broken releases, with readiness versus liveness, consecutive passes, and the false greens to avoid.
Deploys and releases · 10 min read
Switch a Caddy 2 reverse proxy between two upstream ports with a generated snippet and a graceful reload, with health checks and retry settings explained.