diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 50c212e..0dea8c1 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -28,3 +28,13 @@ - `git push` **muss vor der Ausführung kurz angekündigt werden** (geänderte Dateien + Commit-Message anzeigen). Kein explizites „Ja" nötig – aber der User muss die Möglichkeit haben, es abzubrechen. - **Weiterhin verboten ohne explizite User-Bestätigung:** `git reset --hard`, `git rebase`, `git push --force`, `git revert` auf bereits gepushte Commits, Branch-Löschungen. - Diese Regel gilt für alle Agenten, Prompts und direkte Chat-Interaktionen in diesem Workspace. + +--- + +## VPS-Verzeichnis (PFLICHT) + +**Das App-Verzeichnis auf dem VPS heißt `/opt/bollwerk/` – niemals `/opt/krisenvorrat/`.** + +- Der String `krisenvorrat` ist vollständig veraltet und darf **nirgendwo** verwendet werden: nicht in Pfaden, nicht in Namen, nicht in Kommentaren, nicht in Befehlen. +- Korrekt: `/opt/bollwerk/`, `bollwerk-server`, `bollwerk.online` +- Falsch: `/opt/krisenvorrat/`, `krisenvorrat` diff --git a/.github/skills/publish/SKILL.md b/.github/skills/publish/SKILL.md index be400c8..f4a8ae3 100644 --- a/.github/skills/publish/SKILL.md +++ b/.github/skills/publish/SKILL.md @@ -17,13 +17,13 @@ Dieser Skill deckt den vollständigen Workflow ab, um eine neue App-Version auf ``` App (lokal) VPS (bollwerk.online) ───────────── ───────────────────── -app/build.gradle.kts /opt/krisenvorrat/ +app/build.gradle.kts /opt/bollwerk/ versionCode / versionName ├── docker-compose.yml (BOLLWERK_APP_VERSION_CODE/NAME) ├── data/app-latest.apk (statisch ausgeliefert) ./gradlew assembleDebug └── Server-Container (Ktor) → app-debug.apk ├── GET / → Homepage mit QR-Code ├── GET /api/version → JSON {versionCode, versionName, apkUrl} -scp → /opt/krisenvorrat/data/ └── GET /static/* → Dateien aus data/ +scp → /opt/bollwerk/data/ └── GET /static/* → Dateien aus data/ ``` ### Wie die Update-Prüfung funktioniert @@ -59,7 +59,7 @@ Die APK liegt danach unter: `app/build/outputs/apk/debug/app-debug.apk` ### Schritt 3 – APK auf VPS hochladen ```powershell -scp app/build/outputs/apk/debug/app-debug.apk root@195.246.231.210:/opt/krisenvorrat/data/app-latest.apk +scp app/build/outputs/apk/debug/app-debug.apk root@195.246.231.210:/opt/bollwerk/data/app-latest.apk ``` **Voraussetzung:** SSH-Agent muss laufen und Key geladen sein (siehe vps-deploy Skill). @@ -70,19 +70,19 @@ Die Version wird über Environment-Variablen in der `docker-compose.yml` auf dem ```powershell # Neue Werte per sed in docker-compose.yml eintragen -ssh root@195.246.231.210 "cd /opt/krisenvorrat && sed -i 's/BOLLWERK_APP_VERSION_CODE=.*/BOLLWERK_APP_VERSION_CODE=/' docker-compose.yml && sed -i 's/BOLLWERK_APP_VERSION_NAME=.*/BOLLWERK_APP_VERSION_NAME=/' docker-compose.yml" +ssh root@195.246.231.210 "cd /opt/bollwerk && sed -i 's/BOLLWERK_APP_VERSION_CODE=.*/BOLLWERK_APP_VERSION_CODE=/' docker-compose.yml && sed -i 's/BOLLWERK_APP_VERSION_NAME=.*/BOLLWERK_APP_VERSION_NAME=/' docker-compose.yml" ``` Falls die Env-Vars noch nicht in der docker-compose.yml stehen, müssen sie einmalig hinzugefügt werden: ```powershell -ssh root@195.246.231.210 "cd /opt/krisenvorrat && sed -i '/BOLLWERK_JWT_SECRET/a\ - BOLLWERK_APP_VERSION_CODE=\n - BOLLWERK_APP_VERSION_NAME=' docker-compose.yml" +ssh root@195.246.231.210 "cd /opt/bollwerk && sed -i '/BOLLWERK_JWT_SECRET/a\ - BOLLWERK_APP_VERSION_CODE=\n - BOLLWERK_APP_VERSION_NAME=' docker-compose.yml" ``` ### Schritt 5 – Server neustarten ```powershell -ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose up -d" +ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose up -d" ``` ### Schritt 6 – Verifizieren diff --git a/.github/skills/vps-deploy/SKILL.md b/.github/skills/vps-deploy/SKILL.md index aa94e64..3009c78 100644 --- a/.github/skills/vps-deploy/SKILL.md +++ b/.github/skills/vps-deploy/SKILL.md @@ -23,7 +23,7 @@ Deployt den Bollwerk Ktor-Server auf den 1984 Hosting VPS in Island. | Disk | 50 GB SSD (Upgrade Mai 2026) | | Transfer | 1 TB/Monat | | Docker | Docker CE 29.x + docker-compose-plugin | -| App-Verzeichnis | `/opt/krisenvorrat/` | +| App-Verzeichnis | `/opt/bollwerk/` | --- @@ -73,23 +73,23 @@ cd x:\bollwerk .\gradlew.bat :server:buildFatJar # 2. JAR auf VPS kopieren -scp x:\bollwerk\server\build\libs\server.jar root@195.246.231.210:/opt/krisenvorrat/server.jar +scp x:\bollwerk\server\build\libs\server.jar root@195.246.231.210:/opt/bollwerk/server.jar # 3. Container neu bauen und starten -ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose up -d --build" +ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose up -d --build" ``` ### Nur Container neustarten (ohne neues JAR) ```powershell -ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose restart" +ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose restart" ``` --- ## Docker-Konfiguration auf dem VPS -### Dockerfile (`/opt/krisenvorrat/Dockerfile`) +### Dockerfile (`/opt/bollwerk/Dockerfile`) ```dockerfile FROM eclipse-temurin:21-jre-alpine @@ -101,7 +101,7 @@ ENTRYPOINT ["java", "-Xmx768m", "-jar", "server.jar"] **Hinweis:** `-Xmx768m` begrenzt den JVM-Heap (VPS hat 2 GB RAM seit Upgrade Mai 2026). -### docker-compose.yml (`/opt/krisenvorrat/docker-compose.yml`) +### docker-compose.yml (`/opt/bollwerk/docker-compose.yml`) ```yaml services: @@ -192,9 +192,9 @@ ssh root@195.246.231.210 "curl -s http://localhost:8080/api/health" ### Container stoppen/starten ```powershell -ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose stop" -ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose start" -ssh root@195.246.231.210 "cd /opt/krisenvorrat && docker compose down" # Container entfernen +ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose stop" +ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose start" +ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose down" # Container entfernen ``` ### RAM-Nutzung prüfen @@ -205,7 +205,7 @@ ssh root@195.246.231.210 "free -h && echo '---' && docker stats --no-stream" ### Daten-Persistenz -Die SQLite-Datenbank wird unter `/opt/krisenvorrat/data/` auf dem Host gemountet und überlebt Container-Neustarts. +Die SQLite-Datenbank wird unter `/opt/bollwerk/data/` auf dem Host gemountet und überlebt Container-Neustarts. --- @@ -214,5 +214,5 @@ Die SQLite-Datenbank wird unter `/opt/krisenvorrat/data/` auf dem Host gemountet - **1 GB RAM:** JVM-Heap auf 384 MB begrenzt. Kein Spielraum für weitere Dienste. - **Kein HTTPS:** Server läuft aktuell nur auf HTTP Port 8080. Für HTTPS → Caddy als Reverse Proxy einrichten. - **Kein CI/CD:** Deployment ist manuell (JAR bauen → scp → docker compose up). Ggf. GitHub Actions Pipeline ergänzen. -- **Dockerfile lokal:** Das Dockerfile auf dem VPS (`/opt/krisenvorrat/Dockerfile`) ist ein schlankes Runtime-Only-Image. Das Multi-Stage-Dockerfile im Repo-Root ist für lokale Builds gedacht. +- **Dockerfile lokal:** Das Dockerfile auf dem VPS (`/opt/bollwerk/Dockerfile`) ist ein schlankes Runtime-Only-Image. Das Multi-Stage-Dockerfile im Repo-Root ist für lokale Builds gedacht. - **SSH-Escape-Problem:** Beim Schreiben von Dateien via SSH-Heredoc werden JSON-Quotes zerstört. Dateien immer lokal erstellen und per `scp` hochladen. diff --git a/docs/server.md b/docs/server.md index bedb146..19e2dc1 100644 --- a/docs/server.md +++ b/docs/server.md @@ -70,7 +70,7 @@ apt-get install -y caddy ``` /opt/ -├── krisenvorrat/ # Bollwerk App-Stack +├── bollwerk/ # Bollwerk App-Stack │ ├── Dockerfile # Bollwerk-Server Image │ ├── docker-compose.yml # App + DB + Backup │ ├── server.jar # Aktuelles Server-JAR @@ -92,7 +92,7 @@ apt-get install -y caddy --- -## App-Stack: `/opt/krisenvorrat/` +## App-Stack: `/opt/bollwerk/` ### docker-compose.yml @@ -288,11 +288,11 @@ ssh root@195.246.231.210 ``` 9. **App-Verzeichnis anlegen:** ```bash - mkdir -p /opt/krisenvorrat/backup /opt/krisenvorrat/data + mkdir -p /opt/bollwerk/backup /opt/bollwerk/data ``` 10. **Dateien hochladen:** `Dockerfile`, `docker-compose.yml`, `backup/Dockerfile`, `backup/backup.sh`, `server.jar` 11. **Secrets in `docker-compose.yml` eintragen** (`BOLLWERK_JWT_SECRET`, Passwörter) -12. **App-Stack starten:** `cd /opt/krisenvorrat && docker compose up -d --build` +12. **App-Stack starten:** `cd /opt/bollwerk && docker compose up -d --build` 13. **Mail-Verzeichnis anlegen:** `mkdir -p /opt/mail` 14. **Mail `docker-compose.yml` hochladen** und starten: `cd /opt/mail && docker compose up -d` 15. **Backup aus altem Server wiederherstellen** (falls vorhanden):