DevOps и Контейнеризация 11 мин чтения 2026-09-15

Dockge вместо Portainer на VDS 2026: легковесное управление Docker Compose от автора Uptime Kuma

Устали от громоздкого Portainer, съедающего треть оперативной памяти на сервере? Пошаговое руководство по переходу на Dockge от создателя Uptime Kuma: лёгкий Docker UI для Compose, прямое хранение стеков в /opt/stacks, потребление всего 30 МБ RAM, веб-консоль, онлайн-конструктор стеков и надежная изоляция в продакшене.

Инженерная редакция SysKit Проверено инженерами SysKit.ru

Если вы арендуете недорогой VDS (1–2 vCPU, 1–2 ГБ RAM) за 300–600 рублей в месяц для размещения пет-проектов, микросервисов, Telegram-ботов или клиентских лендингов, вы наверняка сталкивались с дилеммой управления Docker-контейнерами. Управлять десятком сервисов исключительно через терминал ssh и редактор nano бывает утомительно: сложно оперативно следить за логами нескольких контейнеров, неудобно на лету менять переменные окружения .env и отслеживать упавшие процессы.

Классическим ответом индустрии долгие годы оставался Portainer. Однако для компактных виртуальных серверов Portainer превратился в неоправданно тяжеловесного монстра. Разработчик Луи Лам (Louis Lam), автор всемирно признанной системы мониторинга Uptime Kuma, создал элегантную альтернативу — Dockge. Этот инструмент совершил тихую революцию в сообществе self-hosted, предложив лёгкий Docker UI с расходом всего ~30 МБ оперативной памяти и кристально чистой архитектурой.

💡 Ключевая концепция Dockge

В отличие от Portainer, Dockge не хранит конфигурации в закрытой базе данных. Каждый ваш стек — это обычный текстовый файл compose.yaml в каталоге на сервере. Вы можете в любой момент отредактировать его в веб-панели, через консоль по SSH или обновить через Git — изменения синхронизируются на лету.

1. Почему Portainer стал обузой для компактных VDS: 30 МБ против 250 МБ RAM и вендор-лок

Portainer создавался как универсальный энтерпрайз-инструмент для оркестрации Swarm и Kubernetes, и эта универсальность сыграла с ним злую шутку на одиночных серверах:

  • Колоссальный оверхед по памяти: контейнер Portainer вместе со встроенной базой данных BoltDB / SQLite потребляет от 250 до 450 МБ RAM. На сервере с 1 ГБ оперативной памяти это означает потерю почти трети всех ресурсов еще до запуска полезной нагрузки сайтов. Dockge в режиме ожидания потребляет всего 30–45 МБ RAM.
  • Проблема рассинхронизации (Вендор-лок): если вы создали стек в веб-интерфейсе Portainer, он сохраняется во внутреннем хранилище панели. Если системный администратор зайдет по SSH и отредактирует файл через nano или запустит docker compose up -d в консоли, Portainer выдаст ошибку рассинхронизации («This stack was created outside of Portainer») и заблокирует управление стеком из веба.
  • Агрессивный маркетинг лицензий: постоянные баннеры Portainer Business Edition (EE), навязывание платных подписок и искусственные ограничения базовой редакции CE вызывают обоснованное раздражение инженеров.

Dockge решает эту проблему радикально: он полностью исключает вендор-лок и работает напрямую с нативным CLI docker compose.

2. Архитектура Dockge: чистый Compose-first подход и прозрачное хранение в /opt/stacks

