Update deployment docs to reflect current Docker setup
- Docker is now the recommended variant - Documents bind mount at /home/christoph/fitnesspad instead of Docker volume - Adds DB import workflow via scp + docker compose down/up - Notes that docker restart does NOT pick up compose changes - Updates Go version in image table to 1.26 - Removes outdated Docker volume backup commands Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
150
deployment.md
150
deployment.md
@@ -1,10 +1,89 @@
|
|||||||
# Deployment
|
# Deployment
|
||||||
|
|
||||||
Es gibt zwei Deployment-Varianten: **systemd** (empfohlen für einzelne Server) und **Docker**.
|
Es gibt zwei Deployment-Varianten: **systemd** (Binary direkt) und **Docker** (empfohlen).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Variante 1: systemd (Binary direkt)
|
## Variante 1: Docker (empfohlen)
|
||||||
|
|
||||||
|
### Voraussetzungen
|
||||||
|
|
||||||
|
- Docker + Docker Compose auf dem Zielrechner
|
||||||
|
- SSH-Zugang zum Zielrechner
|
||||||
|
|
||||||
|
### Aktuelle Konfiguration (192.168.1.118)
|
||||||
|
|
||||||
|
| Parameter | Wert |
|
||||||
|
|-----------|------|
|
||||||
|
| User | `christoph` |
|
||||||
|
| Quellcode | `/home/christoph/krafttrainer-src/` |
|
||||||
|
| Datenbank | `/home/christoph/fitnesspad/krafttrainer.db` |
|
||||||
|
| Port | `8090` |
|
||||||
|
|
||||||
|
Die `docker-compose.yml` mountet `/home/christoph/fitnesspad` als Bind-Mount in den Container (`/data`). Die DB liegt damit direkt auf dem Dateisystem des Servers — kein Docker-Volume.
|
||||||
|
|
||||||
|
### Erstinstallation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Quellcode auf den Server übertragen
|
||||||
|
ssh christoph@192.168.1.118 "mkdir -p ~/krafttrainer-src ~/fitnesspad"
|
||||||
|
git archive --format=tar HEAD | ssh christoph@192.168.1.118 "tar -x -C ~/krafttrainer-src"
|
||||||
|
|
||||||
|
# 2. Container bauen und starten (~2-3 Min. beim ersten Mal)
|
||||||
|
ssh christoph@192.168.1.118 "cd ~/krafttrainer-src && docker compose up --build -d"
|
||||||
|
```
|
||||||
|
|
||||||
|
Beim ersten Start laufen die Datenbankmigrationen automatisch.
|
||||||
|
|
||||||
|
### Update deployen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git archive --format=tar HEAD | ssh christoph@192.168.1.118 "tar -x -C ~/krafttrainer-src"
|
||||||
|
ssh christoph@192.168.1.118 "cd ~/krafttrainer-src && docker compose up --build -d"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Datenbank einspielen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Lokale DB auf den Server kopieren (überschreibt bestehende Daten!)
|
||||||
|
scp backend/krafttrainer.db christoph@192.168.1.118:/home/christoph/fitnesspad/krafttrainer.db
|
||||||
|
|
||||||
|
# Container neu starten (Migrationen laufen automatisch)
|
||||||
|
ssh christoph@192.168.1.118 "cd ~/krafttrainer-src && docker compose down && docker compose up -d"
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Wichtig:** Immer `docker compose down && docker compose up -d` verwenden (nicht `docker restart`), damit Änderungen an der `docker-compose.yml` übernommen werden.
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh christoph@192.168.1.118 "docker logs krafttrainer-src-krafttrainer-1 -f"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Stoppen / Neustarten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh christoph@192.168.1.118 "cd ~/krafttrainer-src && docker compose down"
|
||||||
|
ssh christoph@192.168.1.118 "cd ~/krafttrainer-src && docker compose up -d"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Datenbank-Backup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
scp christoph@192.168.1.118:/home/christoph/fitnesspad/krafttrainer.db ./krafttrainer.db.bak
|
||||||
|
```
|
||||||
|
|
||||||
|
### Image-Aufbau (3-Stage-Build)
|
||||||
|
|
||||||
|
| Stage | Basis | Aufgabe |
|
||||||
|
|-------|-------|---------|
|
||||||
|
| 1 | `node:22-slim` | `pnpm build` → `frontend/dist/` |
|
||||||
|
| 2 | `golang:1.26-bookworm` | Frontend einbetten + `go build` (CGO für SQLite) |
|
||||||
|
| 3 | `debian:bookworm-slim` | Nur Binary + glibc, ~100MB finales Image |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Variante 2: systemd (Binary direkt)
|
||||||
|
|
||||||
### Voraussetzungen
|
### Voraussetzungen
|
||||||
|
|
||||||
@@ -70,73 +149,6 @@ sudo systemctl daemon-reload
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Variante 2: Docker
|
|
||||||
|
|
||||||
### Voraussetzungen
|
|
||||||
|
|
||||||
- Docker + Docker Compose auf dem Zielrechner
|
|
||||||
- Quellcode (git clone)
|
|
||||||
|
|
||||||
## Starten
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker compose up --build -d
|
|
||||||
```
|
|
||||||
|
|
||||||
Beim ersten Start:
|
|
||||||
- Docker baut das Image (Frontend + Go-Binary, dauert ~2 Min.)
|
|
||||||
- Migrations laufen automatisch beim Start
|
|
||||||
- Server lauscht auf Port `8090`
|
|
||||||
|
|
||||||
## Nach Code-Änderungen
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker compose up --build -d
|
|
||||||
```
|
|
||||||
|
|
||||||
Docker-Layer-Cache beschleunigt den Rebuild:
|
|
||||||
- `go.mod` unverändert → `go mod download` wird nicht wiederholt
|
|
||||||
- `pnpm-lock.yaml` unverändert → `pnpm install` wird nicht wiederholt
|
|
||||||
|
|
||||||
## Logs
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker compose logs -f
|
|
||||||
```
|
|
||||||
|
|
||||||
## Stoppen
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker compose down # Container stoppen (DB bleibt erhalten)
|
|
||||||
docker compose down -v # Container + DB-Volume löschen (Datenverlust!)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Datenbank
|
|
||||||
|
|
||||||
Die SQLite-DB liegt im Docker-Volume `db-data` → `/data/krafttrainer.db` im Container.
|
|
||||||
|
|
||||||
**Backup:**
|
|
||||||
```bash
|
|
||||||
docker run --rm -v krafttrainer_db-data:/data -v $(pwd):/backup \
|
|
||||||
debian:bookworm-slim cp /data/krafttrainer.db /backup/krafttrainer.db.bak
|
|
||||||
```
|
|
||||||
|
|
||||||
**Restore:**
|
|
||||||
```bash
|
|
||||||
docker compose down
|
|
||||||
docker run --rm -v krafttrainer_db-data:/data -v $(pwd):/backup \
|
|
||||||
debian:bookworm-slim cp /backup/krafttrainer.db.bak /data/krafttrainer.db
|
|
||||||
docker compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
## Image-Aufbau (3-Stage-Build)
|
|
||||||
|
|
||||||
| Stage | Basis | Aufgabe |
|
|
||||||
|-------|-------|---------|
|
|
||||||
| 1 | `node:22-slim` | `pnpm build` → `frontend/dist/` |
|
|
||||||
| 2 | `golang:1.24-bookworm` | Frontend einbetten + `go build` (CGO für SQLite) |
|
|
||||||
| 3 | `debian:bookworm-slim` | Nur Binary + glibc, ~100MB finales Image |
|
|
||||||
|
|
||||||
## Ports
|
## Ports
|
||||||
|
|
||||||
| Port | Dienst |
|
| Port | Dienst |
|
||||||
|
|||||||
Reference in New Issue
Block a user