app/– golang веб-приложениеmonitor/– bash‑скрипт, для мониторинга веб-приложенияansible/– инвентарь и рольweb-app, которая ставит/удаляет приложение и мониторинг
Переменные окружения:
APP_PORT(по умолчанию8080) – порт HTTP.HEALTH_FAIL_RATE(0…1, по умолчанию0) – вероятность искусственно «уронить»/healthz.HEALTH_MAX_DELAY_MS(по умолчанию0) – максимальная задержка ответа/healthzв миллисекундах.
Переменные окружения:
SERVICE_NAME– systemd‑юнит, который нужно перезапускать, напримерweb-app.service.CHECK_URL– URL health‑чека, напримерhttp://127.0.0.1:8080/healthz.CHECK_TIMEOUT,RETRY_COUNT,RETRY_DELAY,CHECK_HTTP_CODE– таймаут curl, число попыток, пауза между ними и ожидаемый HTTP‑код.
Скрипт прерывается после успешного ответа; если все попытки исчерпаны, он рестартует указанный юнит и логирует результат.
Роль ansible/roles/web-app управляет установкой:
- Обновите
ansible/inventory/hosts.yml, указав свои хосты. - Настройте
ansible/inventory/group_vars/all.yml. Основные параметры:web_app_*,web_app_monitoring_*
- Запустите плейбук:
cd ansible
ansible-playbook -i inventory/hosts.yml site.ymlПри состоянии present роль:
- Скачивает архив релиза с
https://github.com/jeorji/app-watchdog/releases. - Распаковывает его в
/opt/<имя сервиса>и рендерит.envс параметрами здоровья. - Устанавливает systemd‑юнит для приложения (
app.service.j2). - Разворачивает службу и таймер (
monitor.service.j2,monitor.timer.j2), которые гоняютmonitor.sh.
Переключение в absent удаляет юниты и каталоги, возвращая хост в исходное состояние.
Файл .github/workflows/release.yml автоматизирует публикацию релизов. Он запускается при пуше тега v* и выполняет:
buildjob — сборка бинарникаweb-app, упаковка вapp-<os>-<arch>.tar.gz.releasejob — загрузка артефактов, генерация SHA256‑сумм, формирование GitHub Release с тарболами,monitor.shиchecksums.txt.
Чтобы создать релиз:
git tag vX.Y.Z
git push origin vX.Y.ZЧерез пару минут в разделе Releases появятся свежие артефакты, которые использует Ansible.