The application is
only the beginning.
This Oracle Cloud Infrastructure deployment package brings n8n, PostgreSQL, and Caddy together on an ARM virtual machine. It documents the service boundaries, configuration, health checks, and recovery steps needed to operate an automation service.
Separate the public edge from the data.
HTTPS request ↓ Caddy · TLS termination & security headers ↓ private edge network n8n · Workflow execution ↓ internal database network PostgreSQL · Persistent execution state
Caddy is the only container with published ports. n8n connects to both the edge and database networks; PostgreSQL uses an internal Docker network. Database credentials and the n8n encryption key come from environment configuration.
Make service health part of startup.
- Database readiness: PostgreSQL reports readiness with
pg_isready. - Ordered startup: n8n waits for a healthy database; Caddy waits for a healthy n8n service.
- Application check: the n8n health probe calls
/healthz. A helper script also checks the public HTTPS endpoint and container status. - Persistent state: named volumes retain the database, application data, and TLS state across container replacement.
Plan recovery before an upgrade.
The backup script creates PostgreSQL custom-format dumps and removes local dumps older than 14 days. The runbook calls for copying backups off the virtual machine, then checking service health and the webhook after upgrades. Scheduling backups and configuring an off-server destination are deployment steps.
What this package includes
A Docker Compose definition, Caddy configuration, database backup script, health-check script, and an OCI setup runbook. This page describes those implementation artifacts; it is not a live infrastructure status report.
Explore my AWS ticketing project