- Added functionality to toggle individual IPs for services, allowing for dynamic management of IP health status. - Enhanced the health check configuration in the UI, enabling users to set parameters directly from the settings page. - Updated service views to include IP health tracking, improving visibility into the status of each IP associated with a service. - Refactored relevant components to support the new IP toggling feature, ensuring a seamless user experience. This commit significantly enhances the health management capabilities of services, providing users with more control over IP configurations and health monitoring.
4.0 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. |
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).
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.