−25%

op Windows bij jaarbetaling, tot 31/10. Naar de pakketten

EQVPS
Aan de slag

Hoe deploy je een Docker Compose-stack op een VPS

Deploy een multi-container-stack op een VPS met Docker Compose: schrijf docker-compose.yml, houd secrets in .env, breng hem omhoog met herstart-na-reboot en publiceer alleen de poorten die je echt bedoelt. Copy-paste-voorbeeld met een web-app, database en reverse proxy.

Docker Compose beschrijft een multi-container-stack in één bestand en draait hem met één commando. Dit is de deploy-handleiding; installeer eerst Docker als je dat nog niet hebt gedaan. Voor een AI-agent-specifieke stack (agent + vector-DB + Redis) zie docker-compose voor AI-agents.

1. Een stack: 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: {} }

Secrets leven in .env, nooit in het compose-bestand:

# /opt/stack/.env  (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string

Een minimale Caddyfile proxyt je domein naar de app en haalt zelf HTTPS op:

app.yourdomain.com {
  reverse_proxy app:8080
}

2. Breng hem omhoog

cd /opt/stack
docker compose up -d
docker compose ps
docker compose logs -f app

restart: unless-stopped op elke service + Docker ingeschakeld bij het opstarten = de stack komt na een reboot vanzelf terug.

3. Dagelijkse commando's

docker compose pull && docker compose up -d   # update images
docker compose down                            # stop the stack
docker compose restart app                     # restart one service

Het deel dat mensen fout doen: blootgestelde poorten

Docker publiceert poorten via iptables, dus een container met ports: ["5432:5432"] is vanaf internet bereikbaar, zelfs achter een UFW-firewall die je gesloten waande. Publiceer alleen het publieke toegangspunt (de proxy op 80/443); houd databases en caches op het compose-netwerk of gebonden aan 127.0.0.1. Alles dat webverkeer aanbiedt heeft een plan met dedicated IP nodig; combineer met een UFW-firewall.

Voor een hele stack achter één IP zie meerdere services zelf hosten. Root in ongeveer een minuut, NVMe, geen KYC, betalen in crypto.

Schijfruimte vrijmaken op een VPS zonder iets kapot te maken →

FAQ

Hoe deploy ik een Docker Compose-stack op een VPS?

Installeer Docker met de Compose-plugin, schrijf een docker-compose.yml die elke service beschrijft, houd secrets in een git-genegeerde .env, dan docker compose up -d. Zet restart: unless-stopped op elke service en schakel Docker in bij het opstarten zodat de stack reboots overleeft. Het voorbeeld hieronder draait een web-app, Postgres en een Caddy reverse proxy.

Waar gaan secrets — in het compose-bestand?

Nee. Zet ze in een .env-bestand (chmod 600, git-genegeerd) en verwijs ernaar als ${VAR} in compose, of gebruik Docker secrets. Commit nooit wachtwoorden of API-sleutels in docker-compose.yml — een gelekt bestand met geldige inloggegevens is de klassieke fout.

Komt de stack terug na een reboot?

Alleen als je het hem zegt. Zet restart: unless-stopped (of always) op elke service en schakel Docker in bij het opstarten (systemctl enable docker). Dan overleeft docker compose up -d reboots en herstart gecrashte containers.

Welke poorten worden blootgesteld?

Alleen wat je publiceert met ports:. Bind interne services (databases, caches) aan het compose-netwerk of aan 127.0.0.1 en publiceer alleen het publieke toegangspunt — meestal een reverse proxy op 80/443. Docker publiceert via iptables, dus een per ongeluk toegevoegde ports:-regel is vanaf internet bereikbaar, zelfs achter UFW.

Vragen jullie om een identiteitsbewijs of kaart?

Nee. Een e-mail om je aan te melden, betalen in USDC of USDT — geen documenten, geen kaart. Root in ongeveer een minuut.

Reacties

Nog geen reacties. Wees de eerste.

Laat een reactie achter

Reacties worden gemodereerd voordat ze verschijnen.