Архитектура Dockge построена вокруг принципа «Файловая система — единственный источник истины» (Single Source of Truth):

  1. Прозрачная файловая структура: все ваши проекты располагаются в одной базовой директории хоста (по стандарту /opt/stacks). Каждый стек изолирован в собственной папке, например /opt/stacks/telegram-bot/compose.yaml и /opt/stacks/telegram-bot/.env.
  2. Двусторонний обмен без посредников: изменили файл в красивом веб-редакторе — Dockge мгновенно сохранил его на диск и применил команду docker compose up -d. Изменили файл по SSH в консоли или задеплоили ветку через GitHub Actions — нажали кнопку «Scan Stacks Folder» или перезагрузили страницу, и веб-панель сразу отображает актуальное состояние.
  3. Абсолютная безопасность данных: если контейнер Dockge вдруг аварийно остановится, будет случайно удален или обновлен — ваши приложения и сайты продолжат бесперебойно работать. Все ваши конфиги останутся обычными файлами на диске сервера, которыми можно управлять привычными системными утилитами.
  4. Встроенный интерактивный веб-терминал: благодаря интеграции с библиотекой xterm.js вы можете в один клик провалиться в терминал (sh или bash) любого запущенного контейнера прямо из браузера без необходимости открывать отдельную SSH-сессию.

3. Пошаговая установка Dockge на Ubuntu 24.04 через Docker Compose

Для развертывания панели потребуется чистый VDS под управлением Ubuntu 22.04 или 24.04 LTS с установленным Docker Engine и плагином Compose v2. Если Docker еще не установлен, используйте официальный скрипт установки от разработчиков Docker:

# 1. Обновление пакетов и установка Docker (если не был установлен ранее)
curl -fsSL https://get.docker.com | sh

# 2. Добавление текущего пользователя в группу docker
sudo usermod -aG docker $USER
newgrp docker
# Примечание: группа docker предоставляет root-эквивалентные привилегии в системе

Создадим стандартизированную структуру каталогов. Создадим папку /opt/stacks, в которой будут храниться все ваши будущие проекты, и изолированный каталог /opt/dockge для конфигурации самого менеджера:

# Создание рабочих директорий
sudo mkdir -p /opt/stacks /opt/dockge
sudo chown -R $USER:$USER /opt/stacks /opt/dockge
cd /opt/dockge

Создадим манифест compose.yaml для запуска Dockge:

services:
  dockge:
    image: louislam/dockge:1
    container_name: dockge
    restart: unless-stopped
    ports:
      - "5001:5001"
    volumes:
      # Проброс сокета Docker для управления контейнерами хоста
      - /var/run/docker.sock:/var/run/docker.sock
      # Каталог конфигурации и данных Dockge
      - ./data:/app/data
      # Директория со стеками проектов
      - /opt/stacks:/opt/stacks
    environment:
      - NODE_ENV=production
      # Указываем Dockge, где искать папки со стеками
      - DOCKGE_STACKS_DIR=/opt/stacks

⚠️ Важное предупреждение о сокете Docker

Монтирование /var/run/docker.sock предоставляет контейнеру полномочия root на уровне ядра хоста. Именно поэтому панель управления нельзя оставлять открытой для всеобщего доступа на порту 5001 без надежного пароля и шифрования SSL. В 5-м разделе мы настроим безопасный обратный прокси.

Запустите контейнер командой:

docker compose up -d

Загрузка и запуск образа займут около 15–20 секунд. Откройте браузер и перейдите по адресу http://IP_ВАШЕГО_СЕРВЕРА:5001. Вас встретит окно первичной инициализации, где необходимо задать имя администратора и устойчивый мастер-пароль.

4. Управление стеками в веб-интерфейсе: редактор compose.yaml, .env и живой терминал

После авторизации открывается лаконичный двухпанельный интерфейс. В левой колонке располагается перечень стеков с цветовыми индикаторами статуса (зеленый — активен, желтый — перезапуск, серый — остановлен). В правой рабочей зоне расположен визуальный редактор.

🚀 Онлайн-генератор шаблонов стеков Docker Compose

Чтобы не писать манифесты вручную с нуля и не выверять отступы YAML, воспользуйтесь нашим бесплатным Генератором Docker Compose стеков онлайн. Выберите нужные компоненты (Nginx, Node.js, PostgreSQL, Redis, Dockge), настройте лимиты памяти и скопируйте готовый compose.yaml вместе с файлом .env прямо в Dockge в один клик.

Ниже представлена демонстрация работы легковесного интерфейса Dockge при запуске изолированного стека:

