Files
Denozordec dd3c378b5f
quality / commitlint (push) Skipped
CD / update-wiki (push) Successful in 6s
quality / changes (push) Successful in 5s
quality / docker-check (push) Skipped
quality / web (push) Successful in 56s
quality / api (push) Successful in 41s
CD / quality (push) Successful in 1m47s
CD / publish (push) Successful in 33s
Update CDN Manager: Add integration for new settings route, enhance permissions for nodes and aliases, and improve Docker configuration documentation. Update UI components for better navigation and user experience.
2026-09-04 13:11:33 +07:00

5.6 KiB
Raw Permalink Blame History

Запуск CDN Manager на сервере (Docker CLI)

Без Traefik (plain docker run / простой Compose). Production HTTPS: deploy-traefik.md.

Traefik (кратко)

mkdir -p /opt/cdnmanager/data
cp deploy/docker-compose.traefik.yml /opt/cdnmanager/docker-compose.yml
cp deploy/env.traefik.example /opt/cdnmanager/.env
docker login git.shx.one
cd /opt/cdnmanager && docker compose pull && docker compose up -d

Один alpine-контейнер: API + SPA + SQLite. Образы cdnmanager и cdn-manager — один манифест (drop-in alias).

Registry по умолчанию: git.shx.one/denozord/… (подставьте свой owner при необходимости).

Требования

  • Docker Engine 24+ (или Docker Desktop)
  • Cloudflare API token: Zone DNS Edit + Zone Read
  • Для SSO: auth-portal с тем же JWT_SECRET / AUTH_ISSUER и origin CDNManager в RETURN_TO_ALLOWLIST

1. Pull образа

docker pull git.shx.one/denozord/cdnmanager:latest

# эквивалент (тот же образ):
docker pull git.shx.one/denozord/cdn-manager:latest

Тег релиза: vX.Y.Z или X.Y.Z (см. Gitea Releases).

2. Запуск одной командой (docker run)

Dev / без portal (локальный admin)

docker volume create cdnmanager-data

docker run -d \
  --name cdnmanager \
  --restart unless-stopped \
  -p 8080:8080 \
  -v cdnmanager-data:/data \
  -e DATABASE_URL=sqlite:/data/app.db \
  -e STATIC_DIR=/app/static \
  -e SERVER_PORT=8080 \
  -e AUTH_REQUIRED=false \
  -e JWT_SECRET=change-me-in-production \
  -e ADMIN_USERNAME=admin \
  -e CLOUDFLARE_API_TOKEN=cf_xxxxxxxx \
  git.shx.one/denozord/cdnmanager:latest

Логин UI: admin / admin (если ADMIN_PASSWORD_HASH пуст — dev default).

Production + auth-portal SSO

docker volume create cdnmanager-data

docker run -d \
  --name cdnmanager \
  --restart unless-stopped \
  -p 8080:8080 \
  -v cdnmanager-data:/data \
  -e DATABASE_URL=sqlite:/data/app.db \
  -e STATIC_DIR=/app/static \
  -e SERVER_PORT=8080 \
  -e AUTH_REQUIRED=true \
  -e JWT_SECRET='<тот же секрет что у auth-portal>' \
  -e AUTH_JWT_SECRET='<тот же секрет>' \
  -e AUTH_ISSUER=https://auth.shnt.top \
  -e AUTH_PORTAL_URL=https://auth.shnt.top \
  -e AUTH_AUDIT_INGEST_SECRET='<AUDIT_INGEST_SECRET портала>' \
  -e CLOUDFLARE_API_TOKEN=cf_xxxxxxxx \
  -e LOG_LEVEL=info \
  git.shx.one/denozord/cdnmanager:latest

Проверка:

curl -sS http://127.0.0.1:8080/health
# {"status":"ok",…}

Откройте http://<host>:8080 → редирект на auth-portal → после логина handoff на /auth/callback.

3. Docker Compose

Файлы в репозитории:

Создайте .env рядом с compose:

JWT_SECRET=change-me-strong
AUTH_REQUIRED=true
AUTH_JWT_SECRET=change-me-strong
AUTH_ISSUER=https://auth.shnt.top
AUTH_PORTAL_URL=https://auth.shnt.top
AUTH_AUDIT_INGEST_SECRET=change-me-audit
CLOUDFLARE_API_TOKEN=cf_xxxxxxxx
ADMIN_USERNAME=admin
# из корня репозитория или каталога с compose
docker compose pull
docker compose up -d

docker compose ps
docker compose logs -f --tail=100

Остановка:

docker compose down
# данные в volume сохраняются; удалить volume:
# docker compose down -v

4. За reverse proxy (Traefik / Caddy)

Пробросьте HTTPS на контейнер :8080. Пример labels Traefik (Host cdn.shnt.top):

labels:
  - traefik.enable=true
  - traefik.http.routers.cdnmanager.rule=Host(`cdn.shnt.top`)
  - traefik.http.routers.cdnmanager.entrypoints=websecure
  - traefik.http.routers.cdnmanager.tls=true
  - traefik.http.services.cdnmanager.loadbalancer.server.port=8080

На auth-portal добавьте в RETURN_TO_ALLOWLIST: https://cdn.shnt.top.

В Admin → Apps выставьте URL App Switcher для cdn на этот origin.

5. Обновление

docker pull git.shx.one/denozord/cdnmanager:latest
docker stop cdnmanager && docker rm cdnmanager
# затем снова docker run … (тот же volume /data)

Или:

docker compose pull
docker compose up -d

Миграции SQLite применяются при старте API автоматически.

6. Сборка своего образа (опционально)

См. deploy/docker/README.mddocker buildx bake из deploy/docker.

Переменные окружения

Переменная Обязательно Описание
DATABASE_URL да sqlite:/data/app.db
STATIC_DIR да (prod) /app/static — SPA
SERVER_PORT нет default 8080 в образе / 8081 в local .env
CLOUDFLARE_API_TOKEN для sync Zone DNS Edit + Zone Read
AUTH_REQUIRED prod SSO true
AUTH_JWT_SECRET / JWT_SECRET при SSO = portal
AUTH_ISSUER при SSO = portal ISSUER
AUTH_PORTAL_URL при SSO URL UI портала
AUTH_AUDIT_INGEST_SECRET опц. dual-write audit
ADMIN_* только AUTH_REQUIRED=false локальный admin

Подробнее SSO: integrate-auth-portal.md.