quality / commitlint (push) Skipped
CD / update-wiki (push) Failing after 8s
quality / changes (push) Successful in 7s
quality / docker-check (push) Skipped
quality / web (push) Successful in 1m8s
quality / api (push) Successful in 41s
CD / quality (push) Successful in 2m0s
CD / publish (push) Failing after 11m24s
- Removed Dockerfile and Dockerfile.test as part of the transition to a pre-built image. - Updated .dockerignore and .gitignore to reflect new build context and ignored files. - Modified docker-compose.yml to use the new image for the application. - Enhanced documentation in AGENTS.md and README.md to include CI/CD details and release process. - Added new dependencies for commit linting and semantic release in package.json and pnpm-lock.yaml. This commit streamlines the Docker setup and improves the CI/CD workflow with Gitea Actions.
62 lines
3.1 KiB
Markdown
62 lines
3.1 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_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
|
||
|
||
Один 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).
|