Инфраструктурный Docker Compose: Portainer CE + Nginx Proxy Manager с GUI Let's Encrypt

Обновлено: Сентябрь 2026 Стек: Portainer CE 2.x, Nginx Proxy Manager v2, Docker Engine Проверено: Production-Ready

Готовый docker-compose.yml для управления сервером через веб-интерфейс: Portainer CE (Docker GUI) и Nginx Proxy Manager (GUI прокси и SSL в 1 клик).

Интерактивный генератор под ваши параметры
Параметры подставляются в код в реальном времени
docker-compose.yml
# docker-compose.yml
# Инфраструктурный стек управления Portainer + Nginx Proxy Manager (SysKit.ru)
version: '3.8'

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: always
    ports:
      - "9000:9000"
      - "9443:9443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    networks:
      - infra_net

  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx_proxy_manager
    restart: always
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    environment:
      DB_MYSQL_HOST: "npm_db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm_user"
      DB_MYSQL_PASSWORD: "NpmSecretPassword2026!"
      DB_MYSQL_NAME: "npm_db"
    volumes:
      - ./npm_data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - npm_db
    networks:
      - infra_net

  npm_db:
    image: 'jc21/mariadb-aria:latest'
    container_name: npm_mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'NpmSecretPassword2026!_root'
      MYSQL_DATABASE: 'npm_db'
      MYSQL_USER: 'npm_user'
      MYSQL_PASSWORD: 'NpmSecretPassword2026!'
    volumes:
      - ./npm_mysql:/var/lib/mysql
    networks:
      - infra_net

networks:
  infra_net:
    driver: bridge

volumes:
  portainer_data:

Разбор ключевых директив конфигурации

Техническое обоснование директив и их прямое влияние на процессор (CPU), оперативную память (RAM) и дисковый ввод-вывод (NVMe I/O).

Директива / Блок Рекомендуемое значение Зачем нужно и системное влияние (CPU / RAM / I-O)
ports: '81:81' Порт веб-панели NPM Открывает удобный GUI интерфейс Nginx Proxy Manager для выпуска Let's Encrypt сертификатов и проксирования в 1 клик.
restart: unless-stopped unless-stopped Обеспечивает автоматический перезапуск контейнеров при сбое демона Docker или перезагрузке VDS.
logging / max-size: 10m max-size: 10m, max-file: 3 Ограничивает размер логов контейнеров на диске, предотвращая переполнение дискового пространства NVMe (100% Disk Full).
volumes / app_data named volume / local bind Выносит базу данных и загружаемые файлы в постоянные тома, предотвращая потерю данных при обновлении контейнеров.

Рекомендуемые системные требования VDS под этот стек

Расчет минимальной и оптимальной конфигурации виртуального сервера для стабильной работы без сбоев.

Оптимальный сайзинг: 1-2 vCPU, 2 GB RAM, 30 GB NVMe
Расчетная нагрузка: Инфраструктурный хост для десятков микросервисов
2 CPU / 2 GB NVMe
⚡

Timeweb Cloud

Рекомендуемые ресурсы
1-2 vCPU / 2 GB RAM / 30 GB NVMe
2 vCPU / 2 GB RAM
🔷

Selectel

Рекомендуемые ресурсы
1-2 vCPU / 2 GB RAM / 30 GB NVMe
Turbo 2 GB
🟠

Beget

Рекомендуемые ресурсы
1-2 vCPU / 2 GB RAM / 30 GB NVMe

Онлайн-утилиты SysKit для проверки этого сервера

Протестируйте корректность применения конфигурации прямо сейчас в один клик.

Частые ошибки при настройке и их решение (FAQ)

Типовые проблемы вебмастеров и сисадминов при внедрении данной конфигурации.

Какие логин и пароль по умолчанию в Nginx Proxy Manager?
Email: `admin@example.com`, Пароль: `changeme`. При первом входе система попросит изменить их на ваши данные.
Как запустить и остановить стек в фоновом режиме?
Запуск: `docker compose up -d`. Остановка: `docker compose down`. Просмотр логов: `docker compose logs -f`.
Ошибка: Port already allocated (порт 80/443 занят)
Проверьте, не запущен ли локальный Nginx или Apache: `systemctl stop apache2` или `systemctl stop nginx`, либо измените внешний порт в `ports: ["8080:80"]`.