- Introduced origin health check routes and integrated them into the application. - Updated health check configuration to include success recovery thresholds. - Expanded error handling with new error codes for health check failures. - Added new service routes for managing health checks, including creation and listing. - Improved health check service logic to track consecutive successes and failures. This commit enhances the health check capabilities, providing better monitoring and management of service health.
3.7 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 */30 * * * * *) |
HEALTH_DEGRADED_FAILURES |
Ошибок подряд до degraded (default 1) |
HEALTH_DOWN_FAILURES |
Ошибок подряд до down (default 2) |
HEALTH_SUCCESS_RECOVERIES |
Успехов подряд для recovery CHECKING → HEALTHY (default 2) |
HEALTH_LATENCY_WARN_MS |
Латентность-порог для degraded (default 1000) |
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). Reconcile DNS запускается cron-задачей
health-check. Cloudflare Health Checks — официальный API зоны, Workers не используются.
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.