# Uptime Kuma — self-hosted uptime monitoring + alerting (#75 B6-1). # # Деплоится ОТДЕЛЬНО от main-стека (свой compose-проект `gendesign-uptime`), # по образцу docker-compose.obsidian.yml. НЕ входит в deploy.yml path-фильтры — # main-pipeline (project `gendesign`, -f docker-compose.prod.yml) его НЕ трогает # и НЕ пересоздаёт. Запуск/обновление — вручную (Anton), см. инструкцию ниже. # # docker network create gendesign_shared # один раз, обычно уже создан main-стеком # docker compose -p gendesign-uptime -f docker-compose.uptime.yml up -d # # Caddy в main-стеке маршрутизирует status.gendsgn.ru → uptime-kuma:3001 через # external network gendesign_shared (Caddyfile, блок status.gendsgn.ru). # # WHY отдельный контейнер, а не VPS: issue допускает доп-контейнер. Trade-off # принят сознательно — если упадёт весь VPS, Kuma упадёт вместе с сайтом и не # отправит алерт. Митигируется внешним «watchdog» (healthchecks.io / UptimeRobot # free tier), который пингует https://gendsgn.ru/health извне — см. README-блок # «External watchdog» ниже. Kuma покрывает per-endpoint/SSL/latency-мониторинг # и self-hosted status-page; внешний пинг — last-resort «весь хост лёг». # # Лёгкий: образ ~250 МБ, idle RAM ~80-120 МБ. mem_limit держит его в узде. services: uptime-kuma: image: louislam/uptime-kuma:1 container_name: gendesign-uptime-kuma restart: unless-stopped # expose (НЕ ports) — наружу не публикуем, фронтит Caddy через shared-сеть. # Если нужен прямой доступ для первичной настройки без Caddy — временно # раскомментируй ports ниже (127.0.0.1 only) и ходи через SSH-туннель. expose: - "3001" # ports: # - "127.0.0.1:3001:3001" volumes: # Persistent: SQLite-база Kuma (мониторы, история, настройки, нотификации). - uptime_kuma_data:/app/data healthcheck: # Встроенный extra/healthcheck в образе louislam/uptime-kuma. test: ["CMD", "extra/healthcheck"] interval: 60s timeout: 10s retries: 3 start_period: 30s networks: - shared mem_limit: 256m volumes: uptime_kuma_data: networks: # Та же external-сеть, что у main-стека (Caddy) и obsidian-стека. # Создаётся вне compose: docker network create gendesign_shared shared: external: true name: gendesign_shared