diff --git a/Home.md b/Home.md index 8b7bd78..7d2df80 100644 --- a/Home.md +++ b/Home.md @@ -1 +1,54 @@ -Добро пожаловать в вики. \ No newline at end of file +# 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_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 задаются вес/приоритет. + +Режимы LB: `round_robin`, `failover`, `weighted`. В Cloudflare free `weighted` +работает как `round_robin` (одна A на IP), веса хранятся в БД для будущих расширений +и отображения в UI. Reconcile DNS запускается cron-задачей `health-check` при смене +статуса IP (`up` / `degraded` / `down` / `unknown`); `down`-IP убирается из A-записей. + +## Docker + +```bash +docker pull git.shts.su/denozord/cloudflare-domain-manager:latest +docker run -d -p 8080:8080 -v cfdm-data:/data \ + -e CLOUDFLARE_API_TOKEN=... \ + -e JWT_SECRET=... \ + git.shts.su/denozord/cloudflare-domain-manager:latest +```