−25%

auf Windows bei Jahreszahlung, bis 31.10. Zu den Tarifen

EQVPS
Loslegen

Wie man einen Docker-Compose-Stack auf einem VPS deployt

Deploye einen Multi-Container-Stack auf einem VPS mit Docker Compose: schreibe docker-compose.yml, halte Secrets in .env, bring ihn mit Neustart-nach-Reboot hoch und veröffentliche nur die Ports, die du wirklich meinst. Copy-paste-Beispiel mit Web-App, Datenbank und Reverse Proxy.

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 →

FAQ

Wie deploye ich einen Docker-Compose-Stack auf einem VPS?

Installiere Docker mit dem Compose-Plugin, schreibe eine docker-compose.yml, die jeden Dienst beschreibt, halte Secrets in einer git-ignorierten .env, dann docker compose up -d. Setze restart: unless-stopped auf jeden Dienst und aktiviere Docker beim Boot, damit der Stack Neustarts übersteht. Das Beispiel unten fährt eine Web-App, Postgres und einen Caddy-Reverse-Proxy.

Wohin kommen Secrets — in die Compose-Datei?

Nein. Leg sie in eine .env-Datei (chmod 600, git-ignoriert) und referenziere sie als ${VAR} in Compose, oder nutze Docker-Secrets. Committe niemals Passwörter oder API-Schlüssel in docker-compose.yml — eine geleakte Datei mit gültigen Zugangsdaten ist der klassische Fehler.

Kommt der Stack nach einem Reboot zurück?

Nur, wenn du es ihm sagst. Setze restart: unless-stopped (oder always) auf jeden Dienst und aktiviere Docker beim Boot (systemctl enable docker). Dann übersteht docker compose up -d Neustarts und startet abgestürzte Container neu.

Welche Ports werden freigegeben?

Nur was du mit ports: veröffentlichst. Binde interne Dienste (Datenbanken, Caches) ans Compose-Netzwerk oder an 127.0.0.1 und veröffentliche nur den öffentlichen Einstiegspunkt — meist ein Reverse Proxy auf 80/443. Docker veröffentlicht über iptables, also ist eine versehentliche ports:-Zeile aus dem Internet erreichbar, selbst hinter UFW.

Verlangt ihr Ausweis oder Karte?

Nein. E-Mail zum Registrieren, Zahlung in USDC oder USDT — keine Dokumente, keine Karte. Root in etwa einer Minute.

Kommentare

Noch keine Kommentare. Sei der Erste.

Kommentar hinterlassen

Kommentare werden vor der Anzeige moderiert.