Initial DevOpsDash — FastAPI + Alpine.js dashboard for DevOpsMCP
Some checks failed
Build and push DevOpsDash / build (push) Has been cancelled
Some checks failed
Build and push DevOpsDash / build (push) Has been cancelled
- Taskz kanban board (create/edit tasks, findings, status/priority) - Worklog timeline + standup summary (proxied from DevOpsMCP MCP API) - Knowledge browser (ADRs, memories, knowledge catalog files) - FastAPI backend reading same Redis as DevOpsMCP - Read-only bind-mount for DevOpsMCP data directory (/data) - Nomad job spec (dash.i80.dk, Traefik TLS, host volume read-only) - Gitea Actions CI → registry.i80.dk/gitea/devops-dash:latest
This commit is contained in:
71
README.md
Normal file
71
README.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# DevOpsDash
|
||||
|
||||
Visual dashboard for [DevOpsMCP](https://devops-mcp.i80.dk) — built as a **separate service** so updates to DevOpsMCP never break the dashboard.
|
||||
|
||||
Live at: **https://dash.i80.dk**
|
||||
|
||||
## Features
|
||||
|
||||
- **Taskz** — Kanban board for all task boards (create/update tasks, add findings, change status/priority)
|
||||
- **Worklog** — Git commit timeline proxied from DevOpsMCP (egmont/personal/all, configurable date range)
|
||||
- **Standup** — AI-generated standup summary via DevOpsMCP
|
||||
- **Knowledge** — Browse ADRs, memories, and knowledge catalog files
|
||||
|
||||
## Stack
|
||||
|
||||
- **Backend**: FastAPI (Python 3.11)
|
||||
- **Frontend**: Alpine.js + Tailwind CSS (CDN, no build step)
|
||||
- **Data**: Read-only access to DevOpsMCP's Redis + data directory (bind-mount)
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
DevOpsMCP (devops-mcp.i80.dk) DevOpsDash (dash.i80.dk)
|
||||
Redis ◄────────────────────────────── read same Redis
|
||||
/opt/devops-mcp/data (rw) ─────────► /data (read-only bind-mount)
|
||||
MCP HTTP API ──────────────────────── worklog proxy calls
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
# Copy .env.example
|
||||
cp .env.example .env
|
||||
# Edit DATA_DIR to point at local DevOpsMCP data directory
|
||||
|
||||
# Install dependencies
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Run
|
||||
python -m uvicorn app.main:app --reload --port 8001
|
||||
```
|
||||
|
||||
Open http://localhost:8001
|
||||
|
||||
## Deployment
|
||||
|
||||
```bash
|
||||
# Build + push image
|
||||
docker build -t registry.i80.dk/gitea/devops-dash:latest .
|
||||
docker push registry.i80.dk/gitea/devops-dash:latest
|
||||
|
||||
# Deploy to Nomad
|
||||
# First: ensure the host volume exists on autobox.i80.dk
|
||||
# See devops-mcp.nomad for the DevOpsMCP side bind-mount setup
|
||||
|
||||
scp devops-dash.nomad autobox.i80.dk:/tmp/
|
||||
ssh autobox.i80.dk 'NOMAD_ADDR=https://nomad.i80.dk:4646 nomad job run /tmp/devops-dash.nomad'
|
||||
```
|
||||
|
||||
## Nomad Host Volume (one-time setup on autobox.i80.dk)
|
||||
|
||||
Add to `/etc/nomad.d/client.hcl`:
|
||||
|
||||
```hcl
|
||||
host_volume "devops-mcp-data" {
|
||||
path = "/opt/devops-mcp/data"
|
||||
read_only = false
|
||||
}
|
||||
```
|
||||
|
||||
Then restart Nomad. The DevOpsDash job mounts the same volume as read-only.
|
||||
Reference in New Issue
Block a user