Internes Project-Management-Tool für ToolCTRL — ergänzend zu Plane (Tickets) und Outline (Doku). Umfasst Puls-Übersicht, Tagesrhythmus (Lock-in + Reflexion), Bereichs-Detail-Views (Entwicklung/Vertrieb/Marketing), Pflicht-Minimum-Check und Blocker-Lifecycle gemäß Projektmanagement-Leitfaden v3.0. Stack: pnpm-Monorepo · Vite + React 18 + Tailwind · Fastify + tRPC v11 + Drizzle ORM · Postgres 16 · Authentik OIDC (Phase 2, Dev-Auto-Login aktiv). Planungs-Artefakte unter _bmad-output/planning-artifacts/. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.6 KiB
2.6 KiB
Operations Guide — ToolCTRL everythingbutwork
Lokale Entwicklung
# Postgres (Docker)
docker compose -f docker-compose.dev.yml up -d postgres
# Migration anwenden
cp .env.example .env
pnpm --filter @cockpit/db migrate:up
# API und Web
pnpm --filter api dev # :3000
pnpm --filter web dev # :5173 (proxy /api+/trpc → :3000)
Authentik-Setup (Story 1.3)
- In Authentik (auth.tool-ctrl.de) als Admin einloggen.
- Providers → Create → OAuth2/OpenID Provider
- Name:
cockpit - Authorization flow:
default-provider-authorization-explicit-consent - Client type:
Confidential - Client ID + Secret automatisch generieren lassen, in
.envübertragen. - Signing key:
authentik Self-signed Certificate - Redirect URIs:
https://cockpit.tool-ctrl.de/api/auth/callback(Prod),http://localhost:3000/api/auth/callback(Dev)
- Name:
- Applications → Create
- Name:
everythingbutwork - Slug:
cockpit - Provider:
cockpit - Launch URL:
https://cockpit.tool-ctrl.de/
- Name:
.env-Variablen ausfüllen:AUTHENTIK_ISSUER=https://auth.tool-ctrl.de/application/o/cockpit/ AUTHENTIK_CLIENT_ID=<aus Authentik> AUTHENTIK_CLIENT_SECRET=<aus Authentik>- Gruppen-Mapping (OQ-1) wird im API-Code per
AUTHENTIK_GROUP_TO_AREA-Variable umgesetzt (Erweiterung in späterer Story).
Production-Deployment
# Auf der ToolCTRL-Infra:
git pull
docker compose pull
docker compose build
docker compose up -d
# Migration:
docker compose exec api node -e "import('@cockpit/db/client').then(async ({ createDbClient }) => { /* migrate via drizzle-kit in CI */ })"
# Alternativ direkt via drizzle-kit von außen mit Production-DATABASE_URL.
Backups (Story 6.3)
Tägliches pg_dump via Cron-Endpoint POST /internal/cron/pg-dump-backup mit Bearer-Token.
14 Tage Retention. Restore-Drill quartalsweise.
Restore-Anleitung
- API stoppen:
docker compose stop api - Backup aus
/backupsauswählen. - Restore in temporäre DB:
docker compose exec postgres pg_restore -U cockpit -d cockpit_restore /backups/<file>.sql.gz - Smoke-Test:
curl http://localhost:3000/api/health - API wieder starten:
docker compose start api
Healthcheck
GET /api/health liefert:
{ "status": "ok|degraded", "db": "ok|down", "authentik": "ok|down", "timestamp": "..." }
Wird von Docker und (Phase 2) externer Uptime-Überwachung genutzt.
OQ-5 (Archivierung)
Soft-Delete via project.archiviert=true + archiviert_am. Kein automatisches Löschen.
Manuelle Bereinigung bei Bedarf durch DB-Admin via Migration.