Files
chrani-bot-tng/bot/resources/GUIDELINES_DEPLOYMENT.md
2025-11-21 07:26:02 +01:00

14 KiB

chrani-bot-tng Deployment-Anleitung

Umfassende Anleitung zur Installation, Konfiguration und zum Betrieb von chrani-bot-tng mit modernem Python, gunicorn und nginx.

Inhaltsverzeichnis

  1. Systemanforderungen
  2. Schnellstart - Lokales Testen
  3. Produktions-Deployment mit gunicorn
  4. Deployment mit nginx (Reverse Proxy)
  5. Systemd-Service einrichten
  6. Fehlerbehebung
  7. Wartung und Updates

Systemanforderungen

Unterstützte Systeme

  • Linux: Ubuntu 20.04+, Debian 10+, CentOS 8+, Fedora, Arch Linux
  • Python: 3.8 oder höher (empfohlen: Python 3.10+)
  • Weitere Software:
    • Git
    • pip (Python Package Manager)
    • virtualenv oder venv
    • Optional: nginx (für Reverse Proxy)
    • Optional: systemd (für Service-Management)

Mindestanforderungen Hardware

  • CPU: 1 Core
  • RAM: 512 MB (1 GB empfohlen)
  • Festplatte: 500 MB freier Speicher

Schnellstart - Lokales Testen

Diese Anleitung zeigt Ihnen, wie Sie chrani-bot-tng lokal auf Ihrem Computer zum Testen ausführen können.

Schritt 1: Repository klonen

cd ~
git clone https://github.com/your-username/chrani-bot-tng.git
cd chrani-bot-tng

Schritt 2: Python Virtual Environment erstellen

Ein Virtual Environment isoliert die Python-Abhängigkeiten des Projekts von Ihrem System.

# Virtual Environment erstellen
python3 -m venv venv

# Virtual Environment aktivieren
source venv/bin/activate

# Ihr Prompt sollte jetzt mit (venv) beginnen

Schritt 3: Abhängigkeiten installieren

# pip aktualisieren
pip install --upgrade pip

# Projektabhängigkeiten installieren
pip install -r requirements.txt

Schritt 4: Konfiguration anpassen

Die Bot-Konfiguration befindet sich in JSON-Dateien im bot/options/ Verzeichnis.

# Verzeichnis prüfen
ls -la bot/options/

# Beispiel: Webserver-Konfiguration bearbeiten
nano bot/options/module_webserver.json

Wichtige Einstellungen in module_webserver.json:

{
  "host": "0.0.0.0",
  "port": 5000,
  "Flask_secret_key": "ÄNDERN-SIE-DIES-IN-PRODUKTION"
}

Telnet-Konfiguration (für Verbindung zum 7 Days to Die Server):

nano bot/options/module_telnet.json

Passen Sie die Telnet-Verbindungsdetails an Ihren Gameserver an.

Schritt 5: Bot starten (Entwicklungsmodus)

Es gibt zwei Möglichkeiten, den Bot zu starten:

Methode A: Standalone-Modus (Flask Development Server)

# Mit dem originalen Entry-Point
python3 app.py

Der Bot sollte starten und ausgeben:

modules started: ['module_dom', 'module_storage', 'module_telnet', ...]

Der Webserver läuft auf: http://localhost:5000

Methode B: Mit gunicorn (empfohlen für Tests)

# Mit gunicorn starten (wie in Produktion)
gunicorn -c gunicorn.conf.py wsgi:application

Vorteile:

  • Näher an der Produktionsumgebung
  • Bessere Performance
  • WebSocket-Support optimiert

Schritt 6: Im Browser testen

Öffnen Sie Ihren Browser und navigieren Sie zu:

http://localhost:5000

Sie sollten die LCARS-Style Weboberfläche sehen. Klicken Sie auf "use your steam-account to log in" um sich zu authentifizieren.

Schritt 7: Bot beenden

# STRG+C drücken um den Bot zu stoppen

# Virtual Environment deaktivieren
deactivate

Produktions-Deployment mit gunicorn

