# **Bereitstellungsdetails und Best Practices** In diesem Abschnitt erläutere ich, wie das MYP-Projekt auf einem Server bereitgestellt wird, sowie empfohlene Praktiken zur Verwaltung und Optimierung des Systems. --- ## **1. Bereitstellungsschritte** ### **1.1. Voraussetzungen** - **Server:** Raspberry Pi mit installiertem Raspbian Lite. - **Docker:** Docker und Docker Compose müssen vorab installiert sein. - **Netzwerk:** Der Server muss über eine statische IP-Adresse oder einen DNS-Namen erreichbar sein. ### **1.2. Vorbereitung** #### **1.2.1. Docker-Images erstellen und speichern** Führen Sie die folgenden Schritte auf dem Entwicklungssystem aus: 1. **Images erstellen:** ```bash bash docker/build.sh ``` 2. **Images exportieren und komprimieren:** ```bash bash docker/save.sh ``` Dies speichert die Docker-Images im Verzeichnis `docker/images/`. #### **1.2.2. Übertragung auf den Server** Kopieren Sie die erzeugten `.tar.xz`-Dateien auf den Raspberry Pi: ```bash scp docker/images/*.tar.xz @:/path/to/destination/ ``` --- ### **1.3. Images auf dem Server laden** Loggen Sie sich auf dem Server ein und laden Sie die Docker-Images: ```bash docker load -i /path/to/destination/.tar.xz ``` --- ### **1.4. Starten der Anwendung** Führen Sie das Bereitstellungsskript aus: ```bash bash docker/deploy.sh ``` Dieses Skript: - Startet die Docker-Container mithilfe von `docker compose`. - Verbindet den Reverse Proxy (Caddy) mit der Anwendung. Die Anwendung sollte unter `http://` oder der konfigurierten Domain erreichbar sein. --- ## **2. Best Practices** ### **2.1. Sicherheit** 1. **Umgebungsvariablen schützen:** - Stellen Sie sicher, dass die Datei `.env` nicht versehentlich in ein öffentliches Repository hochgeladen wird. - Verwenden Sie geeignete Zugriffsrechte: ```bash chmod 600 .env ``` 2. **HTTPS aktivieren:** - Der Caddy-Webserver unterstützt automatisch HTTPS. Stellen Sie sicher, dass eine gültige Domain konfiguriert ist. 3. **Zugriffsrechte beschränken:** - Verwenden Sie Benutzerrollen („admin“, „guest“), um den Zugriff auf kritische Funktionen zu steuern. --- ### **2.2. Performance** 1. **Docker-Container optimieren:** - Reduzieren Sie die Größe der Docker-Images, indem Sie unnötige Dateien in `.dockerignore` ausschließen. 2. **Datenbankwartung:** - Führen Sie regelmäßige Backups der SQLite-Datenbank durch: ```bash cp db/sqlite.db /path/to/backup/location/ ``` - Optimieren Sie die Datenbank regelmäßig: ```sql VACUUM; ``` 3. **Skalierung:** - Bei hoher Last kann die Anwendung mit Kubernetes oder einer Cloud-Lösung (z. B. AWS oder Azure) skaliert werden. --- ### **2.3. Fehlerbehebung** 1. **Logs überprüfen:** - Docker-Logs können wichtige Debug-Informationen liefern: ```bash docker logs ``` 2. **Health Checks:** - Integrieren Sie Health Checks in die Docker Compose-Datei, um sicherzustellen, dass die Dienste korrekt laufen. 3. **Fehlerhafte Drucker deaktivieren:** - Deaktivieren Sie Drucker mit einer hohen Fehlerrate über das Admin-Dashboard, um die Benutzererfahrung zu verbessern. --- ### **2.4. Updates** 1. **Neue Funktionen hinzufügen:** - Aktualisieren Sie die Anwendung und erstellen Sie neue Docker-Images: ```bash git pull origin main bash docker/build.sh ``` - Stellen Sie die aktualisierten Images bereit: ```bash bash docker/deploy.sh ``` 2. **Datenbankmigrationen:** - Führen Sie neue Migrationsskripte mit folgendem Befehl aus: ```bash pnpm run db:migrate ``` --- ## **3. Backup und Wiederherstellung** ### **3.1. Backups erstellen** Sichern Sie wichtige Dateien und Datenbanken regelmäßig: - **SQLite-Datenbank:** ```bash cp db/sqlite.db /backup/location/sqlite-$(date +%F).db ``` - **Docker-Images:** ```bash docker save myp-rp:latest | gzip > /backup/location/myp-rp-$(date +%F).tar.gz ``` ### **3.2. Wiederherstellung** - **Datenbank wiederherstellen:** ```bash cp /backup/location/sqlite-.db db/sqlite.db ``` - **Docker-Images importieren:** ```bash docker load < /backup/location/myp-rp-.tar.gz ``` Nächster Schritt: [=> Admin-Dashboard](./Admin-Dashboard.md)