feat(health): деплоить probe-Worker из CFDM и опрашивать цели с edge
quality / changes (push) Successful in 9s
quality / commitlint (push) Skipped
quality / docker-check (push) Skipped
CD / update-wiki (push) Successful in 6s
quality / web (push) Successful in 1m4s
quality / api (push) Successful in 54s
CD / quality (push) Successful in 2m17s
CD / publish (push) Successful in 2m21s

Worker сам ходит на origin по Cron Trigger; CFDM кладёт цели в KV и забирает результаты без POST /probe.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-08-19 17:22:07 +07:00
co-authored by Cursor
parent 2c92e78b24
commit 4c4908558b
38 changed files with 1941 additions and 555 deletions
+15 -13
View File
@@ -14,7 +14,7 @@ Manage Cloudflare zones, DNS records, domain groups, and TLS certificate expiry
| Variable | Description |
|----------|-------------|
| `CLOUDFLARE_API_TOKEN` | API token with Zone.DNS permissions |
| `CLOUDFLARE_API_TOKEN` | API token: Zone.DNS **и** для Worker — Account Workers Scripts Write + Workers KV Storage Write |
| `DATABASE_URL` | SQLite path (`sqlite:/data/app.db`) |
| `JWT_SECRET` | JWT signing secret |
| `ADMIN_USERNAME` | Admin username |
@@ -25,8 +25,6 @@ Manage Cloudflare zones, DNS records, domain groups, and TLS certificate expiry
| `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
@@ -58,22 +56,26 @@ health-check работают на двух уровнях:
| | Local | Cloudflare Worker |
|---|---|---|
| Кто пробирует | процесс API CFDM | Worker на edge Cloudflare |
| Планировщик | глобальный cron CFDM | тот же cron вызывает Worker |
| Кто пробирует | процесс API CFDM | Worker на edge (Cron Trigger) |
| Планировщик | глобальный cron CFDM | cron Worker + ingest KV в CFDM |
| Пороги Slow/Down | Настройки → Health-check | те же |
| Результат | SQLite `ip_health_status` | та же SQLite + `colo` |
| Результат | SQLite `ip_health_status` | та же SQLite + `colo` из KV |
| Регионы Health Checks | нет | нет (на Free продукта нет) |
**Cloudflare в CFDM — это Worker**, не [Health Checks API](https://developers.cloudflare.com/api/resources/healthchecks).
Продукт Health Checks на Free-плане недоступен и **не используется**. Worker
stateless: конфиг и журнал (`health_probe_log`) живут в SQLite CFDM.
Продукт Health Checks на Free-плане недоступен и **не используется**.
Деплой Worker: [`workers/health-probe/README.md`](../workers/health-probe/README.md)
(`wrangler deploy`). URL и токен — **Настройки → Health-check**. Если Worker не
задан, cloudflare-цели **не** пробируются как Local.
Worker **сам** опрашивает IP/порты/протоколы (TCP/HTTP, паттерн [UptimeFlare](https://github.com/lyc8503/UptimeFlare): `sockets.opened`, p-limit 5).
CFDM создаёт скрипт через Workers Scripts API, кладёт список целей в KV и читает результаты.
Публичный URL API не нужен. Если Worker/KV не готовы, cloudflare-цели **не** пробируются как Local.
Reconcile DNS запускается cron-задачей `health-check`. Free Workers ≈ 100k
запросов/сутки; cron раз в 2 мин × число IP должен влезать.
Кнопка **Создать / обновить Worker****Настройки → Health-check**. Токен:
Account `Workers Scripts Write` + `Workers KV Storage Write`. Zone DNS недостаточно.
Free: 5 Cron Triggers на аккаунт; KV 1000 writes/сутки (интервал ≥ 2 мин);
≤ 48 целей за тик. Исходник: [`workers/health-probe/`](../workers/health-probe/).
Reconcile DNS запускается cron-задачей `health-check` после ingest KV.
## Docker