EQVPS

Hur man deployar en Docker Compose-stack på en VPS

Deploya en flercontainer-stack på en VPS med Docker Compose: skriv docker-compose.yml, håll hemligheter i .env, kör upp den med omstart-efter-reboot och publicera bara de portar du verkligen menar. Kopiera-och-klistra-exempel med en webbapp, databas och reverse proxy.

Docker Compose beskriver en flercontainer-stack i en fil och kör den med ett kommando. Detta är deploy-guiden; installera Docker först om du inte gjort det. För en AI-agent-specifik stack (agent + vektor-DB + Redis), se docker-compose för AI-agenter.

1. En stack: app + databas + 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: {} }

Hemligheter bor i .env, aldrig i compose-filen:

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

En minimal Caddyfile proxar din domän till appen och hämtar HTTPS på egen hand:

app.yourdomain.com {
  reverse_proxy app:8080
}

2. Kör upp den

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

restart: unless-stopped på varje tjänst + Docker aktiverat vid uppstart = stacken kommer tillbaka av sig själv efter en omstart.

3. Vardagskommandon

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 fel: exponerade portar

Docker publicerar portar via iptables, så en container med ports: ["5432:5432"] är nåbar från internet även bakom en UFW-brandvägg du trodde var stängd. Publicera bara den publika ingången (proxyn på 80/443); håll databaser och cachar på compose-nätverket eller bundna till 127.0.0.1. Allt som serverar webbtrafik behöver ett plan med dedikerad IP; kombinera med en UFW-brandvägg.

För en hel stack bakom en IP, se självhosta flera tjänster. Root på ungefär en minut, NVMe, ingen KYC, betala i krypto.

FAQ

Hur deployar jag en Docker Compose-stack på en VPS?

Installera Docker med Compose-plugin, skriv en docker-compose.yml som beskriver varje tjänst, håll hemligheter i en git-ignorerad .env, sedan docker compose up -d. Sätt restart: unless-stopped på varje tjänst och aktivera Docker vid uppstart så att stacken överlever omstarter. Exemplet nedan kör en webbapp, Postgres och en Caddy reverse proxy.

Vart tar hemligheter vägen — i compose-filen?

Nej. Lägg dem i en .env-fil (chmod 600, git-ignorerad) och referera dem som ${VAR} i compose, eller använd Docker secrets. Committa aldrig lösenord eller API-nycklar till docker-compose.yml — en läckt fil med giltiga uppgifter är det klassiska misstaget.

Kommer stacken tillbaka efter en omstart?

Bara om du säger till den. Sätt restart: unless-stopped (eller always) på varje tjänst och aktivera Docker vid uppstart (systemctl enable docker). Då överlever docker compose up -d omstarter och startar om kraschade containrar.

Vilka portar exponeras?

Bara det du publicerar med ports:. Bind interna tjänster (databaser, cachar) till compose-nätverket eller 127.0.0.1 och publicera bara den publika ingången — vanligtvis en reverse proxy på 80/443. Docker publicerar via iptables, så en oavsiktlig ports:-rad är nåbar från internet även bakom UFW.

Kräver ni ID eller kort?

Nej. En e-post för att registrera dig, betalning i USDC eller USDT — inga dokument, inget kort. Root på ungefär en minut.

Kommentarer

Inga kommentarer än. Bli först.

Lämna en kommentar

Kommentarer modereras innan de visas.