Files
krafttrainer/deployment.md
Christoph K. c992e2775c Add systemd service file and installation guide
Adds krafttrainer.service for running as a systemd unit and expands
deployment.md with step-by-step instructions for both systemd and Docker deployment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 23:59:04 +01:00

3.3 KiB

Deployment

Es gibt zwei Deployment-Varianten: systemd (empfohlen für einzelne Server) und Docker.


Variante 1: 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

Variante 2: Docker

Voraussetzungen

  • Docker + Docker Compose auf dem Zielrechner
  • Quellcode (git clone)

Starten

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

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

docker compose logs -f

Stoppen

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:

docker run --rm -v krafttrainer_db-data:/data -v $(pwd):/backup \
  debian:bookworm-slim cp /data/krafttrainer.db /backup/krafttrainer.db.bak

Restore:

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 buildfrontend/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

Port Dienst
8090 HTTP-Server (API + Frontend)