Für den Produktionsbetrieb ist gunicorn deutlich besser geeignet als der Flask Development Server.

Warum gunicorn?

  • Performance: Optimiert für hohe Last und viele gleichzeitige Verbindungen
  • Stabilität: Automatisches Neustart bei Fehlern
  • WebSocket-Support: Mit gevent-websocket-Worker für Socket.IO optimiert
  • Production-Ready: Bewährt in vielen großen Projekten

Schritt 1: Konfiguration überprüfen

Die Datei gunicorn.conf.py enthält die gunicorn-Konfiguration:

nano gunicorn.conf.py

Wichtige Einstellungen:

# Server Socket - wo gunicorn lauscht
bind = "0.0.0.0:5000"  # Alle Interfaces, Port 5000

# Worker - WICHTIG: Für WebSocket nur 1 Worker!
workers = 1
worker_class = "geventwebsocket.gunicorn.workers.GeventWebSocketWorker"  # für WebSocket-Upgrades
worker_connections = 1000

# Timeouts
timeout = 120
keepalive = 5

Hinweis: In wsgi.py exportiert wsgi:application die Flask-App (webserver_module.app), WebSockets laufen über den gevent-websocket-Worker.

Schritt 2: Bot mit gunicorn starten

# Virtual Environment aktivieren
cd ~/chrani-bot-tng
source venv/bin/activate

# Mit gunicorn starten
gunicorn -c gunicorn.conf.py wsgi:application

Sie sollten folgende Ausgabe sehen:

============================================================
chrani-bot-tng is starting...
============================================================
Worker spawned (pid: 12345)
Worker initialized (pid: 12345)
webserver: Running under WSGI server mode
modules started: [...]
============================================================
chrani-bot-tng is ready to accept connections
Listening on: 0.0.0.0:5000
============================================================

Schritt 3: Verbindung testen

# In einem neuen Terminal:
curl http://localhost:5000

# Oder im Browser:
# http://your-server-ip:5000

Schritt 4: Bot im Hintergrund laufen lassen

# Mit nohup (einfache Methode)
nohup gunicorn -c gunicorn.conf.py wsgi:application > gunicorn.log 2>&1 &

# Prozess-ID wird angezeigt
echo $! > gunicorn.pid

# Logs anschauen
tail -f gunicorn.log

# Bot stoppen
kill $(cat gunicorn.pid)

Besser: Verwenden Sie systemd (siehe Abschnitt unten)


Deployment mit nginx (Reverse Proxy)

nginx als Reverse Proxy bietet zusätzliche Vorteile:

  • SSL/TLS-Terminierung (HTTPS-Verschlüsselung)
  • Load Balancing (bei mehreren Instanzen)
  • Static File Serving (schnelleres Ausliefern von CSS/JS)
  • DDoS-Schutz und Rate Limiting
  • Besseres Logging

Schritt 1: nginx installieren

# Ubuntu/Debian
sudo apt update
sudo apt install nginx

# CentOS/RHEL
sudo yum install nginx

# Fedora
sudo dnf install nginx

Schritt 2: nginx-Konfiguration erstellen

# Beispielkonfiguration kopieren
sudo cp nginx.conf.example /etc/nginx/sites-available/chrani-bot-tng

# Konfiguration bearbeiten
sudo nano /etc/nginx/sites-available/chrani-bot-tng

Wichtige Anpassungen:

  1. Server-Name ändern:
server_name your-domain.com www.your-domain.com;
  1. SSL-Zertifikate (für HTTPS):
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
  1. Upstream-Server prüfen:
upstream chrani_bot_app {
    server 127.0.0.1:5000 fail_timeout=0;
}

Schritt 3: Konfiguration aktivieren

# Symlink erstellen
sudo ln -s /etc/nginx/sites-available/chrani-bot-tng /etc/nginx/sites-enabled/

# Standard-Site deaktivieren (optional)
sudo rm /etc/nginx/sites-enabled/default

# Konfiguration testen
sudo nginx -t

