Discourse-health-check: однократный CLI-обзор вашего сервера Discourse

Небольшой bash-скрипт, который я создал для своего форума и который предоставляет быстрый обзор состояния сервера Discourse. Делюсь им с теми, кому такая краткая сводка может быть полезна.

Проверяет системные ресурсы: Docker, сервисы Discourse (Postgres, Redis, Nginx, Unicorn, Sidekiq), актуальность резервных копий, TLS и базовые параметры безопасности. В конце выводится итоговый статус (пройдено / предупреждение / критическая ошибка) и код выхода, подходящий для использования в cron.

Установка

curl -O https://raw.githubusercontent.com/haydenjames/discourse-health-check/main/discourse-health-check.sh
chmod +x discourse-health-check.sh
sudo ./discourse-health-check.sh

Исходный код, параметры и пример настройки cron в файле README:


Новая версия v1.0.4:

Два исправления:

  1. В Discourse Unicorn был заменён на Pitchfork (по умолчанию в версии 2026.2, полностью удалён в 2026.4), поэтому проверка веб-сервера теперь обнаруживает оба варианта. Спасибо @RGJ за то, что обратил на это внимание ещё в июне.

  2. Проверки сервисов сопоставляли свои собственные командные строки. pgrep -f <name>, из-за чего pgrep находил сам себя, и проверка считалась пройденной независимо от того, запущен ли сервис на самом деле. Sidekiq отчётовал о состоянии «работает» безоговорочно с версии 1.0.0. Он мог быть остановлен, а вы всё равно получали зелёную отметку и код выхода 0 от cron. Та же причина, что и ложное срабатывание для Puma в версии 1.0.1, которое оказалось не исправлением, а переименованием.

9 лайков

Discourse не использует Puma.

3 лайка

Единорог. Исправлено, спасибо.

1 лайк

Сейчас только «Пичфорк»!!

2 лайка

Отличное предложение, спасибо!

Для резервного копирования рекомендую проверить последнюю резервную копию, чтобы убедиться, что она была прочитана после создания. Это косвенный способ проверить, была ли она скопирована за пределы сайта. (Или, если не проверять только последнюю, возможно, стоит проверить все.)

Если ни одна резервная копия не была скопирована за пределы сайта в течение недели, это повод для предупреждения.

(Думаю, можно вычесть stat -c %Y из stat -c %X или просто сравнить их. Они будут отличаться, если файл резервной копии был прочитан после создания.)

5 лайков

@Ed_S Отличное предложение. Добавлено в версии 1.0.2. Сравнивает atime и mtime в последней резервной копии и выводит предупреждение, если файл не читался с момента записи, при этом проверка noatime позволяет корректно пропускать случаи, когда atime ненадёжен. Указал вас как автора, спасибо!

4 лайка