dockge-vps ~ live stack terminal demo
● STATUS: DEPLOYED
# Интерактивное развертывание Compose-стека web-showcase в Dockge
dockge@vds:~$ docker compose -f /opt/stacks/web-showcase/compose.yaml up -d
[+] Running 3/3
✔ Network internal_net Created (0.1s)
✔ Container showcase_redis Started (0.4s) [RAM: 14.2 MB / 384 MB limit]
✔ Container showcase_web Started (0.6s) [RAM: 9.8 MB / 256 MB limit]
dockge@vds:~$ dockge stats
CORE FOOTPRINT: Dockge Core: 31.4 MB RAM | CPU: 0.04%
TOTAL STACK RAM: 55.4 MB RAM on 1 GB VPS (944.6 MB свободно для полезной нагрузки)

Нажмите кнопку «+ Compose» в верхнем левом углу. Допустим, мы хотим развернуть тестовый стек с легким веб-сервером Nginx и Redis-кэшем. В левом поле задайте имя стека web-showcase, а в правом окне редактора вставьте следующий код:

services:
  nginx-web:
    image: nginx:alpine
    container_name: showcase_web
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      - APP_ENV=${ENVIRONMENT}
    networks:
      - internal_net

  cache-redis:
    image: redis:7-alpine
    container_name: showcase_redis
    restart: unless-stopped
    command: redis-server --requirepass ${REDIS_PASSWORD}
    networks:
      - internal_net

networks:
  internal_net:
    driver: bridge

Обратите внимание на блок «.env», расположенный непосредственно под редактором YAML. Нажмите кнопку «Edit .env» и добавьте конфиденциальные переменные:

ENVIRONMENT=production
REDIS_PASSWORD=SuperSecurePassword_2026_xK9

Нажмите кнопку «Deploy». Dockge в режиме реального времени откроет панель логов, скачает слои образов, создаст изолированную сеть internal_net и запустит контейнеры. Вы можете наблюдать процесс загрузки прямо в консольном виджете.

Кликнув по имени любого запущенного контейнера (например, showcase_web), вы получаете доступ к двум важнейшим инструментам:

  • Вкладка «Logs»: непрерывный поток логов stdout/stderr с цветовой дифференциацией и поисковой строкой.
  • Вкладка «Terminal»: полноценный терминал /bin/sh. Больше не нужно подключаться по SSH и писать длинные команды вида docker exec -it showcase_web /bin/sh — отладка доступна прямо в окне браузера.

5. Продакшен-контур: привязка домена, авто-SSL через Caddy или Nginx и защита порта 5001

Оставлять панель управления доступной по открытому протоколу HTTP на порту 5001 — грубая брешь в безопасности. Автоматизированные ботнеты непрерывно сканируют подсети провайдеров в поисках открытых портов Docker-панелей. Защитим Dockge в два этапа.

Этап 1: Привязка порта к локальному интерфейсу (Loopback). Откройте файл /opt/dockge/compose.yaml и замените публичный проброс портов на локальный:

    ports:
      # Панель слушает только локальный адрес 127.0.0.1 хоста
      - "127.0.0.1:5001:5001"

Перезапустите стек: docker compose up -d. Теперь порт 5001 недоступен из внешней сети.

Этап 2: Настройка обратного прокси с автоматическим продлением SSL-сертификатов. Рассмотрим два наиболее эффективных варианта:

Вариант А: Использование Caddy (Рекомендуется за простоту). Веб-сервер Caddy автоматически выпускает и продлевает бесплатные сертификаты Let's Encrypt / ZeroSSL. Достаточно добавить в /etc/caddy/Caddyfile всего три строки:

dockge.vash-domen.ru {
    reverse_proxy 127.0.0.1:5001
}

Перезапустите службу Caddy: sudo systemctl reload caddy.

Вариант Б: Использование классического Nginx. Если на вашем сервере в качестве основного фронтенда работает Nginx, создайте виртуальный хост в /etc/nginx/sites-available/dockge.conf. Критически важно передать заголовки обновления протокола для WebSocket, иначе веб-терминал и поток логов работать не будут:

