Files
board-viewer/.tasks/board-viewer-cron-deploy.md
vitya 27465089b5 promote: workshop/board-viewer brainstorm → concepts + 5 tasks
- concepts/board-viewer.md (design, promoted from .workshop)
- .tasks/STATUS.md + 5 per-task files:
  - board-viewer-pointers (pre-impl, status=ready)
  - board-viewer-gitea-reader (impl, TDD, status=ready)
  - board-viewer-html-render (impl, TDD, blocker=gitea-reader)
  - board-viewer-cron-deploy (impl, infra carve-out, blocker=html-render)
  - board-viewer-review (umbrella, status=blocked)

TDD-mode embedded in impl-tasks per follow tdd-criteria trigger in CLAUDE.md.
MCP write-side workaround per memory reference_projects_meta_resolveTarget_bug.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 08:21:59 +03:00

2.9 KiB
Raw Blame History

board-viewer-cron-deploy

Goal

Деплой статической HTML-доски на VDS под доменом board.kzntsv.site. Periodic regen через systemd timer ~5 мин. Traefik label для роутинга. DNS A-запись. Basic-auth через traefik (не in-app).

TDD posture: под carve-out «infrastructure / declarative» из tdd-criteria. Acceptance проверяется по факту deploy + curl, не unit-тестами. systemd unit-файлы и traefik labels — декларативные конфиги, не код.

Key files

  • (TBD) deploy/board-viewer.service — systemd one-shot unit (runs reader + render → writes to /var/www/board-viewer/)
  • (TBD) deploy/board-viewer.timer — systemd timer (OnUnitActiveSec=5min)
  • (TBD) deploy/docker-compose.yml фрагмент или deploy/traefik-labels.yaml — traefik label для статики
  • (TBD) deploy/README.md — install steps + DNS record requirements
  • (TBD) deploy/auth/htpasswd — basic-auth credentials (gitignored, with .htpasswd.example)

Acceptance criteria

  • DNS board.kzntsv.site → VDS IP (Cloudflare / namecheap / wherever DNS живёт).
  • Traefik route: board.kzntsv.site → static file serving из /var/www/board-viewer/.
  • Basic-auth на traefik (middleware), креды из .htpasswd.
  • systemd timer крутится каждые 5 мин, успешно дёргает reader + render, пишет в /var/www/board-viewer/index.html.
  • Логи systemd видны через journalctl -u board-viewer.service.
  • Health check: curl -u user:pass https://board.kzntsv.site/ → HTML с актуальной доской.
  • README.md описывает install steps (для disaster-recovery: «как поднять с нуля на новой машине»).

Decisions log

  • 2026-05-22: task создан промоушеном; carve-out из TDD под инфра (declarative configs).
  • 2026-05-22: auth = traefik basic-auth, не in-app (фиксировано в дизайне).

Open questions

  • Хост: VDS Rusonyx (тот, где уже Gitea + traefik) или отдельная машина? — VDS, рядом с git.kzntsv.site (см. дизайн).
  • Multi-user basic-auth или single creds? — пока single, поскольку single-user проект.
  • Rate-limit на Gitea API: 5-мин тик * N репо * M файлов — оценить, не упрётся ли. Gitea дефолт ~60 req/min anon, токенизированный сильно выше — должно хватить с запасом.

Completed steps

  • (фиксируется при выполнении)

Notes

Зависит от board-viewer-html-render — нужен артефакт для деплоя (хотя бы placeholder). Можно стартовать параллельно с DNS-записью (она прогревается).