EQVPS

Как да разгърнете Docker Compose стек на VPS

Разгърнете многоконтейнерен стек на VPS с Docker Compose: напишете docker-compose.yml, дръжте тайните в .env, вдигнете го с рестарт-след-рестартиране и публикувайте само портовете, които наистина искате. Пример за копиране-поставяне с уеб приложение, база данни и reverse proxy.

Docker Compose описва многоконтейнерен стек в един файл и го пуска с една команда. Това е ръководството за разгръщане; първо инсталирай Docker, ако още не си. За стек, специфичен за AI агенти (агент + векторна БД + Redis), виж docker-compose за AI агенти.

1. Стек: приложение + база данни + 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: {} }

Тайните живеят в .env, никога в compose файла:

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

Минимален Caddyfile проксира домейна ти към приложението и сам взима HTTPS:

app.yourdomain.com {
  reverse_proxy app:8080
}

2. Вдигни го

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

restart: unless-stopped на всяка услуга + Docker включен при зареждане = стекът се връща сам след рестартиране.

3. Ежедневни команди

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

Частта, която хората бъркат: изложени портове

Docker публикува портове през iptables, така че контейнер с ports: ["5432:5432"] е достъпен от интернет дори зад защитна стена UFW, която си мислел, че е затворена. Публикувай само публичната входна точка (proxy-то на 80/443); дръж базите данни и кешовете в compose мрежата или вързани към 127.0.0.1. Всичко, което обслужва уеб трафик, се нуждае от план със специален IP; съчетай с защитна стена UFW.

За цял стек зад един IP виж self-host на няколко услуги. Root за около минута, NVMe, без KYC, плащане в крипто.

Въпроси

Как да разгърна Docker Compose стек на VPS?

Инсталирай Docker с плъгина Compose, напиши docker-compose.yml, описващ всяка услуга, дръж тайните в игнориран от git .env, после docker compose up -d. Задай restart: unless-stopped на всяка услуга и включи Docker при зареждане, за да преживее стекът рестартирания. Примерът по-долу пуска уеб приложение, Postgres и reverse proxy Caddy.

Къде отиват тайните — в compose файла?

Не. Сложи ги в .env файл (chmod 600, игнориран от git) и ги реферирай като ${VAR} в compose, или използвай Docker secrets. Никога не комитвай пароли или API ключове в docker-compose.yml — изтекъл файл с живи данни за достъп е класическата грешка.

Ще се върне ли стекът след рестартиране?

Само ако му кажеш. Задай restart: unless-stopped (или always) на всяка услуга и включи Docker при зареждане (systemctl enable docker). Тогава docker compose up -d преживява рестартирания и рестартира сринали се контейнери.

Кои портове се излагат?

Само това, което публикуваш с ports:. Обвържи вътрешните услуги (бази данни, кешове) към compose мрежата или към 127.0.0.1 и публикувай само публичната входна точка — обикновено reverse proxy на 80/443. Docker публикува през iptables, така че случаен ред ports: е достъпен от интернет дори зад UFW.

Искате ли документ за самоличност или карта?

Не. Имейл за регистрация, плащане в USDC или USDT — без документи, без карта. Root за около минута.

Коментари

Още няма коментари. Бъди първият.

Остави коментар

Коментарите се модерират преди да се появят.