- Package: de.krisenvorrat.* -> de.bollwerk.* - Klassen: KrisenvorratApp/Database/Theme -> Bollwerk* - ApplicationId: de.bollwerk.app - Server: BOLLWERK_* Env-Vars, bollwerk HOCON-Config - Docker: bollwerk-server/db/backup Container-Namen - Room DB: bollwerk.db, SharedPrefs: bollwerk_secure_prefs - Export-Dateien: bollwerk_export/inventar - UI-Strings, HTML, Admin-UI: alle auf Bollwerk - Docs, Skills, README angepasst - Alle Tests gruen, Build erfolgreich
143 lines
4.2 KiB
Markdown
143 lines
4.2 KiB
Markdown
# Bollwerk
|
||
|
||
Android-App zur Verwaltung eines Bollwerks-Inventars mit lokaler Datenhaltung und Sync-Möglichkeit über einen LAN-Server.
|
||
|
||
## Projektstruktur
|
||
|
||
| Modul | Beschreibung |
|
||
|----------|-------------------------------------------------|
|
||
| `app` | Android-App (Kotlin, Jetpack Compose, Room) |
|
||
| `server` | Ktor REST-Server (H2-Datenbank, Fat-JAR) |
|
||
| `shared` | Gemeinsame DTOs (kotlinx.serialization) |
|
||
|
||
## Voraussetzungen
|
||
|
||
- **Android Studio** oder IntelliJ IDEA
|
||
- **JDK 21** (für Server) / JDK 11+ (für App)
|
||
- **Android SDK** (API Level 35)
|
||
|
||
## App bauen
|
||
|
||
```powershell
|
||
# Windows
|
||
.\gradlew assembleDebug
|
||
|
||
# Linux/Mac
|
||
./gradlew assembleDebug
|
||
```
|
||
|
||
## Tests ausführen
|
||
|
||
```bash
|
||
# Alle Tests (App + Server)
|
||
./gradlew test
|
||
|
||
# Nur Server-Tests
|
||
./gradlew :server:test
|
||
|
||
# Nur App-Tests
|
||
./gradlew :app:test
|
||
```
|
||
|
||
---
|
||
|
||
## Phase 2: Server-Setup (LAN-Sync)
|
||
|
||
### Übersicht
|
||
|
||
Der Sync-Server empfängt das Inventar der App als JSON und gibt es an andere App-Instanzen im selben LAN weiter. Die Kommunikation läuft über einfaches HTTP mit API-Key-Authentifizierung.
|
||
|
||
```
|
||
┌──────────┐ PUT /api/inventory ┌──────────┐
|
||
│ App A │ ───────────────────────► │ Server │
|
||
│ (Upload) │ │ :8080 │
|
||
└──────────┘ └────┬─────┘
|
||
│
|
||
┌──────────┐ GET /api/inventory ┌────┴─────┐
|
||
│ App B │ ◄─────────────────────── │ Server │
|
||
│(Download)│ │ :8080 │
|
||
└──────────┘ └──────────┘
|
||
```
|
||
|
||
### Schnellstart
|
||
|
||
#### Option A: Direkt starten (empfohlen für Entwicklung)
|
||
|
||
```powershell
|
||
# Windows
|
||
.\start-server.ps1
|
||
|
||
# Linux/Mac
|
||
chmod +x start-server.sh
|
||
./start-server.sh
|
||
```
|
||
|
||
Das Skript baut automatisch das Fat-JAR und zeigt die LAN-IP an.
|
||
|
||
#### Option B: Manuell mit Gradle
|
||
|
||
```bash
|
||
./gradlew :server:run
|
||
```
|
||
|
||
#### Option C: Fat-JAR
|
||
|
||
```bash
|
||
# JAR bauen
|
||
./gradlew :server:buildFatJar
|
||
|
||
# Starten
|
||
java -jar server/build/libs/server.jar
|
||
```
|
||
|
||
#### Option D: Docker
|
||
|
||
```bash
|
||
# Image bauen
|
||
docker build -t bollwerk-server .
|
||
|
||
# Container starten
|
||
docker run -d \
|
||
--name bollwerk \
|
||
-p 8080:8080 \
|
||
-e BOLLWERK_API_KEY="mein-sicherer-api-key" \
|
||
-v bollwerk-data:/app/data \
|
||
bollwerk-server
|
||
```
|
||
|
||
### LAN-Setup
|
||
|
||
1. **Server-IP ermitteln:**
|
||
- Windows: `ipconfig` → IPv4-Adresse des WLAN/LAN-Adapters
|
||
- Linux/Mac: `ip addr` oder `ifconfig`
|
||
- Die Start-Skripte zeigen die IP automatisch an
|
||
|
||
2. **Firewall-Regel:** Port **8080** (TCP eingehend) muss freigeschaltet sein:
|
||
- Windows: `netsh advfirewall firewall add rule name="Bollwerk" dir=in action=allow protocol=TCP localport=8080`
|
||
- Linux: `sudo ufw allow 8080/tcp`
|
||
|
||
3. **App konfigurieren:**
|
||
- Einstellungen → Server-URL: `http://<SERVER-IP>:8080`
|
||
- Einstellungen → API-Key: den gleichen Key wie beim Server-Start
|
||
|
||
### API-Endpunkte
|
||
|
||
| Methode | Pfad | Auth | Beschreibung |
|
||
|---------|-------------------|-----------|------------------------------------|
|
||
| GET | `/api/health` | – | Health-Check, gibt "OK" zurück |
|
||
| GET | `/api/inventory` | API-Key | Inventar vom Server laden (Pull) |
|
||
| PUT | `/api/inventory` | API-Key | Inventar auf Server speichern (Push)|
|
||
|
||
**Authentifizierung:** API-Key als `X-API-Key`-Header oder `Bearer`-Token.
|
||
|
||
### Umgebungsvariablen
|
||
|
||
| Variable | Standard | Beschreibung |
|
||
|-----------------------|-------------------------------------------------|-------------------|
|
||
| `BOLLWERK_API_KEY` | `change-me-to-a-secure-key-at-least-32-chars` | API-Key für Auth |
|
||
|
||
### Sicherheitshinweise
|
||
|
||
- Der Dev-Server nutzt **HTTP** (kein HTTPS) – nur im vertrauenswürdigen LAN verwenden.
|
||
- Für Produktionseinsatz: HTTPS mit Reverse-Proxy (z.B. nginx/Caddy) konfigurieren.
|
||
- API-Key sollte mindestens 32 Zeichen lang sein.
|