task-board: add stack + elway deploy playbook
stacks/task-board/compose.yaml + .env.example describe the runtime —
image tag is task-board:local (built on the host), 7878 on host maps
to 7878 in container, SQLite lives at /opt/docker/conf/task-board/data/
(bind mount, uid 1000 friendly), homepage auto-card labels under
Toolchain group, on traefik-net like the rest of the fleet.
playbooks/deploy-task-board.yaml is the first real elway playbook —
exercises everything we built tier-1 + tier-2 idempotency for:
- `creates:` on mkdir + first-time clone + compose dir + data dir
- `when:` to chown /opt/docker/build only if it came up root-owned
- `when:` to seed .env only if one doesn't already exist (never
clobbers user edits on rerun)
- `changed_when:` on the `git reset --hard` step so repeat runs
against the same ref report `ok` instead of `changed`
- `changed_when: "false"` on every verify step (they attest, not
change)
- `upload:` with mode for compose.yaml + .env
Post-up the playbook polls /api/health for 30s before handing off to
the verify phase, so verification doesn't race the healthcheck's
start_period. Verify covers: /api/health 200, /api/tasks shape, /mcp
reachable, container on traefik-net.
Prereqs documented in the playbook header: Docker + compose plugin,
traefik-net network, git SSH access to gitea from the target host.
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
# task-board
|
||||
|
||||
MCP + web dashboard that shows what the assistant is working on. Green
|
||||
(active) / Red (waiting) / Grey (dormant) cards with comment streams.
|
||||
|
||||
**Server:** ana-docker
|
||||
**Port:** 7878 (configurable via `.env`)
|
||||
**Upstream repo:** [vh/task-board](https://gitea.phasefinal.com/vh/task-board)
|
||||
**Image:** `task-board:local` — built on the host from the git repo by
|
||||
the deploy playbook. Not pulled from a registry.
|
||||
|
||||
## Deploy
|
||||
|
||||
Via elway — see `playbooks/deploy-task-board.yaml` in the eshpfi-management
|
||||
root. The playbook owns the full flow: clone/update the source repo,
|
||||
`docker build`, install compose + seed .env, bring up, verify health.
|
||||
|
||||
```bash
|
||||
# First deploy (or update to latest main)
|
||||
scripts/elway ana-docker --playbook playbooks/deploy-task-board.yaml
|
||||
|
||||
# Pin to a specific ref (tag, branch, or commit SHA)
|
||||
scripts/elway ana-docker --playbook playbooks/deploy-task-board.yaml --var ref=v0.1.0
|
||||
```
|
||||
|
||||
## Wiring into Claude Code
|
||||
|
||||
After deploy, add to `~/.claude/settings.json` (user-level) or `.mcp.json`
|
||||
(project-level):
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"task-board": {
|
||||
"type": "http",
|
||||
"url": "http://10.250.50.70:7878/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Assistant gains four tools (`task_start`, `task_update`, `task_wait`,
|
||||
`task_complete`). Web UI at `http://10.250.50.70:7878/`.
|
||||
|
||||
## Path layout (on ana-docker)
|
||||
|
||||
| Host path | Container path | Purpose | Restic? |
|
||||
|---|---|---|---|
|
||||
| `/opt/docker/build/task-board/` | — | git checkout used as docker build context | excluded |
|
||||
| `/opt/docker/compose/task-board/` | — | compose.yaml + .env | included (via `/opt/docker`) |
|
||||
| `/opt/docker/conf/task-board/data/` | `/app/data` | SQLite (`tasks.db`) | **included** |
|
||||
Reference in New Issue
Block a user