Docker Compose beschreibt einen Multi-Container-Stack in einer Datei und fährt ihn mit einem Befehl. Das ist die Deploy-Anleitung; installiere zuerst Docker, falls noch nicht geschehen. Für einen KI-Agenten-spezifischen Stack (Agent + Vektor-DB + Redis) siehe docker-compose für KI-Agenten.
1. Ein Stack: App + Datenbank + 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: {} }
Secrets liegen in .env, niemals in der Compose-Datei:
# /opt/stack/.env (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string
Eine minimale Caddyfile proxyt deine Domain zur App und holt sich HTTPS selbst:
app.yourdomain.com {
reverse_proxy app:8080
}
2. Hochfahren
cd /opt/stack
docker compose up -d
docker compose ps
docker compose logs -f app
restart: unless-stopped auf jedem Dienst + Docker beim Boot aktiviert = der Stack kommt nach einem Reboot von selbst zurück.
3. Alltagsbefehle
docker compose pull && docker compose up -d # update images
docker compose down # stop the stack
docker compose restart app # restart one service
Der Teil, den viele falsch machen: freigegebene Ports
Docker veröffentlicht Ports über iptables, also ist ein Container mit ports: ["5432:5432"] aus dem Internet erreichbar, selbst hinter einer UFW-Firewall, die du für geschlossen hieltest. Veröffentliche nur den öffentlichen Einstiegspunkt (den Proxy auf 80/443); halte Datenbanken und Caches im Compose-Netzwerk oder an 127.0.0.1 gebunden. Alles, was Web-Traffic ausliefert, braucht einen Tarif mit dedizierter IP; kombiniere mit einer UFW-Firewall.
Für einen ganzen Stack hinter einer IP siehe mehrere Dienste selbst hosten. Root in etwa einer Minute, NVMe, kein KYC, Zahlung in Krypto.
Kommentare
Noch keine Kommentare. Sei der Erste.