Руководства

Продакшн-стек Docker Compose на VPS

Промежуточный25 мин чтенияОбновлено 27 июня 2026 г.
Краткий ответ

Рабочий продакшн-стек — это Caddy для автоматических TLS, ваше приложение, PostgreSQL и Redis, описанные в одном Compose-файле с именованными томами и проверками здоровья. На 8 ГБ ОЗУ с NVMe это справляется со значительным трафиком, а снимок перед каждым деплоем делает откат двухминутной операцией.

01 Установите Docker из официального репозитория

Distribution packages lag significantly. The convenience script is fine on a fresh instance.

curl -fsSL https://get.docker.com | sh
systemctl enable --now docker

02 Напишите Compose-файл

Caddy obtains and renews certificates automatically, which removes the single most common source of production breakage.

services:
  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    ports: ["80:80", "443:443", "443:443/udp"]
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
  app:
    build: .
    restart: unless-stopped
    depends_on: { db: { condition: service_healthy } }
    environment:
      DATABASE_URL: postgres://app:${DB_PASS}@db:5432/app
  db:
    image: postgres:17-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: ${DB_PASS}
    volumes: [pgdata:/var/lib/postgresql/data]
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app"]
      interval: 10s
volumes: { caddy_data: {}, pgdata: {} }

03 Настройте Caddy

Three lines is a complete TLS-terminating reverse proxy with automatic certificate renewal.

app.example.com {
  encode zstd gzip
  reverse_proxy app:8000
}

04 Резервируйте базу данных, а не контейнер

A file copy of a running Postgres data directory produces a corrupt backup that appears to succeed. Dump it properly.

docker compose exec -T db pg_dump -U app app | zstd > /backups/app-$(date +%F).sql.zst

05 Создавайте снимок перед каждым деплоем

Free, instant, and it converts a failed deployment from an incident into a rollback.

Часто задаваемые вопросы

Сколько ОЗУ для этого нужно?

Суммируйте лимиты памяти контейнеров и добавьте около 1 ГБ для хоста. Этому стеку комфортно в 8 ГБ.

Should I use Docker Swarm or Kubernetes instead?

Нет, не для одного сервера. Compose — правильный инструмент, пока у вас действительно не появится более одного узла.