gameadm/PRODUCTION-DEPLOYMENT.md

301 lines
8.6 KiB
Markdown

# 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
```bash
# 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
```bash
# 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
```bash
# 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
```bash
# 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:
1. **Pre-Update Backup** (Config + Image Info)
2. **Health Check** vor Update
3. **Image Pull** (neues Container-Image)
4. **Graceful Restart** (podman auto-update)
5. **Post-Update Health Check**
6. **Cleanup** (alte Backups entfernen)
### Bei Update-Fehlern:
- Automatischer **Rollback** verfügbar
- **Backup-basierte Wiederherstellung**
- **Health-Check-gesteuerter Prozess**
```bash
# 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
```yaml
# .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
```ini
# ~/.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 Updates
- `maintainer=gameadm` - Kennzeichnung für gameadm
- `environment=production` - Production-Umgebung
## 7. Monitoring und Health Checks
### Health Check System:
```bash
# 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:
1. **Service Stop**
2. **Config Restore** (aus Backup)
3. **Image Rollback** (Container neu erstellen)
4. **Service Start**
5. **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:
```bash
# 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:**
```bash
gameadm-quadlet logs minecraft
journalctl --user -u minecraft
```
**Port-Konflikte:**
```bash
netstat -tlnp | grep 25565
gameadm-quadlet status minecraft
```
**Update-Fehler:**
```bash
gameadm-quadlet rollback minecraft
gameadm-quadlet health minecraft
```
**Service-Status prüfen:**
```bash
systemctl --user status minecraft
podman ps
```
## 11. Erweiterungen
### Neue Games hinzufügen:
1. **Modul erstellen** (`/etc/gameadm/modules/newgame.sh`)
2. **cmd_install() implementieren**
3. **Quadlet-Template** erstellen
4. **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!