- 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>
4.1 KiB
4.1 KiB
Deployment
Es gibt zwei Deployment-Varianten: systemd (Binary direkt) und Docker (empfohlen).
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
# 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
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
# 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 -dverwenden (nichtdocker restart), damit Änderungen an derdocker-compose.ymlübernommen werden.
Logs
ssh christoph@192.168.1.118 "docker logs krafttrainer-src-krafttrainer-1 -f"
Stoppen / Neustarten
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
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
- Linux mit systemd
- GCC/glibc (für CGO/SQLite) auf dem Build-Rechner
- SSH-Zugang zum Zielrechner
Erstinstallation
# 1. Binary bauen (auf dem Entwicklungsrechner)
make build
# 2. Verzeichnis auf dem Zielrechner anlegen
ssh christoph@192.168.1.118 "mkdir -p ~/krafttrainer"
# 3. Binary übertragen
scp krafttrainer christoph@192.168.1.118:~/krafttrainer/
# 4. Service-Datei installieren
sudo cp krafttrainer.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable krafttrainer
sudo systemctl start krafttrainer
Die Service-Datei (krafttrainer.service) liegt im Repo-Root und geht von folgendem aus:
| Parameter | Wert |
|---|---|
| User | christoph |
| Binary | /home/christoph/krafttrainer/krafttrainer |
| Datenbank | /home/christoph/krafttrainer/krafttrainer.db |
| Port | 8090 |
Anpassen falls User oder Pfade abweichen.
Update deployen
make build
scp krafttrainer christoph@192.168.1.118:~/krafttrainer/
ssh christoph@192.168.1.118 "sudo systemctl restart krafttrainer"
Service verwalten
sudo systemctl status krafttrainer # Status
sudo journalctl -u krafttrainer -f # Logs live
sudo systemctl stop krafttrainer # Stoppen
sudo systemctl restart krafttrainer # Neustarten
Service entfernen
sudo systemctl stop krafttrainer
sudo systemctl disable krafttrainer
sudo rm /etc/systemd/system/krafttrainer.service
sudo systemctl daemon-reload
Ports
| Port | Dienst |
|---|---|
8090 |
HTTP-Server (API + Frontend) |