EQVPS

Jak wdrożyć stos Docker Compose na VPS

Wdróż wielokontenerowy stos na VPS z Docker Compose: napisz docker-compose.yml, trzymaj sekrety w .env, podnieś go z restartem po reboocie i publikuj tylko te porty, które faktycznie zamierzasz. Przykład kopiuj-wklej z aplikacją webową, bazą danych i reverse proxy.

Docker Compose opisuje wielokontenerowy stos w jednym pliku i uruchamia go jednym poleceniem. Oto poradnik wdrożenia; najpierw zainstaluj Docker, jeśli jeszcze tego nie zrobiłeś. Po stos specyficzny dla agentów AI (agent + baza wektorowa + Redis) zajrzyj do docker-compose dla agentów AI.

1. Stos: aplikacja + baza danych + 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: {} }

Sekrety żyją w .env, nigdy w pliku compose:

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

Minimalny Caddyfile przekazuje twoją domenę do aplikacji i sam pobiera HTTPS:

app.yourdomain.com {
  reverse_proxy app:8080
}

2. Podnieś go

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

restart: unless-stopped na każdej usłudze + Docker włączony przy rozruchu = stos wraca sam po reboocie.

3. Codzienne polecenia

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

Część, którą ludzie robią źle: wystawione porty

Docker publikuje porty przez iptables, więc kontener z ports: ["5432:5432"] jest osiągalny z internetu nawet za zaporą UFW, którą uważałeś za zamkniętą. Publikuj tylko publiczny punkt wejścia (proxy na 80/443); trzymaj bazy danych i cache w sieci compose lub przypięte do 127.0.0.1. Wszystko, co obsługuje ruch webowy, potrzebuje planu z dedykowanym IP; połącz z zaporą UFW.

Po cały stos za jednym IP zobacz self-host wielu usług. Root w około minutę, NVMe, bez KYC, płatność w krypto.

FAQ

Jak wdrożyć stos Docker Compose na VPS?

Zainstaluj Docker z wtyczką Compose, napisz docker-compose.yml opisujący każdą usługę, trzymaj sekrety w ignorowanym przez git .env, potem docker compose up -d. Ustaw restart: unless-stopped na każdej usłudze i włącz Docker przy rozruchu, aby stos przetrwał reboot. Poniższy przykład uruchamia aplikację webową, Postgres i reverse proxy Caddy.

Gdzie trafiają sekrety — do pliku compose?

Nie. Umieść je w pliku .env (chmod 600, ignorowany przez git) i odwołuj się do nich jako ${VAR} w compose, albo użyj Docker secrets. Nigdy nie commituj haseł ani kluczy API do docker-compose.yml — wyciekły plik z żywymi poświadczeniami to klasyczny błąd.

Czy stos wróci po reboocie?

Tylko jeśli mu to powiesz. Ustaw restart: unless-stopped (albo always) na każdej usłudze i włącz Docker przy rozruchu (systemctl enable docker). Wtedy docker compose up -d przetrwa reboot i zrestartuje padnięte kontenery.

Które porty są wystawione?

Tylko to, co publikujesz przez ports:. Przypnij usługi wewnętrzne (bazy danych, cache) do sieci compose lub do 127.0.0.1 i publikuj tylko publiczny punkt wejścia — zwykle reverse proxy na 80/443. Docker publikuje przez iptables, więc przypadkowa linia ports: jest osiągalna z internetu nawet za UFW.

Czy wymagacie dokumentu lub karty?

Nie. E-mail do rejestracji, płatność w USDC lub USDT — bez dokumentów, bez karty. Root w około minutę.

Komentarze

Brak komentarzy. Bądź pierwszy.

Zostaw komentarz

Komentarze są moderowane przed pojawieniem się.