8.6 KiB
8.6 KiB
gameadm Production Deployment Guide
Single-Host Production mit Podman + systemd/Quadlet
Dieser Guide beschreibt die Enterprise-taugliche Production-Deployment-Strategie für gameadm mit Podman, systemd/Quadlet und Woodpecker CI/CD.
Architektur Übersicht
┌─────────────────────────────────────────────────────┐
│ Production Host │
├─────────────────────────────────────────────────────┤
│ 🔧 gameadm (rootless User) │
│ ├── systemd/Quadlet Integration │
│ ├── Podman Container Runtime │
│ ├── Auto-Update + Health Checks │
│ └── Zero-Downtime Deployments │
├─────────────────────────────────────────────────────┤
│ 🎮 Game Servers (systemd Services) │
│ ├── minecraft.service (Port 25565) │
│ ├── rust.service (Port 28015/28016) │
│ └── Weitere Games (modular erweiterbar) │
├─────────────────────────────────────────────────────┤
│ 📊 Monitoring & Backups │
│ ├── Health Checks alle 30s │
│ ├── Automatische Backups vor Updates │
│ ├── Rollback-Mechanismus │
│ └── systemd Integration │
└─────────────────────────────────────────────────────┘
⬆
Woodpecker CI/CD
(Zero-Downtime Deployments)
1. Production Host Setup
Automatisches Setup
# Production Host Setup (als root)
curl -fsSL https://git.pp1l.de/pp1l/gameadm/raw/branch/main/production/setup-production-host.sh | bash
# Oder manuell:
wget https://git.pp1l.de/pp1l/gameadm/raw/branch/main/production/setup-production-host.sh
chmod +x setup-production-host.sh
sudo ./setup-production-host.sh
Was das Setup macht:
- ✅ gameadm User erstellen (rootless Betrieb)
- ✅ Podman installieren und konfigurieren
- ✅ systemd/Quadlet einrichten
- ✅ User Linger aktivieren (persistente User-Services)
- ✅ Cgroups Delegation konfigurieren
- ✅ SSH für CI/CD vorbereiten
- ✅ Firewall für Game-Ports konfigurieren
- ✅ Monitoring und Health Checks einrichten
2. gameadm Installation
# Als gameadm User
sudo -u gameadm bash
curl -fsSL https://git.pp1l.de/pp1l/gameadm/raw/branch/main/install.sh | bash
# Game Server konfigurieren
gameadm install minecraft
gameadm install rust
3. Production Deployment
Rootless Quadlet Setup
# Als gameadm User
gameadm-quadlet setup rootless
# Games als systemd Services deployen
gameadm-quadlet deploy minecraft
gameadm-quadlet deploy rust
# Services aktivieren (Auto-Start beim Boot)
gameadm-quadlet enable minecraft
gameadm-quadlet enable rust
# Services starten
gameadm-quadlet start minecraft
gameadm-quadlet start rust
Verfügbare Kommandos
# Service Management
gameadm-quadlet start minecraft
gameadm-quadlet stop rust
gameadm-quadlet restart minecraft
gameadm-quadlet status rust
gameadm-quadlet logs minecraft
# Production Operations
gameadm-quadlet update minecraft # Zero-Downtime Update
gameadm-quadlet rollback rust # Rollback zur vorherigen Version
gameadm-quadlet health minecraft # Health Check
gameadm-quadlet backup rust # Backup erstellen
4. Zero-Downtime Updates
Automatischer Update-Prozess:
- Pre-Update Backup (Config + Image Info)
- Health Check vor Update
- Image Pull (neues Container-Image)
- Graceful Restart (podman auto-update)
- Post-Update Health Check
- Cleanup (alte Backups entfernen)
Bei Update-Fehlern:
- Automatischer Rollback verfügbar
- Backup-basierte Wiederherstellung
- Health-Check-gesteuerter Prozess
# Update mit automatischem Rollback bei Fehlern
gameadm-quadlet update minecraft
# Manueller Rollback falls nötig
gameadm-quadlet rollback minecraft
5. Woodpecker CI/CD Integration
Deployment Pipeline
# .woodpecker-deployment.yml Beispiel
steps:
deploy_minecraft:
image: alpine:latest
secrets: [ssh_private_key, production_host]
commands:
- ssh gameadm@$PRODUCTION_HOST
- gameadm-quadlet update minecraft
- gameadm-quadlet health minecraft
Deployment-Trigger:
- ✅ Git Push auf main branch
- ✅ Manual Deployment über Woodpecker UI
- ✅ Scheduled Deployments (optional)
- ✅ Rollback bei Fehlern
6. systemd/Quadlet Konfiguration
Minecraft Container Definition
# ~/.config/containers/systemd/minecraft.container
[Unit]
Description=Minecraft Server via gameadm
After=network-online.target
[Container]
Image=docker.io/itzg/minecraft-server:latest
AutoUpdate=registry
PublishPort=25565:25565
Volume=/srv/minecraft:/data:Z
Label=io.containers.autoupdate=registry
[Service]
Type=notify
NotifyAccess=all
Delegate=yes
Restart=on-failure
[Install]
WantedBy=multi-user.target
Auto-Update Labels:
io.containers.autoupdate=registry- Aktiviert automatische Updatesmaintainer=gameadm- Kennzeichnung für gameadmenvironment=production- Production-Umgebung
7. Monitoring und Health Checks
Health Check System:
# Automatische Health Checks
gameadm-quadlet health minecraft # ✓ oder ✗
gameadm-quadlet health rust # Port + Container Checks
# System-weites Monitoring
/usr/local/bin/gameadm-health-check # Vollständiger Report
Health Check Kriterien:
- ✅ Container Running (podman inspect)
- ✅ Port Listening (netstat check)
- ✅ Resource Usage (Memory/CPU)
- ✅ Auto-Retry (5 Versuche mit 5s Pause)
8. Backup und Disaster Recovery
Automatische Backups:
- Pre-Update Backups (vor jedem Update)
- Config Backups (/etc/*-server.conf)
- Image Info Backups (für Rollbacks)
- Retention Policy (5 neueste Backups)
Rollback-Prozess:
- Service Stop
- Config Restore (aus Backup)
- Image Rollback (Container neu erstellen)
- Service Start
- Health Check (Erfolg validieren)
9. Sicherheit
Rootless Betrieb:
- ✅ User Namespaces (Isolation)
- ✅ No Root Privileges für Container
- ✅ SELinux/AppArmor Integration
- ✅ Cgroups Limits (Memory/CPU)
Secrets Management:
# Sichere Passwort-Speicherung
/root/secrets/minecraft_rcon_password
/root/secrets/rust_server_password
chmod 600 /root/secrets/*
# Quadlet Secret Integration
Secret=minecraft_rcon_password,type=mount,target=/tmp/rcon_password
10. Troubleshooting
Häufige Probleme:
Container startet nicht:
gameadm-quadlet logs minecraft
journalctl --user -u minecraft
Port-Konflikte:
netstat -tlnp | grep 25565
gameadm-quadlet status minecraft
Update-Fehler:
gameadm-quadlet rollback minecraft
gameadm-quadlet health minecraft
Service-Status prüfen:
systemctl --user status minecraft
podman ps
11. Erweiterungen
Neue Games hinzufügen:
- Modul erstellen (
/etc/gameadm/modules/newgame.sh) - cmd_install() implementieren
- Quadlet-Template erstellen
- Pipeline erweitern
Monitoring erweitern:
- Prometheus Metrics (podman metrics)
- Grafana Dashboards
- Alerting (bei Service-Ausfällen)
Zusammenfassung
gameadm Production Deployment bietet:
🚀 Enterprise-Grade Deployment
- Single-Host Production mit Podman + systemd
- Rootless Container für maximale Sicherheit
- Zero-Downtime Updates mit Rollback
🔧 CI/CD Integration
- Woodpecker Pipeline für automatische Deployments
- SSH-basierte Remote-Deployments
- Health-Check-gesteuerte Updates
📊 Monitoring & Reliability
- Automatische Health Checks
- Backup-basierte Disaster Recovery
- systemd Service Integration
🎮 Game Server Ready
- Minecraft Server (Port 25565)
- Rust Server (Port 28015/28016)
- Modular erweiterbar für weitere Spiele
Das System ist production-ready und bietet Enterprise-Standards für Game-Server-Hosting!