Установка с помощью Docker
DumbMonit работает как один контейнер: сервер dumbmonit (сбор данных, API,
оповещения, веб-интерфейс) запускает собственную VictoriaMetrics для хранения временных рядов; её
бинарный файл поставляется в образе. Конфигурация и состояние хранятся во встроенной базе данных
SQLite. Один том, /data, содержит базу данных, секрет экземпляра и
временные ряды.
Требования
Заголовок раздела «Требования»- Docker Engine с плагином Compose (команда
docker compose versionработает). - Машина, которая может обращаться к отслеживаемым мониторам. Достижимость самой машины с этих мониторов не требуется, кроме агентов, которые отправляют свои измерения на сервер по HTTP.
- Свободный порт
8080на хосте или другой порт на ваш выбор (см. ниже).
Файл Compose
Заголовок раздела «Файл Compose»Это весь docker-compose.yml (файл .env не нужен); сохраните его в
отдельном каталоге:
services: dumbmonit: image: ghcr.io/laupernoe/dumbmonit:latest ports: - "8080:8080" volumes: - dumbmonit-data:/data # Or a host directory; on a SELinux host (Fedora, RHEL) add `:Z`: # - ./dumbmonit:/data:Z # environment: # PUID: "1000" # owner of the files in /data (default 65532) # PGID: "1000" restart: unless-stopped stop_grace_period: 30s read_only: true tmpfs: [/tmp] # Starts as root only to give /data to user 65532 (or PUID/PGID), then # drops root for good: a host directory works as it is. Remove `user` and # `cap_add` to run as 65532 from the start (the files must belong to it). user: "0:0" cap_drop: [ALL] cap_add: [CHOWN, DAC_READ_SEARCH, SETUID, SETGID] security_opt: ["no-new-privileges:true"] sysctls: net.ipv4.ping_group_range: "0 2147483647"
volumes: dumbmonit-data: name: dumbmonit-dataЗатем запустите:
docker compose up -dЗагружается опубликованный образ; файловая система только для чтения,
capabilities, PUID/PGID и sysctl ping_group_range объяснены в разделах
Права доступа и каталог данных и
Ping ICMP без capability. Параметры (порт,
секрет, срок хранения, внешняя VictoriaMetrics, снимки экрана) —
переменные окружения, которые вы добавляете сами.
Встроенная VictoriaMetrics
Заголовок раздела «Встроенная VictoriaMetrics»Образ содержит бинарный файл VictoriaMetrics (/victoria-metrics-prod, из
victoriametrics/victoria-metrics:v1.152.0). Если DUMBMONIT_VM_URL не
задана, сервер запускает его как дочерний процесс, слушающий 127.0.0.1:8428,
хранит ряды в /data/vm, перенаправляет его строки журнала в собственный журнал,
перезапускает с нарастающей задержкой, если он падает, и останавливает при завершении работы. Ничего
не публикуется: порт остаётся внутри контейнера.
Стоит знать две переменные: DUMBMONIT_VM_RETENTION (по умолчанию 12 месяцев;
подойдут и 30d, и 2y) и DUMBMONIT_VM_MEMORY (256MB, бюджет
её кэшей; увеличьте для сотен хостов). Остальное — в
справочнике по конфигурации.
Чтобы использовать уже работающую у вас VictoriaMetrics, задайте в DUMBMONIT_VM_URL её
адрес (http://host:8428): встроенная тогда не запускается, а
/data/vm остаётся пустым.
Первый запуск
Заголовок раздела «Первый запуск»Откройте https://<your-host>:8080. Браузер один раз предупредит о самоподписанном сертификате (см. HTTPS and encryption). Новый экземпляр показывает экран /setup,
где вы создаёте первую учётную запись администратора (пароль не короче 12
символов).
Сначала экран запрашивает код настройки. Пока администратора нет, сервер при запуске выводит в журнал одноразовый код:
docker compose logs dumbmonit | grep -A1 "setup code" First-run setup code: K7XQ4-M9PRTОн подтверждает, что создающий учётную запись администратора управляет сервером, поэтому
кто-то другой в сети не сможет занять свежий экземпляр первым. Код хранится
только в памяти, меняется при каждом перезапуске, пока нет администратора, а неверные
попытки ограничиваются по частоте. Для автоматизированного развёртывания задайте
DUMBMONIT_SETUP_CODE, чтобы выбрать код самостоятельно.

Затем добавьте первый монитор: см. Добавьте первый монитор.
Переменные окружения
Заголовок раздела «Переменные окружения»Всё настраивается через переменные окружения; ни одна не обязательна. Добавьте
нужные в environment: службы, как показано в разделе
Дополнительные параметры.
| Переменная | По умолчанию | Назначение |
|---|---|---|
DUMBMONIT_BIND | 0.0.0.0:8080 | Адрес прослушивания внутри контейнера. |
PUID / PGID | 65532 | С user: "0:0": пользователь и группа, от имени которых работает сервер, и владелец файлов в /data (подробности). DUMBMONIT_PUID / DUMBMONIT_PGID тоже работают. |
DUMBMONIT_DATA_DIR | /data | База данных SQLite (dumbmonit.db), секрет экземпляра (secret.key) и данные встроенной VictoriaMetrics (vm/). |
DUMBMONIT_VM_URL | (не задана) | URL внешней VictoriaMetrics. Если задан, встроенная не запускается. |
DUMBMONIT_VM_RETENTION | 12 | Срок хранения во встроенной VictoriaMetrics: месяцы или 30d, 2y. |
DUMBMONIT_VM_MEMORY | 256MB | Бюджет памяти кэшей встроенной VictoriaMetrics. |
DUMBMONIT_VM_LISTEN | 127.0.0.1:8428 | Адрес прослушивания встроенной VictoriaMetrics внутри контейнера. |
DUMBMONIT_SECRET | (создаётся) | Секрет экземпляра, шифрующий учётные данные мониторов и токены. |
DUMBMONIT_MAX_CONCURRENT_PROBES | 64 | Число одновременных проверок, всех сборщиков вместе. |
DUMBMONIT_PROBE_TIMEOUT_SECS | 10 | Максимальная длительность одной проверки. |
DUMBMONIT_FLUSH_INTERVAL_SECS | 5 | Период записи в VictoriaMetrics. |
DUMBMONIT_LOG | info | Фильтр журнала (синтаксис tracing, например debug, dumbmonit=trace). |
DUMBMONIT_AGENT_DIR | /agents | Бинарные файлы агентов, раздаваемые по адресу /download/…. |
DUMBMONIT_RESET_PASSWORD | (пусто) | Задайте 1, чтобы при запуске сбросить пароль и все сеансы. |
DUMBMONIT_SETUP_CODE | (создаётся) | Код настройки, запрашиваемый /setup, пока нет администратора. Если не задан, при каждом запуске в журнал выводится случайный. |
DUMBMONIT_COOKIE_SECURE | (выкл.) | Задайте 1 за обратным прокси с TLS, чтобы пометить cookie сеанса как Secure. |
DUMBMONIT_ALERT_INTERVAL_SECS | 30 | Период проверки оповещений (не меньше 10). |
DUMBMONIT_ALERT_HISTORY_DAYS | 90 дней | Срок хранения истории оповещений. Об оговорке касательно её единицы измерения см. справочник по конфигурации. |
DUMBMONIT_BACKUP_ENABLED | вкл. | Плановые локальные резервные копии базы данных в /data/backups/. Настраиваются через DUMBMONIT_BACKUP_DIR, _INTERVAL_HOURS (24) и _KEEP (7); см. Резервное копирование и восстановление. |
Полный список с подробностями — в справочнике по конфигурации.
Имена EZYMONIT_* из времён до переименования по-прежнему читаются как запасной вариант; см.
Обновление.
Резервная копия секретного ключа
Заголовок раздела «Резервная копия секретного ключа»Сообщества SNMP, пароли и токены API шифруются с помощью AES-256-GCM ключом,
производным от секрета экземпляра. При первом запуске DumbMonit создаёт этот
секрет в /data/secret.key (внутри тома dumbmonit-data).
Если вы предпочитаете управлять секретом сами, задайте DUMBMONIT_SECRET в файле Compose
(пример) (32 случайных символа или больше). Храните его в менеджере паролей.
Обновление
Заголовок раздела «Обновление»docker compose pulldocker compose up -dМиграции базы данных выполняются при запуске. Данные VictoriaMetrics не затрагиваются.
Bind mount
Заголовок раздела «Bind mount»Существующий docker-compose.yml продолжает работать как есть: образ по-прежнему
работает от пользователя 65532. Новый файл добавляет user: "0:0" и строку
cap_add, чтобы каталог хоста работал без подготовки
(Права доступа); скопируйте эти две строки, если хотите перейти на
bind mount.
С EzyMonit и с конфигурации из двух контейнеров
Заголовок раздела «С EzyMonit и с конфигурации из двух контейнеров»До сентября 2026 года DumbMonit назывался EzyMonit и работал в двух контейнерах:
сервер и отдельный сервис victoriametrics. Для обновления данные
старого проекта нужно один раз перенести в новый том. Старый проект назывался
ezymonit (его тома — ezymonit_ezymonit-data и ezymonit_vm-data;
убедиться можно командой docker volume ls). Из старого каталога:
docker compose downЗатем, с новым docker-compose.yml:
docker volume create dumbmonit-datadocker run --rm -v ezymonit_ezymonit-data:/from -v dumbmonit-data:/to alpine cp -a /from/. /to/docker run --rm -v ezymonit_vm-data:/from -v dumbmonit-data:/to alpine sh -c 'mkdir -p /to/vm && cp -a /from/. /to/vm/'docker compose up -dКаталог данных старой VictoriaMetrics имеет ту же структуру, что использует встроенная:
конвертировать ничего не нужно. Альтернатива — оставить внешнюю VictoriaMetrics и
указать на неё DUMBMONIT_VM_URL.
Что сервер делает сам при первом запуске:
- Переменные
EZYMONIT_*по-прежнему читаются как запасной вариант, с одним предупреждением при запуске на каждую переменную (EZYMONIT_X is deprecated, use DUMBMONIT_X). /data/ezymonit.dbпереименовывается вdumbmonit.db.- Токены агентов
ezym_…продолжают работать; новые имеют видdmon_…. Агенты продолжают отправлять данные; когда будет удобно, заново выполните команду установки на каждой машине — она переносит старую службу на месте. - Имя cookie сеанса изменилось: всем придётся один раз войти заново. Настройка темы в браузере сохраняется.
Чего сервер не делает: префикс метрик изменился с ezymonit_ на
dumbmonit_ без обратной совместимости. Старые ряды остаются в VictoriaMetrics под
прежним именем и исчезают по истечении срока хранения; графики и встроенные правила начинаются
заново с момента обновления. Пользовательские правила оповещений, в которых упоминаются метрики ezymonit_…, нужно
отредактировать.
Резервное копирование и восстановление
Заголовок раздела «Резервное копирование и восстановление»Один именованный том, dumbmonit-data, содержит всё:
| Путь | Содержимое |
|---|---|
dumbmonit.db | Мониторы, правила, каналы, состояние оповещений, сеансы. |
secret.key | Секрет экземпляра. |
backups/ | Плановые локальные резервные копии: копия базы данных и секрета, по умолчанию ежедневно, хранится семь. |
vm/ | Временные ряды VictoriaMetrics (по умолчанию срок хранения 12 месяцев). |
DumbMonit по расписанию сам резервирует свою базу данных и экспортирует всю
конфигурацию — мониторы, учётные данные, правила, каналы — в один файл,
зашифрованный выбранной вами парольной фразой, который восстанавливается на свежий экземпляр.
Оба способа описаны в разделе Резервное копирование и восстановление, вместе с тем, что делать перед
обновлением, и единственным правилом о secret.key, которое стоит прочитать дважды.
Чтобы заархивировать сам том, вместе с графиками, остановите стек и упакуйте его в tar:
docker compose stopdocker run --rm -v dumbmonit-data:/data -v "$PWD:/backup" alpine \ tar czf /backup/dumbmonit-data.tgz -C /data .docker compose startЧтобы восстановить, создайте том, распакуйте в него архив таким же образом, затем
выполните docker compose up -d.
Если важен объём, --exclude=./vm делает архив небольшим: база данных и
секрет — это настройка, а vm/ — только графики.
Дополнительные параметры
Заголовок раздела «Дополнительные параметры»В файле Compose выше переменных нет намеренно. Чтобы изменить настройку,
добавьте блок environment: (или строку в него) в dumbmonit: вашего
docker-compose.yml и снова выполните docker compose up -d. Контейнер
пересоздаётся; том с данными сохраняется.
Другой порт. Измените левую часть привязки; контейнер по-прежнему слушает на 8080:
ports: - "8099:8080"Собственный секрет вместо сгенерированного в /data/secret.key. Он шифрует
учётные данные мониторов: потеряв его, придётся вводить их все заново.
environment: DUMBMONIT_SECRET: replace-me-with-32-random-charactersСрок хранения и память встроенной VictoriaMetrics (месяцы или 30d /
2y; домашней лаборатории из нескольких десятков мониторов хватает 256 MB):
environment: DUMBMONIT_VM_RETENTION: "24" DUMBMONIT_VM_MEMORY: 512MBВнешняя VictoriaMetrics; встроенная тогда не запускается:
environment: DUMBMONIT_VM_URL: http://victoriametrics:8428Потерян пароль. Добавьте строку ниже, выполните docker compose up -d,
снова создайте первого администратора в интерфейсе (мониторы, правила и каналы
сохраняются), затем удалите строку и ещё раз выполните docker compose up -d:
environment: DUMBMONIT_RESET_PASSWORD: "1"Снимки экрана при изменениях сайтов: безголовый Chromium рядом с сервером; см. ниже Снимки экрана при изменениях сайтов.
Другие переменные: справочник по конфигурации.
Снимки экрана при изменениях сайтов
Заголовок раздела «Снимки экрана при изменениях сайтов»Монитор изменений сайтов всегда сравнивает видимый текст страниц. Для снимка экрана каждой новой версии нужен браузер, а в образе DumbMonit его нет: безголовый Chromium запускается как второй сервис, а DUMBMONIT_BROWSER_URL сообщает серверу, где его искать.
Добавьте эти строки в docker-compose.yml, затем выполните docker compose up -d:
services: dumbmonit: environment: DUMBMONIT_BROWSER_URL: http://browser:9222 browser: image: chromedp/headless-shell:stable shm_size: 256m restart: unless-stoppedbrowser— имя сервиса; в сети Composehttp://browser:9222ведёт к нему. Его порт никуда не публикуется: с ним общается только DumbMonit.shm_size: 256m: Chromium рисует в/dev/shm, а 64 МБ по умолчанию в Docker слишком мало для длинной страницы.- Подойдёт любой Chromium, запущенный с
--remote-debugging-port; здесь используется образchromedp/headless-shell.
Без браузера всё остальное работает как обычно (сравнение текста, оповещения, копии «до/после»); у снимков просто нет изображения. Пока сервер не достаёт до браузера, в форме монитора для изменений сайта показывается заметка с этими строками.
Если заметка остаётся после перезапуска, проверьте docker compose logs browser, что имя хоста в DUMBMONIT_BROWSER_URL совпадает с именем сервиса и что оба сервиса входят в один проект Compose.
Обратный прокси
Заголовок раздела «Обратный прокси»UI и API обслуживаются на одном порту, который принимает только HTTPS (обычный HTTP-запрос получает перенаправление, см. HTTPS and encryption). Поэтому обратный прокси должен подключаться к контейнеру по HTTPS (https://dumbmonit:8080), с отключённой проверкой сертификата для этого участка или с доверенным сертификатом DumbMonit. WebSocket не используется:
интерфейс опрашивает API, поэтому любой обратный прокси работает без особой
настройки.
monit.example.com { reverse_proxy https://127.0.0.1:8080 { transport http { tls_insecure_skip_verify } }}server { listen 443 ssl; server_name monit.example.com; # ssl_certificate / ssl_certificate_key …
location / { proxy_pass https://127.0.0.1:8080; proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; # После сбоя агенты отправляют накопившиеся пакеты: client_max_body_size 16m; }}Если прокси терминирует TLS, задайте DUMBMONIT_COOKIE_SECURE: "1", чтобы cookie сеанса
отправлялась только по HTTPS. Задавайте её, только если все браузеры подключаются к DumbMonit по HTTPS: иначе браузер
никогда не вернёт cookie, и войти будет невозможно.
Права доступа и каталог данных
Заголовок раздела «Права доступа и каталог данных»Сервер никогда не работает от root. По умолчанию образ работает от пользователя
65532:65532, которому уже принадлежит именованный том, созданный Docker.
Bind mount (./dumbmonit:/data), напротив, сохраняет владельца каталога хоста,
часто root, если его создал Docker. Поэтому файл Compose выше запускает контейнер
от root (user: "0:0"). Сервер остаётся root лишь на мгновение: прежде чем
открыть базу, запустить VictoriaMetrics или начать слушать сеть, он передаёт
/data пользователю 65532:65532 (только записи, принадлежащие кому-то другому,
не переходя по символическим ссылкам), навсегда отказывается от root и проверяет,
что вернуть его нельзя. Четыре capabilities в cap_add нужны только для этого
шага; после него не остаётся ни одной. no-new-privileges и корневая файловая
система только для чтения остаются включёнными: /data и /tmp — единственные
пути, доступные для записи.
Выбор владельца: PUID и PGID. С user: "0:0" укажите uid и gid, от имени
которых работает сервер; файлы передаются им при запуске:
environment: PUID: "1000" PGID: "1000"DUMBMONIT_PUID / DUMBMONIT_PGID тоже работают и имеют приоритет. Значение 0
отклоняется. В Unraid PUID=99 и PGID=100 соответствуют обычному владельцу
appdata. Без user: "0:0" PUID/PGID игнорируются.
Без user: "0:0" (простой docker run -v ./data:/data или --user 1000:1000) владельцы не меняются, и /data должен быть уже доступен для записи.
Если это не так, сервер останавливается и предлагает сначала --user 0:0, затем
sudo chown -R 65532:65532 ./data на хосте для bind mount или, для именованного
тома:
docker run --rm -v dumbmonit-data:/data alpine chown -R 65532:65532 /dataSELinux и Podman
Заголовок раздела «SELinux и Podman»На хосте, где SELinux работает в режиме enforcing (Fedora, RHEL, CentOS Stream,
AlmaLinux…), контейнеру, включая root, отказывают в доступе к bind mount, пока у
него нет метки контейнера. Добавьте :Z к тому или :z, если каталогом
пользуются другие контейнеры:
volumes: - ./dumbmonit:/data:ZБез этого сервер останавливается с сообщением the host enforces SELinux and the volume has no container label. Именованные тома Docker помечает сам, им ничего не нужно.
Podman без root работает так же, с --user 0:0. Root в контейнере — это ваш собственный
пользователь на хосте, а файлы bind mount получают uid 65532 контейнера, который
хост показывает как один из ваших sub-uid (165531 при обычном /etc/subuid).
Просматривайте их командой podman unshare ls -l ./dumbmonit. Чтобы вместо этого
файлы остались за вашим uid, запустите контейнер от своего имени; тогда ни один
владелец не меняется:
podman run --userns keep-id --user "$(id -u):$(id -g)" -v ./dumbmonit:/data:Z …Ping ICMP без capability
Заголовок раздела «Ping ICMP без capability»Монитор ping отправляет ICMP-эхо. Вместо
сырого сокета — которому нужна NET_RAW, а capability, выданная непривилегированному
пользователю контейнера, всё равно непригодна, — он использует сокет ICMP echo, который Linux
разрешает группам, перечисленным в net.ipv4.ping_group_range. Файл Compose
задаёт этот sysctl внутри собственного сетевого пространства имён контейнера:
services: dumbmonit: sysctls: net.ipv4.ping_group_range: "0 2147483647"На хосте ничего не меняется. Docker 20.10 и новее сами задают этот диапазон в каждом
контейнере; явные строки обеспечивают его на более старых версиях и
в Podman. Без него проверка сообщает об ошибке конфигурации (показывается на
мониторе, без уведомления), но не о ложном «хост недоступен». При использовании docker run передайте
--sysctl net.ipv4.ping_group_range="0 2147483647". Пока сервер не может открыть ICMP-сокет, в форме монитора ping показывается заметка с этими строками.
Проверка без оборудования
Заголовок раздела «Проверка без оборудования»Добавьте демо-монитор: оно генерирует поддельные измерения без
какой-либо подготовки, так что графики, правила и уведомления можно опробовать
сразу. Для реальных данных SNMP часто достаточно машины, на которой запущен Docker, —
установите на ней snmpd (apt install snmpd, разрешите сообщество public в мосте Docker
в /etc/snmp/snmpd.conf) и добавьте устройство SNMP с адресом
хоста в этом мосту (по умолчанию 172.17.0.1): профиль определится
автоматически, и появятся интерфейсы, память и процессы.
Разработчики могут добавить оверлей docker-compose.dev.yml, чтобы опубликовать встроенную
VictoriaMetrics на :8428 хоста для прямых запросов MetricsQL:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d