Проверен полностью12 128

Мониторинг

Gatus

Gatus по расписанию проверяет HTTP, TCP, DNS, ICMP и сертификаты, сверяет ответы с заданными условиями и показывает историю на статусной панели. Этот рецепт хранит результаты в SQLite, защищает панель через Basic Auth и требует один небольшой контейнер.

Обзор

Gatus превращает YAML-файл в проверки доступности по расписанию и статусную панель. Он проверяет HTTP-ответы, TCP- и UDP-порты, DNS, ICMP, SSH, сертификаты, срок домена и многошаговые API-сценарии, а затем сверяет результат с явными условиями, а не считает успехом любой ответ.

Он подходит тем, кто хочет хранить конфигурацию мониторинга в системе контроля версий и не нуждается в редакторе форм. Панель показывает историю ответа и инциденты, а уведомления отправляются в почту, чаты, webhook и сервисы дежурств. В этом рецепте встроенная SQLite сохраняет историю без отдельной базы данных.

На панели нельзя редактировать проверки. Измените config/config.yaml, проверьте diff и перезапустите Gatus — это главное отличие от UI-first подхода Uptime Kuma.

Оценка безопасности

Рецепт публикует Gatus на 127.0.0.1, включает Basic Auth из .env, задаёт no-new-privileges и не выдаёт capabilities, host networking или Docker socket. Публичный доступ должен идти через HTTPS reverse proxy.

Gatus по своему назначению отправляет исходящие запросы. Тот, кто может менять config.yaml, может обратиться к любому адресу, доступному из сети контейнера, включая внутренние сервисы. Ограничьте право записи в каталог рецепта. Официальный образ также запускается от root: рецепт ограничивает доступ процесса к хосту, но не меняет пользователя внутри контейнера.

Отслеживание обновлений

Это сохранённые результаты отдельных проверок, а не данные в реальном времени. Неизвестный статус означает, что проверка ещё не выполнялась.

Новые релизы

Сравнение версии рецепта с последним известным релизом upstream. Это номер версии, а не разбор изменений.

Актуальная версия v5.37.09 окт. 2026 г., 13:58 UTC

Критические уязвимости

Результат отдельного сканирования Docker-образов, а не проверки Compose.

Критических уязвимостей не найдено9 окт. 2026 г., 13:58 UTC

Несовместимые обновления

Новый major находится сравнением номеров версий. Вердикт о совместимости заносится вручную после чтения release notes и порядка миграции.

Не провереноПроверка не выполнялась

compose.yaml

Изменения upstream Compose относительно проверенного рецепта.

Не провереноПроверка не выполнялась

Устаревшие Docker-образы

Проверка закреплённых тегов образов на наличие новых версий.

Все образы актуальны9 окт. 2026 г., 13:58 UTC

От наблюдения к действию

План обновления

Рецепт уже закрепляет последний известный релиз. Ниже показаны сохранённые основания для этой версии.

v5.37.0v5.37.0
  1. Открыть основания релиза

    Открыть релиз на GitHub ↗ Ссылка нужна для ревизии и сама по себе не доказывает совместимость.

  2. Проверить границу версий

    Номера версий не пересекают major-границу совместимости. Вердикт о совместимости не записан.

  3. Подготовить смену тегов образов

    Смена тегов образов сейчас не планируется.

  4. Следовать документированной схеме миграции

    Смена тега и перезапуск. Шаги конкретного релиза всё равно берутся из release notes и инструкции по установке.

  5. Защитить точку отката

    Смена версии сейчас не планируется. Рецепт содержит процедуру backup. Restore проверен.

  6. Проверить обновлённый рецепт

    Точная проверка уровня «Проверен полностью» для этой версии записана 2026-10-09.

Прочитать порядок обновления в инструкции по установке ↓

Характеристики

Безопасность и публикация

Уровни установки

Статус показывает, насколько опубликованный рецепт покрывает требования каждого уровня.

Готово

Для дома

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

  • Один сервер
  • Локальный доступ
  • Минимум компонентов

Рецепт закрывает все требования этого уровня.

Готово

Для VPS

Публичная установка с защищённым доступом и резервными копиями.

  • Домен
  • HTTPS через reverse proxy
  • Backup вне сервера

Рецепт закрывает все требования этого уровня.

Не поддерживается

Надёжная

Конфигурация для предсказуемой эксплуатации и наблюдаемости.

  • Отдельная БД
  • Healthcheck
  • Внешний мониторинг
  • Лимиты CPU и памяти

