# MYP Frontend - Installationsanleitung ## Übersicht Das MYP Frontend ist eine Next.js-Anwendung, die mit Docker und Caddy als Reverse Proxy betrieben wird. Das konsolidierte Setup-Skript automatisiert die komplette Installation und Konfiguration. ## Systemanforderungen - **Betriebssystem**: Debian/Raspbian (Raspberry Pi OS) - **Hardware**: Raspberry Pi 4 oder höher (empfohlen) - **RAM**: Mindestens 2GB - **Speicher**: Mindestens 8GB freier Speicherplatz - **Netzwerk**: Internetverbindung für Installation ## Schnellstart ### Automatische Installation ```bash # Als Root ausführen sudo bash frontend/setup.sh ``` Das Skript bietet ein interaktives Menü mit folgenden Optionen: 1. **Vollständige Frontend-Installation** - Komplette Neuinstallation 2. **SSL-Zertifikate neu generieren** - Erneuert nur die Zertifikate 3. **Service-Status prüfen** - Diagnose und Monitoring 4. **Beenden** - Script verlassen ## Detaillierte Installationsschritte ### 1. System-Vorbereitung Das Skript führt automatisch folgende Schritte durch: - **System-Update**: Paketlisten aktualisieren - **Grundtools installieren**: curl, wget, git, openssl, etc. - **Internetverbindung prüfen**: Verfügbarkeit der benötigten Ressourcen ### 2. Docker-Installation - **Docker CE**: Container-Runtime - **Docker Compose**: Multi-Container-Orchestrierung - **Service-Aktivierung**: Automatischer Start beim Boot ### 3. SSL-Zertifikate (Mercedes) Das Skript erstellt selbstsignierte SSL-Zertifikate mit folgenden Eigenschaften: **Zertifikat-Details:** - **Organisation**: Mercedes-Benz AG - **Abteilung**: IT-Abteilung - **Standort**: Stuttgart, Baden-Württemberg, Deutschland - **Primäre Domain**: `m040tbaraspi001.de040.corpintra.net` **Subject Alternative Names (SAN):** - `m040tbaraspi001.de040.corpintra.net` - `m040tbaraspi001` - `localhost` - `raspberrypi` - `127.0.0.1` - `192.168.0.109` **Speicherorte:** - Zertifikat: `/etc/ssl/certs/myp/frontend.crt` - Privater Schlüssel: `/etc/ssl/certs/myp/frontend.key` - System-CA-Store: `/usr/local/share/ca-certificates/` ### 4. Frontend-Deployment - **Zielverzeichnis**: `/opt/myp-frontend` - **Dateisynchronisation**: Exclude node_modules, .git, ssl - **Berechtigungen**: Root-Ownership mit korrekten Permissions ### 5. Docker Compose Konfiguration **Services:** 1. **frontend-app** - Build: Next.js Application - Port: 3000 (intern) - Environment: Production - Health Check: `/health` Endpoint 2. **caddy** - Image: caddy:latest - Ports: 80 (HTTP), 443 (HTTPS) - SSL-Termination und Reverse Proxy - Security Headers und Compression 3. **db** - SQLite-Container mit persistenten Volumes - Datenverzeichnis: `/data` **Volumes:** - `caddy_data`: Caddy-Daten persistent - `caddy_config`: Caddy-Konfiguration - `db_data`: Datenbank-Dateien ### 6. Systemd-Service **Service-Name**: `myp-frontend.service` **Eigenschaften:** - **Auto-Start**: Beim Boot aktiviert - **Dependencies**: Startet nach Docker - **Management**: Standard systemctl-Befehle - **Logging**: Journald-Integration - **Sicherheit**: Sandboxed mit eingeschränkten Berechtigungen ### 7. Firewall-Konfiguration **UFW-Regeln:** - **SSH**: Port 22 (Remote-Zugang) - **HTTP**: Port 80 (Redirect zu HTTPS) - **HTTPS**: Port 443 (Hauptzugang) - **Lokale Verbindungen**: 127.0.0.1, ::1 - **Mercedes-Netzwerke**: 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12 ## Zugang zur Anwendung Nach erfolgreicher Installation ist das Frontend verfügbar unter: - **Primär**: https://m040tbaraspi001.de040.corpintra.net - **Lokal**: https://localhost - **IP-Direkt**: https://192.168.0.109 ## Service-Management ### Status prüfen ```bash # Systemd Service Status sudo systemctl status myp-frontend # Docker Container Status cd /opt/myp-frontend sudo docker compose ps # Live-Logs anzeigen sudo docker compose logs -f ``` ### Service-Kontrolle ```bash # Service starten sudo systemctl start myp-frontend # Service stoppen sudo systemctl stop myp-frontend # Service neustarten sudo systemctl restart myp-frontend # Service deaktivieren sudo systemctl disable myp-frontend ``` ### Container-Management ```bash # Alle Container neustarten cd /opt/myp-frontend sudo docker compose restart # Einzelnen Container neustarten sudo docker compose restart caddy sudo docker compose restart frontend-app # Container-Logs einzeln sudo docker compose logs caddy sudo docker compose logs frontend-app ``` ## Troubleshooting ### Häufige Probleme #### 1. Frontend nicht erreichbar **Diagnose:** ```bash # Service-Status prüfen sudo systemctl status myp-frontend # Container-Status prüfen cd /opt/myp-frontend sudo docker compose ps # Netzwerk-Test curl -k -I https://localhost/health ``` **Lösungsansätze:** - Container neu starten: `sudo docker compose restart` - Service neu starten: `sudo systemctl restart myp-frontend` - Logs prüfen: `sudo docker compose logs` #### 2. SSL-Zertifikat-Probleme **Diagnose:** ```bash # Zertifikat-Gültigkeit prüfen openssl x509 -in /etc/ssl/certs/myp/frontend.crt -noout -dates # SSL-Verbindung testen openssl s_client -connect localhost:443 -servername m040tbaraspi001.de040.corpintra.net ``` **Lösung:** ```bash # Zertifikate neu generieren sudo bash frontend/setup.sh # Dann Option 2 wählen (SSL-Zertifikate neu generieren) ``` #### 3. Docker-Build Fehler **Diagnose:** ```bash # Build-Logs prüfen cd /opt/myp-frontend sudo docker compose build --no-cache # Speicherplatz prüfen df -h ``` **Lösungsansätze:** - Docker aufräumen: `sudo docker system prune -a` - Neuinstallation: Frontend-Verzeichnis löschen und setup.sh erneut ausführen #### 4. Port-Konflikte **Diagnose:** ```bash # Port-Belegung prüfen sudo netstat -tlnp | grep -E ':(80|443)' sudo ss -tlnp | grep -E ':(80|443)' ``` **Lösung:** - Konflikt-Services stoppen - UFW-Regeln prüfen: `sudo ufw status` ### Log-Dateien **Installation:** - `/var/log/myp-frontend-install.log` **Caddy:** - `/var/log/caddy/access.log` - `/var/log/caddy/error.log` **Docker:** ```bash # Container-Logs sudo docker compose logs frontend-app sudo docker compose logs caddy # Systemd-Journal sudo journalctl -u myp-frontend -f ``` ## Sicherheitshinweise ### SSL/TLS - Selbstsignierte Zertifikate erfordern Ausnahmen im Browser - Für Produktion sollten CA-signierte Zertifikate verwendet werden - Automatische HTTP-zu-HTTPS-Weiterleitung ist aktiviert ### Firewall - Restriktive Einstellungen - nur notwendige Ports geöffnet - Mercedes-interne Netzwerke sind zugelassen - Externe Zugriffe werden standardmäßig blockiert ### Container-Sicherheit - Container laufen mit minimalen Berechtigungen - Sensitive Dateien sind read-only gemountet - Netzwerk-Isolation zwischen Containern ## Backup und Wartung ### Backup wichtiger Dateien ```bash # SSL-Zertifikate sudo cp -r /etc/ssl/certs/myp /backup/ssl-certificates-$(date +%Y%m%d) # Anwendungsdaten sudo cp -r /opt/myp-frontend /backup/frontend-$(date +%Y%m%d) # Docker Volumes sudo docker run --rm -v myp-frontend_db_data:/data -v /backup:/backup alpine \ tar czf /backup/db-data-$(date +%Y%m%d).tar.gz -C /data . ``` ### Regelmäßige Wartung ```bash # Docker-System aufräumen (monatlich) sudo docker system prune -f # Log-Dateien rotieren (wöchentlich) sudo logrotate -f /etc/logrotate.conf # SSL-Zertifikat-Ablauf prüfen (monatlich) openssl x509 -in /etc/ssl/certs/myp/frontend.crt -noout -dates ``` ## Performance-Optimierung ### Raspberry Pi spezifisch - **Memory Swappiness**: Reduziert auf 10 - **I/O Scheduler**: Optimiert für SD-Karten - **CPU Scheduling**: Verbesserte Interaktivität - **Caching**: Effiziente Nutzung des verfügbaren RAMs ### Container-Optimierung - **Multi-Stage Builds**: Reduzierte Image-Größen - **Health Checks**: Automatische Fehlerbehandlung - **Resource Limits**: Verhindert Memory-Leaks - **Restart Policies**: Automatische Wiederherstellung ## Support und Weiterentwicklung ### Konfiguration anpassen - **Caddy**: `frontend/docker/caddy/Caddyfile` bearbeiten - **Docker Compose**: `docker-compose.yml` in `/opt/myp-frontend` - **SSL**: Setup-Skript mit Option 2 für neue Zertifikate ### Monitoring - **Health Endpoints**: `/health` für Verfügbarkeitsprüfung - **Logs**: Strukturierte JSON-Logs von Caddy - **Metrics**: Docker-Container-Statistiken ### Updates ```bash # Frontend-Code aktualisieren cd /opt/myp-frontend sudo git pull origin main sudo docker compose build --no-cache sudo docker compose up -d # System-Updates sudo apt update && sudo apt upgrade -y sudo reboot ``` --- **Version**: 1.0.0 **Letzte Aktualisierung**: $(date '+%Y-%m-%d') **Autor**: MYP Development Team