Denozordec 6008cd763a
quality / commitlint (push) Skipped
CD / update-wiki (push) Successful in 8s
quality / changes (push) Successful in 5s
quality / api (push) Skipped
quality / docker-check (push) Skipped
quality / web (push) Successful in 58s
CD / quality (push) Successful in 1m6s
CD / publish (push) Successful in 1m44s
refactor(health): clean up health check configuration and UI components
- Removed unused imports and alerts related to Cloudflare, Globalping, and Local health checks from the HealthCheckConfigFields component.
- Simplified the logic for rendering health check sources and improved layout responsiveness by adding min-width classes.
- Introduced new Cloudflare and Globalping SVG icons for better visual representation in the HealthSourceTiles component.
- Refactored the TilePanel component to enhance its structure and ensure proper handling of minimum width for child elements.

This commit streamlines the health check configuration UI, improving maintainability and user experience.
2026-08-19 19:37:36 +07:00

Cloudflare Domain Manager

Self-hosted service for managing domains, DNS records, and SSL certificates via Cloudflare API.

Features

  • Domain and DNS record management (hybrid sync with Cloudflare)
  • Domain groups (local / vpn / external) and service tags
  • Service groups with common FQDN and DNS-based load balancing (Round Robin / Failover / Weighted)
  • Health checks (TCP / HTTP) with automatic DNS reconciliation on status change
  • SSL certificate expiry monitoring
  • React UI with TanStack Router & Query
  • Single Docker container deployment

Quick start

cp .env.example .env
# Edit CLOUDFLARE_API_TOKEN, JWT_SECRET

docker compose up -d

Open http://localhost:8080 — default login admin / admin (dev only).

Stack

  • Backend: Node.js 22, Fastify 5, Drizzle ORM, SQLite (apps/api)
  • Shared: Zod schemas (packages/shared), DB layer (packages/db)
  • Frontend: pnpm monorepo (apps/web + packages/ui), React, Vite, TanStack Router/Query/Table, shadcn/ui (base-nova), Recharts
  • CI: Gitea Actions (docs/releasing.md) — quality gates + semantic-release + bake (cfdm / cloudflare-domain-manager)

Development

pnpm install
pnpm --filter @cfdm/shared build
pnpm --filter @cfdm/db build

# API + SQLite (:8080)
pnpm --filter @cfdm/api dev

# Frontend (:5173, proxies /api → :8080)
pnpm --filter web dev
pnpm turbo build
pnpm turbo test

shadcn CLI: cd apps/web && pnpm dlx shadcn@latest add <component>

Documentation

See docs/Home.md, docs/releasing.md and CONTRIBUTING.md.

Load balancing & health checks

Группа сервисов может иметь общий домен (service_groups.domain). На общем домене и на привязках сервиса с несколькими A-записями включается балансировка и health-check:

  • Режимы LB: round_robin (по одной A на каждый up-IP), failover (A только для up-IP с минимальным приоритетом; бэкапы подключаются при падении primary), weighted (веса учитываются в БД; в Cloudflare free отображается как Round Robin, т.к. CF API не допускает дубликаты (name, type, content) A-записей — для истинного weighted нужен CF Load Balancer).
  • Health-check: TCP connect или HTTP (настраиваемый порт, путь, ожидаемый статус, интервал, таймаут). Результаты хранятся в ip_health_status (up / degraded / down / unknown) и опрашиваются UI с polling 10с.
  • Reconcile: при смене статуса IP cron перезаписывает A-записи в Cloudflare, оставляя только активные по политике LB. Реакция = TTL A-записи (ttl=1 proxied — минимальный).

Env для health-check:

Variable Default Description
HEALTH_CHECK_CRON */30 * * * * * Cron выражение для запуска проверок (каждые 30с)
HEALTH_DEGRADED_FAILURES 1 Порог последовательных ошибок → статус degraded
HEALTH_DOWN_FAILURES 2 Порог последовательных ошибок → статус down (IP убирается из DNS)
HEALTH_LATENCY_WARN_MS 1000 Латентность выше порога → degraded даже при успешном connect
S
Description
No description provided
Readme
115 MiB
v1.25.4
Latest
2026-09-03 20:46:37 +07:00
Languages
TypeScript 98.5%
JavaScript 0.7%
CSS 0.3%
Shell 0.2%
HCL 0.2%
Other 0.1%