server {
    listen 80;
    server_name dockge.vash-domen.ru;

    location / {
        proxy_pass http://127.0.0.1:5001;
        proxy_http_version 1.1;

        # Поддержка WebSocket для интерактивного терминала и живых логов
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Отключение буферизации для мгновенного вывода логов
        proxy_buffering off;
        proxy_read_timeout 86400;
    }
}

Активируйте виртуальный хост, проверьте синтаксис и запустите утилиту Certbot. Плагин Nginx автоматически пройдет верификацию домена Let's Encrypt, добавит защищенный SSL-блок на 443 порт и настроит постоянный редирект с HTTP на HTTPS:

# Активация конфигурации и перезагрузка Nginx
sudo ln -s /etc/nginx/sites-available/dockge.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

# Автоматический выпуск SSL-сертификата и включение постоянного редиректа
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d dockge.vash-domen.ru --redirect

6. Агентский режим: как объединить несколько серверов VDS в единую панель

Одна из сильнейших возможностей Dockge — встроенный агентский режим (Agent Mode). Если у вас арендовано несколько виртуальных серверов (например, рабочий VDS в Москве для фронтенда и второй VDS в Санкт-Петербурге под фоновые воркеры и базы данных), вам не нужно держать открытыми несколько вкладок в браузере.

На удаленном сервере (VDS-2) разверните Dockge с указанием переменной окружения DOCKGE_MODE=agent:

services:
  dockge-agent:
    image: louislam/dockge:1
    container_name: dockge_agent
    restart: unless-stopped
    ports:
      - "5001:5001"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/app/data
      - /opt/stacks:/opt/stacks
    environment:
      - NODE_ENV=production
      - DOCKGE_MODE=agent
      - DOCKGE_STACKS_DIR=/opt/stacks

После старта перейдите в веб-интерфейс основного сервера (VDS-1), нажмите на аватар в правом верхнем углу, выберите пункт «Add Agent» и укажите адрес удаленного сервера и сгенерированный токен безопасности. После подключения все стеки с обоих VDS появятся в общем дереве, сгруппированные по именам серверов.

7. Сравнительная матрица: Dockge vs Portainer CE vs Coolify v4

Чтобы вам было проще выбрать инструмент под ваши задачи и бюджет хостинга, сравним три наиболее популярных инструмента управления контейнерами:

Критерий Dockge Portainer CE Coolify v4
Потребление RAM в покое ~30–45 МБ ~250–450 МБ ~500–800 МБ
Нагрузка на CPU в фоне < 0.1% vCPU 1.5–3.5% vCPU 3.0–6.0% vCPU
Формат хранения стеков Обычные файлы compose.yaml в /opt/stacks Внутренняя база BoltDB / SQLite PostgreSQL + Git репозитории
Синхронизация с консолью CLI Полная двухсторонняя без конфликтов Ограниченная (риск рассинхронизации) Управляется движком PaaS
Встроенный веб-терминал Да (быстрый xterm.js к любому сервису) Да Да
Мультисерверность (Агенты) Встроенный лёгкий Agent Mode Portainer Edge Agent Кластер серверов Coolify
Резервное копирование Бэкап одной папки /opt/stacks за 5 сек Экспорт проприетарной БД панели Дамп системной СУБД PostgreSQL
Холодный старт панели ~2 секунды 15–25 секунд 40–60 секунд
Минимальный тариф VDS 1 vCPU / 1 GB RAM 1–2 vCPU / 2 GB RAM 2 vCPU / 4 GB RAM
Лицензия и монетизация 100% MIT Open-Source без баннеров CE с навязчивым апгрейдом до EE Open-Source (AGPLv3)
Основное назначение Легковесный менеджер Compose-стеков на недорогом VDS Комплексное управление Swarm и томами Полноценный аналог Vercel/Heroku с авто-CI/CD

8. Резюме и чек-лист стабильного Docker-сервера на базе Dockge

