150 lines
4.3 KiB
Markdown
150 lines
4.3 KiB
Markdown
# **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 <image-name>
|
|
```
|
|
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 <username>@<server-ip>:/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/<image-name>.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://<server-ip>` 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 <container-name>
|
|
```
|
|
|
|
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-<date>.db db/sqlite.db
|
|
```
|
|
- **Docker-Images importieren:**
|
|
```bash
|
|
docker load < /backup/location/myp-rp-<date>.tar.gz
|
|
```
|
|
|
|
Nächster Schritt: [=> Admin-Dashboard](./Admin-Dashboard.md) |