MAATRIX / Блог / Docker Compose на VPS: готовые примеры стеков

Docker Compose на VPS: готовые примеры стеков

Блог MAATRIX · 2026-07-07

Один файл docker-compose.yml описывает весь ваш стек — базу, приложение, кэш и прокси. Ниже рабочие примеры, которые можно поднять на любом VPS за пару минут.

Зачем Compose вместо голых docker run

['Когда сервисов больше одного, команды docker run с десятком флагов превращаются в ад. Compose переносит всю конфигурацию в декларативный YAML: сети, тома, переменные окружения, зависимости между контейнерами. Поднять или снести весь стек — одна команда.', 'Ставим движок и плагин compose на свежий VPS:', '
curl -fsSL https://get.docker.com | sh\ndocker compose version
', 'В современном Docker команда пишется через пробел — docker compose, а не устаревшее docker-compose. На тарифах MAATRIX с AMD EPYC + NVMe сборка и запуск образов идут заметно быстрее за счёт диска, поэтому compose up редко становится узким местом.', 'Структура файла всегда одинакова: корневой ключ services с описанием контейнеров, опциональные volumes и networks. Каждый сервис получает имя, по которому к нему обращаются соседи внутри общей сети — не нужно знать IP-адреса, работает встроенный DNS Docker. Это и есть главная магия compose: приложение ходит к базе по имени db, а не по адресу, который меняется при каждом пересоздании.']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS под Docker

Стек 1: WordPress + MariaDB

['Классика для сайта или блога. Два контейнера, один том под базу, автоперезапуск:', '
services:\n  db:\n    image: mariadb:11\n    restart: always\n    environment:\n      MYSQL_ROOT_PASSWORD: rootpass\n      MYSQL_DATABASE: wp\n      MYSQL_USER: wp\n      MYSQL_PASSWORD: wppass\n    volumes:\n      - db_data:/var/lib/mysql\n  wordpress:\n    image: wordpress:php8.3-apache\n    restart: always\n    depends_on:\n      - db\n    ports:\n      - "80:80"\n    environment:\n      WORDPRESS_DB_HOST: db\n      WORDPRESS_DB_USER: wp\n      WORDPRESS_DB_PASSWORD: wppass\n      WORDPRESS_DB_NAME: wp\nvolumes:\n  db_data:
', 'Запуск в фоне и просмотр логов:', '
docker compose up -d\ndocker compose logs -f wordpress
']

Стек 2: приложение + PostgreSQL + Redis

['Типичный бэкенд: сервис на своём образе, база и кэш. Обратите внимание на healthcheck — приложение стартует только когда база готова.', '
services:\n  app:\n    build: .\n    restart: unless-stopped\n    depends_on:\n      db:\n        condition: service_healthy\n    environment:\n      DATABASE_URL: postgres://app:secret@db:5432/app\n      REDIS_URL: redis://cache:6379\n    ports:\n      - "8080:8080"\n  db:\n    image: postgres:16-alpine\n    environment:\n      POSTGRES_USER: app\n      POSTGRES_PASSWORD: secret\n      POSTGRES_DB: app\n    volumes:\n      - pg:/var/lib/postgresql/data\n    healthcheck:\n      test: ["CMD-SHELL", "pg_isready -U app"]\n      interval: 5s\n      retries: 5\n  cache:\n    image: redis:7-alpine\nvolumes:\n  pg:
']

Стек 3: Nextcloud — своё облако

['Замена Google Drive на собственном сервере. Файлы остаются у вас, никаких лимитов чужого провайдера.', '
services:\n  db:\n    image: postgres:16-alpine\n    environment:\n      POSTGRES_DB: nextcloud\n      POSTGRES_USER: nc\n      POSTGRES_PASSWORD: ncpass\n    volumes:\n      - db:/var/lib/postgresql/data\n  app:\n    image: nextcloud:apache\n    restart: always\n    ports:\n      - "8081:80"\n    depends_on:\n      - db\n    environment:\n      POSTGRES_HOST: db\n      POSTGRES_DB: nextcloud\n      POSTGRES_USER: nc\n      POSTGRES_PASSWORD: ncpass\n    volumes:\n      - nc:/var/www/html\nvolumes:\n  db:\n  nc:
']

Полезные команды и частые ошибки

['
  • Обновить образы и пересоздать: docker compose pull && docker compose up -d
  • Остановить, не удаляя тома: docker compose down
  • Снести всё вместе с данными: docker compose down -v — осторожно, стирает тома
  • Статус: docker compose ps
', 'Частые грабли: публикация портов наружу без фаервола — база с проброшенным 5432:5432 оказывается в открытом интернете. Не пробрасывайте порты БД, если к ней ходит только сосед по compose-сети. И не храните пароли в git — выносите их в .env рядом с compose-файлом.', 'Для продакшена берите VPS с ежедневными бэкапами: если стек с данными живёт на MAATRIX, снапшот тома всегда можно восстановить из резервной копии.', 'Ещё один нюанс — переменные окружения. Вместо того чтобы хардкодить пароли в YAML, создайте файл .env в той же папке, и Compose автоматически подставит значения по имени переменной. Так один и тот же compose-файл легко переносится между dev и prod: меняется только окружение, а не разметка стека.', '
# .env\nMYSQL_ROOT_PASSWORD=super-secret\nWP_TAG=php8.3-apache\n# в compose: image: wordpress:${WP_TAG}
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS под Docker

Частые вопросы

Чем docker compose отличается от docker-compose?

Это одна и та же логика, но новая версия встроена в Docker как плагин и вызывается через пробел: docker compose. Старый бинарник docker-compose устарел.

Сколько ресурсов нужно под такой стек?

WordPress или небольшой бэкенд с базой комфортно работают от 2 ГБ RAM. На AMD EPYC + NVMe у MAATRIX хватает даже базового тарифа от $8/мес.

Как автоматически поднимать стек после перезагрузки VPS?

Достаточно указать restart: always или unless-stopped у сервисов — Docker сам стартует их вместе с системой.