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>
3.3 KiB
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.modunverändert →go mod downloadwird nicht wiederholtpnpm-lock.yamlunverändert →pnpm installwird 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 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
| Port | Dienst |
|---|---|
8090 |
HTTP-Server (API + Frontend) |