2026-07-04 18:15:24 +02:00
# Deployment – Kairo Jinkendo
2026-07-04 19:15:43 +02:00
**Stand:** 2026-07-04 (AP0.1)
2026-07-04 18:15:24 +02:00
**Server:** Raspberry Pi 5 (`192.168.2.49`) — gleicher Host wie Shinkan/Mitai
**Runner:** Gitea Actions (`/home/lars/gitea-runner/`)
---
## Port- und Pfad-Übersicht
| | Production | Development |
|---|------------|-------------|
| **Git-Branch** | `main` | `develop` |
| **Server-Verzeichnis** | `/home/lars/docker/kairo` | `/home/lars/docker/kairo-dev` |
| **Frontend-Port** | 3004 | 3097 |
| **Backend-Port** | 8004 | 8097 |
2026-07-04 19:35:09 +02:00
| **PostgreSQL** | nur im Container-Netz (Prod optional localhost:5436) | nur im Container-Netz |
2026-07-04 18:15:24 +02:00
| **Domain** | kairo.jinkendo.de | dev.kairo.jinkendo.de |
---
## Einmalige Server-Einrichtung
```bash
2026-07-04 19:15:43 +02:00
mkdir -p /home/lars/docker/kairo /home/lars/docker/kairo-dev
2026-07-04 18:15:24 +02:00
2026-07-04 19:15:43 +02:00
cd /home/lars/docker/kairo-dev
2026-07-04 18:15:24 +02:00
git clone http://192.168.2.144:3000/Lars/Kairo-Jinkendo.git .
2026-07-04 19:15:43 +02:00
git checkout develop
2026-07-04 18:15:24 +02:00
cp .env.example .env
2026-07-04 19:15:43 +02:00
# DB_PASSWORD setzen
2026-07-04 18:15:24 +02:00
2026-07-04 19:15:43 +02:00
cd /home/lars/docker/kairo
2026-07-04 18:15:24 +02:00
git clone http://192.168.2.144:3000/Lars/Kairo-Jinkendo.git .
2026-07-04 19:15:43 +02:00
git checkout main
2026-07-04 18:15:24 +02:00
cp .env.example .env
2026-07-04 19:15:43 +02:00
# Prod-DB_PASSWORD setzen
2026-07-04 18:15:24 +02:00
```
---
2026-07-04 19:15:43 +02:00
## Gitea Actions – Checkliste
2026-07-04 19:03:57 +02:00
2026-07-04 19:15:43 +02:00
1. **Actions aktiviert** (Repository → Settings → Actions)
2. **Pi-Runner registriert** — derselbe wie Shinkan/Mitai (`ubuntu-latest`)
3. Push `develop` → `deploy-dev.yml` → `curl http://localhost:8097/api/health`
4. Merge `main` → `deploy-prod.yml` → `curl http://localhost:8004/api/health`
5. Nach Deploy: `test.yml` (workflow_run) — pytest, k6, Playwright smoke gegen **localhost**
2026-07-04 19:03:57 +02:00
2026-07-04 19:43:57 +02:00
| Workflow | Trigger | Zweck |
|----------|---------|--------|
| `deploy-dev.yml` | Push `develop` | Deploy nach `/home/lars/docker/kairo-dev` |
| `deploy-prod.yml` | Push `main` | Deploy nach `/home/lars/docker/kairo` |
2026-07-04 19:45:43 +02:00
| `test.yml` | Push/PR `develop` , nach Deploy | lint, pytest, k6, Playwright (Frontend-Build läuft im Deploy via Docker) |
2026-07-04 19:43:57 +02:00
| `test.yml` → `compose-smoke` | Pull Request | Eigener Stack auf **CI-Ports 18197/13197** |
2026-07-04 19:03:57 +02:00
2026-07-04 19:43:57 +02:00
Struktur wie Shinkan: **Deploy** und **Test Suite** sind getrennte Workflows in Gitea.
Bei Push auf `develop` starten Deploy und Test Suite parallel; pytest wartet auf den Backend-Container der deployten Instanz (Ports 8097/3097). Nach Deploy Production feuert `workflow_run` die Prod-Tests (Ports 8004/3004).
2026-07-04 19:03:57 +02:00
2026-07-04 19:15:43 +02:00
---
2026-07-04 19:03:57 +02:00
2026-07-04 19:15:43 +02:00
## Medien (optional)
2026-07-04 19:03:57 +02:00
2026-07-04 19:15:43 +02:00
Aktuell keine Medien-Speicherung. Bei Bedarf: NAS-Mount + `docker-compose.override.yml` (siehe frühere Doku-Version im Git-Verlauf).
2026-07-04 19:03:57 +02:00
---
2026-07-04 19:15:43 +02:00
## Reverse Proxy (optional)
2026-07-04 18:15:24 +02:00
| Hostname | Ziel (Pi) |
|----------|-----------|
| `kairo.jinkendo.de` | `http://192.168.2.49:3004` |
| `dev.kairo.jinkendo.de` | `http://192.168.2.49:3097` |
---
## Manuelles Deploy
```bash
# Development
cd /home/lars/docker/kairo-dev
git fetch origin develop & & git reset --hard origin/develop
docker compose -f docker-compose.dev-env.yml build --no-cache
docker compose -f docker-compose.dev-env.yml up -d
# Production
cd /home/lars/docker/kairo
git fetch origin main & & git reset --hard origin/main
docker compose build --no-cache
docker compose up -d
```
2026-07-04 19:15:43 +02:00
Health: `curl http://localhost:8097/api/health` (Dev) bzw. `http://localhost:8004/api/health` (Prod)