Files
krafttrainer/deployment.md
Christoph K. 344bcfc755 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>
2026-03-23 20:43:21 +01:00

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 -d verwenden (nicht docker restart), damit Änderungen an der docker-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 buildfrontend/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)