6.5 KiB
6.5 KiB
MYP Backend - Produktions-Setup Anleitung
Diese Anleitung beschreibt die Installation und Konfiguration des MYP Backends für den Produktionsbetrieb.
Voraussetzungen
- Linux-Server (Ubuntu 20.04 LTS oder höher empfohlen)
- Python 3.8 oder höher
- Nginx (optional, für Reverse Proxy)
- Systemd (für Service-Management)
Installation
1. System-Updates und Abhängigkeiten
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip python3-venv nginx sqlite3 -y
2. Benutzer und Verzeichnisse erstellen
# MYP-Benutzer erstellen
sudo useradd --system --group --home /opt/myp myp
# Verzeichnisse erstellen
sudo mkdir -p /opt/myp/{backend,logs}
sudo chown -R myp:myp /opt/myp
3. Anwendung installieren
# Als myp-Benutzer wechseln
sudo -u myp bash
# In das Backend-Verzeichnis wechseln
cd /opt/myp/backend
# Repository klonen (oder Dateien kopieren)
# git clone https://github.com/your-org/myp.git .
# Virtual Environment erstellen
python3 -m venv /opt/myp/venv
source /opt/myp/venv/bin/activate
# Dependencies installieren
pip install -r requirements.txt
4. Konfiguration
# Umgebungsvariablen konfigurieren
cp env.example .env
nano .env
# Wichtige Konfigurationen:
# - SECRET_KEY: Sicheren Schlüssel generieren
# - TAPO_USERNAME/TAPO_PASSWORD: Tapo-Anmeldedaten
# - PRINTERS: Drucker-Konfiguration als JSON
Beispiel für sichere SECRET_KEY-Generierung:
python3 -c "import secrets; print(secrets.token_hex(32))"
5. Datenbank initialisieren
# Datenbank-Verzeichnis erstellen
mkdir -p instance
# Flask-Anwendung starten, um Datenbank zu initialisieren
python3 app.py
# Ctrl+C nach erfolgreicher Initialisierung
6. Systemd Service einrichten
# Als root-Benutzer
sudo cp myp-backend.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable myp-backend
sudo systemctl start myp-backend
7. Service-Status überprüfen
sudo systemctl status myp-backend
sudo journalctl -u myp-backend -f
Nginx Reverse Proxy (Optional)
Nginx-Konfiguration erstellen
sudo nano /etc/nginx/sites-available/myp-backend
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
}
# Statische Dateien direkt ausliefern
location /static/ {
alias /opt/myp/backend/static/;
expires 1h;
add_header Cache-Control "public, immutable";
}
# Health Check
location /monitoring/health/simple {
access_log off;
proxy_pass http://127.0.0.1:5000;
}
}
Nginx aktivieren
sudo ln -s /etc/nginx/sites-available/myp-backend /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
SSL/HTTPS Setup (Empfohlen)
Mit Let's Encrypt (Certbot)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com
Umgebungsvariable für HTTPS setzen
# In .env-Datei
FORCE_HTTPS=true
Monitoring und Logs
Log-Dateien
- Anwendungs-Logs:
/opt/myp/backend/logs/myp.log
- Error-Logs:
/opt/myp/backend/logs/myp-errors.log
- Security-Logs:
/opt/myp/backend/logs/security.log
- Systemd-Logs:
journalctl -u myp-backend
Health Check-Endpunkte
- Einfacher Health Check:
http://your-domain.com/monitoring/health/simple
- Detaillierter Health Check:
http://your-domain.com/monitoring/health
- System-Metriken:
http://your-domain.com/monitoring/metrics
- Anwendungsinfo:
http://your-domain.com/monitoring/info
Wartung und Updates
Service neustarten
sudo systemctl restart myp-backend
Logs rotieren
Die Log-Rotation ist automatisch konfiguriert. Bei Bedarf manuell:
sudo logrotate -f /etc/logrotate.d/myp-backend
Updates installieren
sudo -u myp bash
cd /opt/myp/backend
source /opt/myp/venv/bin/activate
# Code aktualisieren
git pull
# Dependencies aktualisieren
pip install -r requirements.txt --upgrade
# Service neustarten
sudo systemctl restart myp-backend
Datenbank-Backup
# Backup erstellen
sudo -u myp sqlite3 /opt/myp/backend/instance/myp.db ".backup /opt/myp/backup/myp_$(date +%Y%m%d_%H%M%S).db"
# Automatisches Backup via Cron
sudo -u myp crontab -e
# Füge hinzu: 0 2 * * * sqlite3 /opt/myp/backend/instance/myp.db ".backup /opt/myp/backup/myp_$(date +\%Y\%m\%d_\%H\%M\%S).db"
Sicherheit
Firewall konfigurieren
sudo ufw allow ssh
sudo ufw allow 'Nginx Full'
sudo ufw --force enable
Fail2Ban für zusätzlichen Schutz
sudo apt install fail2ban -y
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
Regelmäßige Security-Updates
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades
Troubleshooting
Service startet nicht
# Logs überprüfen
sudo journalctl -u myp-backend --no-pager
sudo -u myp cat /opt/myp/backend/logs/myp-errors.log
Hohe Speichernutzung
# Memory-Statistiken
sudo systemctl status myp-backend
sudo ps aux | grep gunicorn
Datenbankprobleme
# Datenbank-Integrität prüfen
sudo -u myp sqlite3 /opt/myp/backend/instance/myp.db "PRAGMA integrity_check;"
Netzwerk-Konnektivität
# Port-Verfügbarkeit prüfen
sudo netstat -tlnp | grep :5000
curl -I http://localhost:5000/monitoring/health/simple
Performance-Optimierung
Gunicorn Worker anpassen
# In .env oder Service-Datei
WORKERS=8 # 2 * CPU-Kerne + 1
Nginx-Caching aktivieren
# In Nginx-Konfiguration
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
SQLite-Optimierung
-- Für bessere Performance (einmalig ausführen)
PRAGMA journal_mode=WAL;
PRAGMA synchronous=NORMAL;
PRAGMA cache_size=10000;
PRAGMA temp_store=memory;
Support
Bei Problemen oder Fragen:
- Überprüfen Sie die Log-Dateien
- Testen Sie die Health Check-Endpunkte
- Konsultieren Sie die Systemd-Logs
- Kontaktieren Sie das Entwicklungsteam