# Bei erfolgreicher Prüfung:
sudo systemctl reload nginx

Schritt 4: Firewall konfigurieren

# ufw (Ubuntu/Debian)
sudo ufw allow 'Nginx Full'
sudo ufw enable

# firewalld (CentOS/RHEL/Fedora)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Schritt 5: SSL-Zertifikat mit Let's Encrypt (optional)

# Certbot installieren
sudo apt install certbot python3-certbot-nginx  # Ubuntu/Debian
# sudo yum install certbot python3-certbot-nginx  # CentOS

# Zertifikat erstellen (interaktiv)
sudo certbot --nginx -d your-domain.com -d www.your-domain.com

# Automatische Erneuerung testen
sudo certbot renew --dry-run

Schritt 6: Zugriff testen

# HTTP (sollte zu HTTPS umleiten)
curl -I http://your-domain.com

# HTTPS
curl -I https://your-domain.com

Im Browser: https://your-domain.com


Systemd-Service einrichten

Mit systemd läuft chrani-bot-tng als System-Service, startet automatisch beim Booten und wird bei Fehlern neu gestartet.

Schritt 1: Service-Datei anpassen

# Service-Datei bearbeiten
nano chrani-bot-tng.service

Wichtige Anpassungen:

# Benutzer und Gruppe ändern
User=your-username
Group=your-username

# Pfade anpassen
WorkingDirectory=/home/your-username/chrani-bot-tng
Environment="PATH=/home/your-username/chrani-bot-tng/venv/bin"
ExecStart=/home/your-username/chrani-bot-tng/venv/bin/gunicorn -c gunicorn.conf.py wsgi:application

Schritt 2: Service installieren

# Service-Datei nach systemd kopieren
sudo cp chrani-bot-tng.service /etc/systemd/system/

# systemd neu laden
sudo systemctl daemon-reload

# Service aktivieren (Autostart beim Booten)
sudo systemctl enable chrani-bot-tng

# Service starten
sudo systemctl start chrani-bot-tng

Schritt 3: Service-Status prüfen

# Status anzeigen
sudo systemctl status chrani-bot-tng

# Logs anzeigen
sudo journalctl -u chrani-bot-tng -f

# Logs der letzten Stunde
sudo journalctl -u chrani-bot-tng --since "1 hour ago"

Schritt 4: Service-Befehle

# Service stoppen
sudo systemctl stop chrani-bot-tng

# Service neu starten
sudo systemctl restart chrani-bot-tng

# Service neu laden (bei Konfigurationsänderungen)
sudo systemctl reload chrani-bot-tng

# Autostart deaktivieren
sudo systemctl disable chrani-bot-tng

Fehlerbehebung

Problem: "Module not found" Fehler

Symptom: ImportError beim Starten

Lösung:

# Virtual Environment aktiviert?
source venv/bin/activate

# Dependencies neu installieren
pip install -r requirements.txt

# Python-Version prüfen (mindestens 3.8)
python3 --version

Problem: Port bereits in Benutzung

Symptom: "Address already in use"

Lösung:

# Prozess auf Port 5000 finden
sudo lsof -i :5000

# Oder mit netstat
sudo netstat -tulpn | grep :5000

# Prozess beenden
sudo kill -9 <PID>

# Oder anderen Port in gunicorn.conf.py verwenden

Problem: WebSocket-Verbindung schlägt fehl

Symptom: "WebSocket connection failed" im Browser

