- Added new health worker URL and token fields to the AppConfig interface, allowing for Cloudflare Worker integration. - Updated health check routes to utilize the new worker configuration, enabling dynamic health checks via Cloudflare Workers. - Introduced a health log endpoint for services, providing detailed logs of health probe results. - Enhanced health check service logic to support both local and Cloudflare Worker providers, improving flexibility in health monitoring. - Updated UI components to reflect changes in health check provider settings and display relevant health information. This commit significantly improves the health check management capabilities, allowing for better integration with Cloudflare Workers and enhanced logging features.
5.6 KiB
Cloudflare Domain Manager
Wiki home — synced from repository on main when this file changes.
UI
Design contract (Frame surface, ReUI kit): docs/ui-design-contract.md
Overview
Manage Cloudflare zones, DNS records, domain groups, and TLS certificate expiry from a single UI.
Configuration
| Variable | Description |
|---|---|
CLOUDFLARE_API_TOKEN |
API token with Zone.DNS permissions |
DATABASE_URL |
SQLite path (sqlite:/data/app.db) |
JWT_SECRET |
JWT signing secret |
ADMIN_USERNAME |
Admin username |
ADMIN_PASSWORD_HASH |
Argon2 hash (empty = dev admin/admin) |
LOG_LEVEL |
Уровень логов API (info, debug) |
HEALTH_CHECK_CRON |
Cron для health-check (default 0 */2 * * * *). Переопределяется в Настройки → Health-check. |
HEALTH_DEGRADED_FAILURES |
Ошибок подряд до degraded (default 1). То же в UI. |
HEALTH_DOWN_FAILURES |
Ошибок подряд до down (default 2). То же в UI. |
HEALTH_SUCCESS_RECOVERIES |
Успехов подряд для recovery CHECKING → HEALTHY (default 2). То же в UI. |
HEALTH_LATENCY_WARN_MS |
Латентность-порог для degraded (default 1000). То же в UI. |
HEALTH_WORKER_URL |
URL Worker health-probe (fallback). Переопределяется в Настройки → Health-check. |
HEALTH_WORKER_TOKEN |
Bearer-токен Worker (fallback). В GET /settings не отдаётся целиком. |
Load balancing & health checks
Группа сервисов может иметь общий домен (service_groups.domain). Балансировка и
health-check работают на двух уровнях:
- Общий домен группы — A-записи формируются из IP сервисов группы; режим LB и параметры health-check настраиваются в карточке группы.
- Несколько FQDN на сервис — через
service_bindingsодин сервис может быть привязан к нескольким hostname в разных зонах (уникальность(domain_id, service_id, hostname)). - Привязка сервиса с multi-A — режим LB и health-check настраиваются в карточке сервиса для каждой привязки с несколькими IP; для IP задаются вес/приоритет.
- Ноды — first-class адреса сервиса (
nodes+binding_nodes); IP-пулыservice_ips/service_binding_ipsпишутся dual-write. - Change IP —
POST /api/v1/service-bindings/:id/change-ip(preview + PATCH DNS). - Change Domain — перенос привязок между зонами
POST /api/v1/services/:id/change-domain.
Режимы LB: round_robin, failover, weighted. В Cloudflare free weighted
работает как round_robin (одна A на IP). unknown не считается healthy и
не попадает в пул, пока нет успешных проб; восстановление — UNHEALTHY → CHECKING → HEALTHY
после HEALTH_SUCCESS_RECOVERIES (default 2). Пороги и cron движка задаются в
Настройки → Health-check (env — fallback, пока значения не сохранены в UI).
Local XOR Cloudflare Worker
Провайдер задаётся на привязке (service_bindings.health_check_provider): local
или cloudflare. Одновременно оба не работают.
| Local | Cloudflare Worker | |
|---|---|---|
| Кто пробирует | процесс API CFDM | Worker на edge Cloudflare |
| Планировщик | глобальный cron CFDM | тот же cron вызывает Worker |
| Пороги Slow/Down | Настройки → Health-check | те же |
| Результат | SQLite ip_health_status |
та же SQLite + colo |
| Регионы Health Checks | нет | нет (на Free продукта нет) |
Cloudflare в CFDM — это Worker, не Health Checks API.
Продукт Health Checks на Free-плане недоступен и не используется. Worker
stateless: конфиг и журнал (health_probe_log) живут в SQLite CFDM.
Деплой Worker: workers/health-probe/README.md
(wrangler deploy). URL и токен — Настройки → Health-check. Если Worker не
задан, cloudflare-цели не пробируются как Local.
Reconcile DNS запускается cron-задачей health-check. Free Workers ≈ 100k
запросов/сутки; cron раз в 2 мин × число IP должен влезать.
Docker
Один alpine-контейнер (API + SPA + SQLite). Образы cfdm и cloudflare-domain-manager — один манифест.
docker pull git.shx.one/denozord/cfdm:latest
# drop-in для прежнего тега:
docker pull git.shx.one/denozord/cloudflare-domain-manager:latest
docker run -d -p 8080:8080 -v cfdm-data:/data \
-e CLOUDFLARE_API_TOKEN=... \
-e JWT_SECRET=... \
git.shx.one/denozord/cfdm:latest
Compose: корневой docker-compose.yml или deploy/compose/docker-compose.example.yaml. Сборка: deploy/docker (bake). Релизы: docs/releasing.md.