Production self-hosted n8n with tested disaster recovery
An n8n instance running in production on my own hardened VPS, with a restore I've tested end to end on a clean server.
The objective
n8n runs in Docker on a hardened Linux VPS, behind a reverse proxy with valid TLS. The application itself is bound to localhost, so it isn't reachable except through the proxy. PostgreSQL 16 is the backend rather than the default SQLite. Every public webhook verifies an HMAC-SHA256 signature before it does anything.
What I did
The backups run automatically and are encrypted. I've carried the restore out end to end on a fresh server, and it brought back the encryption key, the credentials and every workflow.
Monitoring runs in three layers: uptime checks on the box itself, an off-site dead man's switch that alerts if the monitoring stops reporting, and Prometheus and Grafana metrics across two hosts.
The result
This is my own production instance. Client deployments are built to the same setup.