Skip to content

Docker Environment & Standards

Salitech containerizes services on production-01 using Docker and Docker Compose. This ensures reproducibility, isolated dependencies, and clean teardowns.


Each service stack resides in its own subfolder under /opt/:

  • Compose file: /opt/<service>/docker-compose.yml
  • Environment config: /opt/<service>/.env (permissions 600)
  • Data volumes: /opt/<service>/data or named Docker volumes

To prevent unintentional internet exposure:

  • Service containers must never publish ports directly to 0.0.0.0 unless explicitly intended as an edge proxy.
  • All exposed ports must bind to the local loopback interface:
    ports:
    - "127.0.0.1:5678:5678"
  • Public routing and TLS termination are handled strictly by Caddy on the host.

All production services must specify an automatic restart policy:

restart: unless-stopped

Service Directory Container Name Internal Port Host Binding
n8n /opt/n8n n8n 5678 127.0.0.1:5678
Umami /opt/umami umami 3000 127.0.0.1:3001
Umami Postgres /opt/umami umami-db (internal) 5432 Internal Compose network
Firecrawl /opt/firecrawl firecrawl unknown Stopped / Retained

Terminal window
# Check running containers
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Inspect logs of a specific stack
cd /opt/n8n && docker compose logs -f --tail=100
# Restart a service
cd /opt/umami && docker compose restart