Lösung:

  1. Prüfen Sie, dass nur 1 Worker in gunicorn.conf.py konfiguriert ist:

    workers = 1
    worker_class = "gevent"
    
  2. nginx-Konfiguration prüfen (WebSocket-Headers):

    location /socket.io/ {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    

Problem: 502 Bad Gateway (nginx)

Symptom: nginx zeigt "502 Bad Gateway"

Lösung:

# Ist gunicorn gestartet?
sudo systemctl status chrani-bot-tng

# Logs prüfen
sudo journalctl -u chrani-bot-tng -n 50

# nginx-Fehlerlog prüfen
sudo tail -f /var/log/nginx/chrani-bot-tng-error.log

# Upstream in nginx.conf prüfen
# Stimmt IP und Port mit gunicorn überein?

Problem: Hohe CPU-Last

Symptom: Server reagiert langsam, CPU bei 100%

Lösung:

# Prozesse prüfen
top -u your-username

# gunicorn-Worker-Anzahl anpassen (aber max. 1 für WebSocket!)
# Timeout erhöhen in gunicorn.conf.py
timeout = 300

# Logs auf Endlosschleifen prüfen
sudo journalctl -u chrani-bot-tng -f

Problem: Telnet-Verbindung zum Gameserver schlägt fehl

Symptom: Bot kann sich nicht mit dem 7 Days to Die Server verbinden

Lösung:

  1. Telnet-Einstellungen prüfen:

    nano bot/options/module_telnet.json
    
  2. Verbindung manuell testen:

    telnet <gameserver-ip> <telnet-port>
    # Passwort eingeben
    
  3. Firewall-Regeln prüfen

  4. Gameserver-Konfiguration prüfen (telnet aktiviert?)


Wartung und Updates

Code-Updates einspielen

# Zum Projektverzeichnis
cd ~/chrani-bot-tng

# Änderungen abrufen
git fetch origin

# Aktuellen Branch prüfen
git branch

# Updates herunterladen und anwenden
git pull origin main  # oder Ihr Branch-Name

# Dependencies aktualisieren
source venv/bin/activate
pip install -r requirements.txt --upgrade

# Service neu starten
sudo systemctl restart chrani-bot-tng

Backup erstellen

# Gesamtes Projektverzeichnis sichern
tar -czf chrani-bot-tng-backup-$(date +%Y%m%d).tar.gz ~/chrani-bot-tng

# Nur Konfiguration sichern
tar -czf chrani-bot-config-backup-$(date +%Y%m%d).tar.gz ~/chrani-bot-tng/bot/options

# Backup an sicheren Ort verschieben
mv chrani-bot-*.tar.gz /path/to/backup/location/

Logs rotieren

nginx rotiert Logs automatisch. Für gunicorn/systemd:

# Log-Größe prüfen
sudo journalctl --disk-usage

# Alte Logs löschen (älter als 7 Tage)
sudo journalctl --vacuum-time=7d

# Oder nach Größe (maximal 500 MB behalten)
sudo journalctl --vacuum-size=500M

Performance-Monitoring

# Systemressourcen überwachen
htop

# Nur chrani-bot-tng Prozesse
htop -u your-username

# Netzwerk-Verbindungen prüfen
sudo netstat -tulpn | grep gunicorn

# Echtzeit-Logs
sudo journalctl -u chrani-bot-tng -f

Zusammenfassung der Befehle

Lokaler Test (Schnellstart)

# Setup
git clone <repository-url>
cd chrani-bot-tng
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# Starten
gunicorn -c gunicorn.conf.py wsgi:application

# Stoppen: STRG+C

Produktions-Deployment

# Einmalige Einrichtung
sudo cp chrani-bot-tng.service /etc/systemd/system/
sudo cp nginx.conf.example /etc/nginx/sites-available/chrani-bot-tng
sudo ln -s /etc/nginx/sites-available/chrani-bot-tng /etc/nginx/sites-enabled/
sudo systemctl daemon-reload
sudo systemctl enable chrani-bot-tng
sudo systemctl enable nginx

# Starten
sudo systemctl start chrani-bot-tng
sudo systemctl start nginx

# Status
sudo systemctl status chrani-bot-tng
sudo journalctl -u chrani-bot-tng -f

Weitere Ressourcen


Support

Bei Problemen:

  1. Prüfen Sie die Logs: sudo journalctl -u chrani-bot-tng -n 100
  2. Suchen Sie in den GitHub Issues
  3. Erstellen Sie ein neues Issue mit:
    • Fehlermeldung
    • Logs
    • Systeminfo (OS, Python-Version, etc.)

Viel Erfolg mit chrani-bot-tng! 🚀