Docker Compose beskriver en multi-container-stak i én fil og kører den med én kommando. Dette er deploy-guiden; installér Docker først, hvis du ikke har gjort det. For en AI-agent-specifik stak (agent + vektor-DB + Redis), se docker-compose til AI-agenter.
1. En stak: app + database + reverse proxy
# /opt/stack/docker-compose.yml
services:
app:
image: your/app:latest
restart: unless-stopped
env_file: [.env]
depends_on: [db]
# no ports: — reached only through the proxy below
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes: ["pg:/var/lib/postgresql/data"] # internal only
caddy: # HTTPS automatically
image: caddy:2
restart: unless-stopped
ports: ["80:80", "443:443"] # the only public entrypoint
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
volumes: { pg: {}, caddy_data: {} }
Hemmeligheder bor i .env, aldrig i compose-filen:
# /opt/stack/.env (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string
En minimal Caddyfile proxyer dit domæne til appen og henter HTTPS af sig selv:
app.yourdomain.com {
reverse_proxy app:8080
}
2. Kør den op
cd /opt/stack
docker compose up -d
docker compose ps
docker compose logs -f app
restart: unless-stopped på hver tjeneste + Docker aktiveret ved boot = stakken vender tilbage af sig selv efter et reboot.
3. Hverdagskommandoer
docker compose pull && docker compose up -d # update images
docker compose down # stop the stack
docker compose restart app # restart one service
Den del folk gør forkert: eksponerede porte
Docker udgiver porte via iptables, så en container med ports: ["5432:5432"] er nåbar fra internettet selv bag en UFW-firewall, du troede var lukket. Udgiv kun det offentlige indgangspunkt (proxyen på 80/443); hold databaser og caches på compose-netværket eller bundet til 127.0.0.1. Alt, der serverer webtrafik, kræver et plan med dedikeret IP; kombinér med en UFW-firewall.
For en hel stak bag én IP, se self-host flere tjenester. Root på cirka et minut, NVMe, ingen KYC, betal i krypto.
Kommentarer
Ingen kommentarer endnu. Vær den første.