Нужно добавить вручную: отдельная бд, healthcheck, внешний мониторинг, лимиты cpu и памяти.

Собрать под свой сервер

Генератор конфигурации

Ответьте на пять вопросов и скачайте готовый комплект Gatus.

Работает локально
01 Есть домен?
02 Какой reverse proxy?
03 Архитектура сервера
04 Где хранить данные?

Укажите абсолютный путь для отдельного диска, например /srv/gatus.

05 Требуется VPN-доступ?

Комплект готов к сборке

Архив создаётся в браузере. Ответы никуда не отправляются.

Те же файлы одним shell-скриптом, обычными heredoc, чтобы всё читалось до запуска. Скрипт проверяет Docker, архитектуру, память, диск и нужные порты и без --apply ничего не пишет.

Скриншоты

Быстрый запуск

Сначала прочитайте полную инструкцию: в ней описаны доступ извне, backup и расположение данных.

Подготовить настройкиcp .env.example .env
Запуститьdocker compose up -d
Проверить состояниеdocker compose ps

Пошаговая инструкция

1. Проверьте сервер

Нужен Ubuntu 22.04+ или Debian 12+ с Docker Engine и Docker Compose v2.24+. Выделите 1 ядро, 128 МБ RAM и 1 ГБ локального диска; 256 МБ RAM оставят запас для новых проверок и истории. Рецепт использует SQLite и не требует отдельной БД.

docker --version
docker compose version

2. Подготовьте файлы и переменные

Положите compose.yaml, .env.example, config/, backup.sh, restore.sh и proxy/ в отдельный каталог:

mkdir -p ~/services/gatus
cd ~/services/gatus
cp .env.example .env
chmod 600 .env

В .env лежат закреплённая GATUS_VERSION, локальный GATUS_PORT, имя Docker volume, GATUS_CONFIG_DIR и данные для входа. Оставьте каталог конфигурации равным ./config, если backup не должен читать его в другом месте. Замените change-me. Gatus хранит bcrypt-хеш, а не пароль; эти команды создадут пароль и Base64-хеш для GATUS_PASSWORD_BCRYPT_BASE64:

password="$(openssl rand -base64 32)"
printf 'Password: %s\n' "$password"
htpasswd -bnBC 9 "" "$password" | tr -d ':\n' | base64 -w0
printf '\n'

В Ubuntu и Debian htpasswd входит в пакет apache2-utils. Сохраните показанный пароль в менеджере паролей: восстановить его из хеша в .env нельзя.

Цели находятся в config/config.yaml. Встроенная самопроверка доказывает работу расписания, условий, SQLite и панели до добавления ваших сервисов. Секреты провайдеров уведомлений храните в .env, передавайте через compose.yaml и ссылайтесь на имена переменных из конфигурации вместо записи токенов в YAML.

3. Запустите контейнер на VPS

docker compose pull
docker compose up -d
docker compose ps
curl http://127.0.0.1:8080/health

Последняя команда должна вывести {"status":"UP"}. В образе нет Docker healthcheck, поэтому после запуска проверьте и /health, и завершённый результат проверки на панели.

4. Откройте панель и добавьте проверки

До настройки reverse proxy используйте SSH-туннель:

ssh -L 8080:127.0.0.1:8080 user@server.example

Откройте http://localhost:8080, войдите с данными из .env, дождитесь зелёной Gatus health и откройте её условия.

Добавьте цель в config/config.yaml, например:

  - name: Public website
    group: Production
    url: https://www.example.com/
    interval: 1m
    conditions:
      - "[STATUS] == 200"
      - "[CERTIFICATE_EXPIRATION] > 48h"
      - "[RESPONSE_TIME] < 1000"

Выполните docker compose restart gatus и прочитайте логи. Начните с HTTP- статуса, сертификата и мягкого ограничения времени ответа; ужесточайте его после наблюдения за обычными значениями. Зелёная HTTP-проверка доказывает только этот запрос, а не работу всех функций целевого приложения.

Локальная сеть

Сохраните localhost-bind и используйте SSH-туннель. Если панель нужна в доверенной LAN, замените 127.0.0.1 в compose.yaml на LAN-адрес сервера, например 192.168.1.10, и закройте порт 8080 на внешнем интерфейсе. Не используйте 0.0.0.0 только ради удобства.

Домен и HTTPS

