quality / commitlint (push) Skipped
CD / update-wiki (push) Failing after 8s
quality / changes (push) Successful in 5s
quality / docker-check (push) Skipped
quality / web (push) Successful in 50s
quality / api (push) Successful in 41s
CD / quality (push) Successful in 1m40s
CD / publish (push) Successful in 1m33s
- 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.
68 lines
3.7 KiB
Markdown
68 lines
3.7 KiB
Markdown
# 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`](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` — один манифест.
|
||
|
||
```bash
|
||
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`](releasing.md).
|