Compose Stack with Traefik + Postgres + Healthchecks
A restart-safe stack with TLS routing, service health gates, and secret-based DB auth.
- Docker Engine + Compose v2
- A DNS record pointing to your host
- Ports 80/443 reachable
services:
traefik:
image: traefik:v3.1
command:
- --api.dashboard=true
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.letsencrypt.acme.email=admin@argobox.com
- --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.letsencrypt.acme.httpchallenge=true
- --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
restart: unless-stopped
postgres:
image: postgres:16
environment:
POSTGRES_DB: app
POSTGRES_USER: app
POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password
secrets:
- postgres_password
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app -d app"]
interval: 10s
timeout: 5s
retries: 6
restart: unless-stopped
app:
image: ghcr.io/traefik/whoami:v1.10
depends_on:
postgres:
condition: service_healthy
labels:
- traefik.enable=true
- traefik.http.routers.app.rule=Host(`app.argobox.com`)
- traefik.http.routers.app.entrypoints=websecure
- traefik.http.routers.app.tls.certresolver=letsencrypt
- traefik.http.services.app.loadbalancer.server.port=80
restart: unless-stopped
secrets:
postgres_password:
file: ./secrets/postgres_password.txt
volumes:
pgdata:
replace-with-a-long-random-password Deploy
mkdir -p /opt/argobox/stack/{letsencrypt,secrets}
chmod 700 /opt/argobox/stack/letsencrypt
chmod 600 /opt/argobox/stack/secrets/postgres_password.txt
cd /opt/argobox/stack
docker compose pull
docker compose up -d --remove-orphans Verify
docker compose ps
docker compose logs --no-log-prefix postgres | tail -n 30
curl -I https://app.argobox.com
docker exec $(docker compose ps -q postgres) pg_isready -U app -d app Rollback
cd /opt/argobox/stack
docker compose down
docker compose up -d --remove-orphans