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

45 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-записью (она прогревается).