- appsettings.Production.json: Photos:RootPath -> C:\gerbil-data\photos so photo files land on a stable host path when ASPNETCORE_ENVIRONMENT=Production - Start-GerbilManager.ps1: creates data dirs, sets Production env, launches AppHost minimised; saves PID for Stop script - Stop-GerbilManager.ps1: kills AppHost + Vite node processes by PID / port - Register-AutoStart.ps1: Windows Scheduled Task on user logon (RunLevel Highest) - Register-BackupTask.ps1: daily 03:00 Scheduled Task for Backup script - deploy/README.md: Julian ops guide — start/stop commands, phone URL, DHCP reservation, firewall rule (Public-profile Wi-Fi), backup/restore procedures, prerequisites checklist, troubleshooting table (German) Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
179 lines
5.1 KiB
Markdown
179 lines
5.1 KiB
Markdown
# GerbilManager — Betriebsanleitung (Ops Guide)
|
|
|
|
_Für Julian und seine Frau. Alles Wichtige auf einer Seite._
|
|
|
|
---
|
|
|
|
## Schnellstart
|
|
|
|
### Erstmalige Einrichtung (einmalig, als Administrator)
|
|
|
|
```powershell
|
|
# 1. Autostart bei Windows-Anmeldung registrieren
|
|
powershell -ExecutionPolicy Bypass -File deploy\scripts\Register-AutoStart.ps1
|
|
|
|
# 2. Taeliches Backup um 03:00 Uhr registrieren
|
|
powershell -ExecutionPolicy Bypass -File deploy\scripts\Register-BackupTask.ps1
|
|
```
|
|
|
|
Danach startet GerbilManager automatisch nach jedem Neustart. Fertig.
|
|
|
|
---
|
|
|
|
### App manuell starten / stoppen
|
|
|
|
```powershell
|
|
# Starten (minimiertes Fenster)
|
|
powershell -ExecutionPolicy Bypass -File deploy\scripts\Start-GerbilManager.ps1
|
|
|
|
# Stoppen
|
|
powershell -ExecutionPolicy Bypass -File deploy\scripts\Stop-GerbilManager.ps1
|
|
```
|
|
|
|
### App im Browser öffnen
|
|
|
|
| Gerät | URL |
|
|
|---|---|
|
|
| Laptop (lokal) | http://localhost:5173 |
|
|
| Handy / anderes Gerät im WLAN | http://192.168.2.124:5173 |
|
|
|
|
> Die IP-Adresse (192.168.2.124) ist die aktuelle DHCP-Adresse des Laptops.
|
|
> Für eine stabile Adresse → Abschnitt "Feste IP-Adresse" weiter unten.
|
|
|
|
---
|
|
|
|
## Datensicherung (Backup)
|
|
|
|
Backups werden automatisch täglich um 03:00 Uhr nach `C:\gerbil-data\backups\` gesichert.
|
|
Jedes Backup enthält:
|
|
- `gerbilmanager_<datum>.sql` — kompletter Datenbankdump
|
|
- `photos_<datum>.zip` — alle Tierfotos
|
|
|
|
Die letzten **7 Tage** werden aufbewahrt; ältere Backups werden automatisch gelöscht.
|
|
|
|
### Backup manuell ausführen
|
|
|
|
```powershell
|
|
powershell -ExecutionPolicy Bypass -File deploy\scripts\Backup-GerbilManager.ps1
|
|
```
|
|
|
|
### Backup-Protokoll einsehen
|
|
|
|
```
|
|
C:\gerbil-data\backups\backup.log
|
|
```
|
|
|
|
---
|
|
|
|
## Wiederherstellung aus Backup
|
|
|
|
> **Achtung:** Alle aktuellen Daten werden überschrieben!
|
|
|
|
```powershell
|
|
# Neuestes Backup wiederherstellen (fragt vorher nach Bestätigung)
|
|
powershell -ExecutionPolicy Bypass -File deploy\scripts\Restore-GerbilManager.ps1
|
|
|
|
# Bestimmtes Backup wiederherstellen
|
|
powershell -ExecutionPolicy Bypass -File deploy\scripts\Restore-GerbilManager.ps1 `
|
|
-BackupDir "C:\gerbil-data\backups\2026-06-05_03-00"
|
|
```
|
|
|
|
---
|
|
|
|
## Feste IP-Adresse (empfohlen)
|
|
|
|
Damit das Handy immer dieselbe URL verwendet, sollte dem Laptop eine feste
|
|
IP-Adresse im Heimnetzwerk zugewiesen werden.
|
|
|
|
### Option A: DHCP-Reservierung im Router (empfohlen)
|
|
|
|
1. Router-Oberfläche öffnen (meist `http://192.168.2.1` oder `http://fritz.box`)
|
|
2. **Heimnetz → Netzwerk → IP-Adressen** (bei FRITZ!Box)
|
|
3. Den Eintrag für diesen Laptop suchen (Name: `GULUM-...` oder ähnlich)
|
|
4. **"Immer dieselbe IPv4-Adresse zuweisen"** aktivieren
|
|
5. Speichern. Ab sofort hat der Laptop immer 192.168.2.124.
|
|
|
|
### Option B: Statische IP direkt am Laptop setzen
|
|
|
|
```powershell
|
|
# Netzwerkadaptername ermitteln
|
|
Get-NetAdapter
|
|
|
|
# Feste IP setzen (Beispiel fuer WLAN-Adapter "Wi-Fi")
|
|
New-NetIPAddress -InterfaceAlias "Wi-Fi" -IPAddress 192.168.2.124 -PrefixLength 24 -DefaultGateway 192.168.2.1
|
|
Set-DnsClientServerAddress -InterfaceAlias "Wi-Fi" -ServerAddresses 192.168.2.1
|
|
```
|
|
|
|
---
|
|
|
|
## Firewall-Regel (für Handy-Zugriff)
|
|
|
|
Damit das Handy auf die App zugreifen kann, muss eine Firewall-Ausnahme eingerichtet sein.
|
|
Das WLAN "Katzastrophe 4" ist als **Public** eingestuft, daher ist der Befehl nötig:
|
|
|
|
```powershell
|
|
# Als Administrator ausführen:
|
|
New-NetFirewallRule `
|
|
-DisplayName "GerbilManager (Frontend + API)" `
|
|
-Direction Inbound `
|
|
-Action Allow `
|
|
-Protocol TCP `
|
|
-LocalPort 5173,5179 `
|
|
-Profile Any
|
|
```
|
|
|
|
> **Einmalig nötig.** Prüfen ob die Regel bereits existiert:
|
|
> `Get-NetFirewallRule -DisplayName "GerbilManager*"`
|
|
|
|
---
|
|
|
|
## Datenspeicherorte
|
|
|
|
| Was | Pfad |
|
|
|---|---|
|
|
| Tierfotos | `C:\gerbil-data\photos\` |
|
|
| Datenbank | Docker-Volume (automatisch, Aspire-verwaltet) |
|
|
| Backups | `C:\gerbil-data\backups\` |
|
|
| App-Quellcode | `C:\Users\gulum\dev\GerbilManager\` |
|
|
|
|
---
|
|
|
|
## Voraussetzungen (für Betrieb)
|
|
|
|
| Software | Mindestversion | Status prüfen |
|
|
|---|---|---|
|
|
| Docker Desktop | Aktuell, läuft | `docker ps` |
|
|
| .NET SDK | 10.0+ | `dotnet --version` |
|
|
| Node.js | 18+ | `node --version` |
|
|
|
|
Docker Desktop muss beim Windows-Start automatisch starten.
|
|
Einstellung: Docker Desktop → Settings → **Start Docker Desktop when you sign in**.
|
|
|
|
---
|
|
|
|
## Problemlösung
|
|
|
|
| Problem | Lösung |
|
|
|---|---|
|
|
| Seite lädt nicht | Prüfen ob Docker läuft: `docker ps`. Dann `Start-GerbilManager.ps1` |
|
|
| Handy erreicht App nicht | Firewall-Regel prüfen (oben). Beide Geräte im selben WLAN? |
|
|
| Daten verschwunden | Wiederherstellung: `Restore-GerbilManager.ps1` |
|
|
| Datenbank-Fehler beim Start | `docker ps` → Postgres-Container läuft? Sonst neu starten |
|
|
| Port belegt (Fehler 5179/5173) | `netstat -ano \| findstr ":5179"` → Prozess beenden |
|
|
|
|
---
|
|
|
|
## Backup testen (einmalig empfohlen)
|
|
|
|
```powershell
|
|
# 1. Backup erstellen
|
|
powershell -ExecutionPolicy Bypass -File deploy\scripts\Backup-GerbilManager.ps1
|
|
|
|
# 2. Prüfen ob Backup vorhanden
|
|
Get-ChildItem "C:\gerbil-data\backups\" -Directory | Select-Object -Last 3
|
|
|
|
# 3. Inhalt des neuesten Backups prüfen
|
|
$latest = (Get-ChildItem "C:\gerbil-data\backups\" -Directory | Sort-Object LastWriteTime -Desc | Select-Object -First 1).FullName
|
|
Get-ChildItem $latest
|
|
```
|