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.
Speicherplatz auf dem VPS freigeben, ohne etwas zu zerstören →
Kommentare
Noch keine Kommentare. Sei der Erste.