Примеры в proxy/ направляют status.example.com на локальный порт. Замените домен своим. Caddy получит сертификат автоматически, Nginx ожидает файлы Certbot, а Traefik использует resolver letsencrypt. Если Traefik запущен в контейнере, замените 127.0.0.1 на адрес host gateway, доступный из него.

Basic Auth остаётся включённым за proxy. Gatus поддерживает OIDC, но перенос входа в identity provider требует client secret и осознанной правки блока security; не включайте оба режима случайно.

Резервная копия

chmod +x backup.sh restore.sh
./backup.sh

Скрипт останавливает Gatus, чтобы база SQLite, WAL и shared-memory файлы образовали согласованный набор, затем архивирует volume вместе с config/ и снова запускает контейнер. Храните зашифрованную копию вне сервера: архив содержит адреса проверок и может содержать настройки уведомлений.

Восстановление

Восстановление заменяет и базу, и конфигурацию:

./restore.sh ./backups/gatus-YYYYMMDDTHHMMSSZ.tar.gz
docker compose ps

Скрипт проверяет архив и сначала снимает страховочную копию текущего состояния. После запуска проверьте /health, войдите и убедитесь, что вернулись ожидаемые цели, история и объявления.

Обновление

Сделайте backup, прочитайте release notes, замените GATUS_VERSION в .env и пересоздайте контейнер:

docker compose pull
docker compose up -d
docker compose logs --tail=100 gatus

Проверьте /health и дождитесь свежего результата каждой цели. Gatus применяет изменения схемы SQLite при старте; один HTTP-ответ не доказывает, что прежняя история читается.

Откат

Верните прежнюю GATUS_VERSION в .env и выполните docker compose pull && docker compose up -d. Если старый образ не читает изменённую новой версией БД, оставьте прежнюю версию выбранной и восстановите архив до обновления.

Полное удаление

docker compose down останавливает Gatus и сохраняет БД. Для полного удаления:

docker compose down
docker volume rm gatus-data
rm -rf ~/services/gatus

Источники: официальный запуск в Docker, справочник конфигурации, хранилище и безопасность.

Сообщить о проблеме с рецептом

Рассказать, как прошло на вашем сервере

Откроется предзаполненный issue на GitHub. Нужен аккаунт GitHub; после отправки сообщение будет публичным.

Диагностика

Gatus сразу завершается

Gatus отклоняет неверную конфигурацию вместо запуска только с её частью:

docker compose ps --all
docker compose logs --tail=200 gatus

Частые причины — отступы YAML, повтор одной простой настройки в нескольких файлах и неверное условие. Исправьте config/config.yaml и снова выполните docker compose up -d.

/health работает, но ни одна проверка не зелёная

/health доказывает только то, что Gatus отвечает. Посмотрите результат и логи:

read -r -p 'Имя пользователя: ' GATUS_USERNAME
read -r -s -p 'Пароль: ' GATUS_PASSWORD
curl --user "${GATUS_USERNAME}:${GATUS_PASSWORD}" \
  http://127.0.0.1:8080/api/v1/endpoints/statuses
docker compose logs --tail=200 gatus

Повторите DNS-запрос или HTTP-запрос с самого сервера. Цель, которая работает в браузере, может быть закрыта от сервера, разрешаться там во внутренний адрес или отдавать другой сертификат.

Порт 8080 занят

Измените GATUS_PORT в .env и пересоздайте контейнер:

docker compose up -d

Также замените upstream-порт reverse proxy. Оставьте bind на 127.0.0.1.

Панель отвечает 401

Используйте текущий GATUS_USERNAME из .env и обычный пароль, чей хеш записан в GATUS_PASSWORD_BCRYPT_BASE64. После замены пересоздайте контейнер, а не только перезапустите процесс:

docker compose up -d --force-recreate

Не удаляйте блок security, чтобы вернуть доступ на публичном сервере. Задайте новые данные и сначала проверьте их через localhost.

После перезапуска исчезает история

Проверьте SQLite по адресу /data/data.db и ожидаемый volume:

docker compose config
docker volume inspect gatus-data

Если storage.type стал memory, новые результаты не сохранялись. Верните конфигурацию и базу из backup до удаления старого volume.

Официальные источники

Последний релиз: 2026-05-19 · GitHub Stars: 12 128 · данные проверены 22 сент. 2026 г., 05:47 UTC

Отказ от ответственности

Fossary — независимый информационный каталог, не связанный с разработчиками представленных приложений. Мы собираем сведения из открытых источников и проверяем опубликованные рецепты, но не разрабатываем, не распространяем и не контролируем эти приложения.

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