- 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>
2.9 KiB
2.9 KiB
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-записью (она прогревается).