Переход на Dockge позволяет избавиться от лишних прослоек абстракции и превращает ваш VDS в надежную, предсказуемую и легко администрируемую среду. Для поддержания стабильности сервера придерживайтесь нескольких базовых правил:

  • Регулярный бэкап каталога /opt/stacks: поскольку все стеки представляют собой текстовые файлы, достаточно раз в сутки архивировать или синхронизировать папку /opt/stacks с внешним S3-хранилищем. В случае фатального сбоя сервера вы сможете восстановить всю инфраструктуру на новом VDS буквально за 2 команды.
  • Ограничение объема Docker-логов: настройте глобальный лимит логов в /etc/docker/daemon.json (директивы max-size: "10m" и max-file: "3"), чтобы переполненные логи не забили дисковое пространство.
  • Изоляция секретов: никогда не хардкодьте пароли от баз данных внутри compose.yaml — всегда выносите их во вкладку переменных окружения .env.
  • Сетевая изоляция портов: не пробрасывайте порты баз данных (PostgreSQL, MySQL, Redis) в глобальную сеть — связывайте контейнеры через общие внутренние Docker-сети.

Разверните чистый VDS под Docker за пару минут

Для комфортной работы связки из Dockge, обратного прокси и 5–10 прикладных контейнеров отлично подойдут проверенные серверы с быстрыми накопителями NVMe, стабильным сетевым каналом и защитой от сетевых атак.

Рекомендуемые VDS-провайдеры

Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с

Выбор редакции
⚡

Timeweb Cloud

Моментальное развертывание чистой Ubuntu 24.04 LTS и готовые образы Docker. Высокоскоростные NVMe-диски до 3500 МБ/с и надежная внутренняя сеть VPC для изоляции стеков.

Конфигурация
от 1 vCPU / 1–2 GB RAM / 20–40 GB NVMe
Highload & Безопасность
🔷

Selectel

Дата-центры Tier III в РФ. Аппаратная защита от DDoS-атак на уровнях L3/L4, фиксированная скорость портов до 1 Гбит/с без жестких лимитов и гибкое масштабирование ресурсов.

Конфигурация
от 1 vCPU / 2 GB RAM / 30 GB NVMe
Идеально для вебмастеров
🟠

Beget

Удобное управление виртуальными серверами, автоматические снапшоты, встроенный мониторинг системных ресурсов и отзывчивая техническая поддержка 24/7.

Конфигурация
от 1 vCPU / 2 GB RAM / 30 GB NVMe

Вопросы и ответы (FAQ)

Популярные вопросы вебмастеров и сисадминов по данной теме

Безопасно ли монтировать сокет /var/run/docker.sock в контейнер Dockge?
Монтирование сокета Docker дает контейнеру полные административные права над демоном Docker хоста. Это стандартное требование для любых панелей управления контейнерами (включая Portainer и Coolify). Чтобы минимизировать риски, обязательно привязывайте порт панели к локальному адресу 127.0.0.1, используйте надежный мастер-пароль и направляйте веб-трафик через защищенный обратный прокси с HTTPS.
Как импортировать в Dockge существующие проекты, запущенные ранее вручную?
Перенесите директорию с вашим проектом в каталог /opt/stacks/<имя-проекта>/. Убедитесь, что внутри лежат файлы compose.yaml (или docker-compose.yml) и при необходимости .env. После этого откройте панель Dockge и нажмите кнопку «Scan Stacks Folder» — панель автоматически распознает стек, отобразит статус запущенных контейнеров и позволит управлять ими через веб-интерфейс.
Почему при подключении через обратный прокси обрывается веб-терминал или не идут логи?
Интерактивный веб-терминал и потоковый вывод логов в Dockge работают по протоколу WebSocket. Если вы используете Nginx, убедитесь, что в блоке location / указаны директивы proxy_set_header Upgrade $http_upgrade; и proxy_set_header Connection "upgrade";, а также отключена буферизация proxy_buffering off;. В Caddy поддержка WebSocket включена автоматически.
Что произойдет с моими сайтами и контейнерами, если сам Dockge упадет или будет удален?
Ничего страшного не произойдет. Контейнеры ваших стеков управляются напрямую демоном Docker Engine хост-системы. Если контейнер Dockge остановится, все ваши запущенные сайты, боты и базы данных продолжат функционировать в штатном режиме. Вы сможете управлять ими через стандартный CLI docker compose.

Читайте также в блоге SysKit

Смежные руководства и полезные технические статьи