# MYP System - Installationsanleitung

Dieses Dokument beschreibt die Installation des MYP-Systems, bestehend aus einem Frontend und einem Backend.

## Systemanforderungen

- **Frontend**: 
  - Raspberry Pi 3B+ oder neuer (empfohlen: Pi 4 mit mindestens 2GB RAM)
  - Raspbian/Raspberry Pi OS (64-bit empfohlen)
  - Docker und Docker Compose (werden automatisch installiert)
  - Internet-Zugang für die Installation
  - Zwei Netzwerk-Schnittstellen:
    - Eine mit Internet-Zugang
    - Eine für die Verbindung zum Backend-Netzwerk

- **Backend**:
  - Raspberry Pi 3B+ oder neuer (empfohlen: Pi 4 mit mindestens 2GB RAM)
  - Raspbian/Raspberry Pi OS (64-bit empfohlen) 
  - Docker und Docker Compose (werden automatisch installiert)
  - Verbindung zum Druckernetzwerk

## 1. Installation des Backends

Das Backend wird auf dem ersten Raspberry Pi installiert, der mit den Smart Plugs verbunden ist.

```bash
# Den Code auf den Raspberry Pi kopieren
scp -r /pfad/zum/projektverzeichnis pi@raspberry-backend:/home/pi/myp

# SSH-Verbindung herstellen
ssh pi@raspberry-backend

# In das Projektverzeichnis wechseln
cd /home/pi/myp

# Installations-Skript ausführbar machen und ausführen
chmod +x install-backend.sh
./install-backend.sh
```

Das Skript erledigt folgende Aufgaben:
- Installation von Docker und Docker Compose (falls nicht vorhanden)
- Erstellung der nötigen Verzeichnisse und Dateien
- Erstellung und Start des Docker-Containers
- Initialisierung der Datenbank
- Überprüfung, ob der Service korrekt läuft

Nach erfolgreicher Installation ist das Backend unter `http://raspberry-backend:5000` erreichbar.

## 2. Installation des Frontends

Das Frontend wird auf dem zweiten Raspberry Pi installiert, der mit dem Unternehmensnetzwerk verbunden ist.

```bash
# Den Code auf den Raspberry Pi kopieren
scp -r /pfad/zum/projektverzeichnis pi@raspberry-frontend:/home/pi/myp

# SSH-Verbindung herstellen
ssh pi@raspberry-frontend

# In das Projektverzeichnis wechseln
cd /home/pi/myp

# Installations-Skript ausführbar machen und ausführen
chmod +x install-frontend.sh
./install-frontend.sh
```

Das Skript erledigt folgende Aufgaben:
- Installation von Docker und Docker Compose (falls nicht vorhanden) 
- Erstellung der benötigten Verzeichnisse und Dateien
- Erstellung und Start des Docker-Containers
- Überprüfung, ob der Service korrekt läuft

Nach erfolgreicher Installation ist das Frontend unter `http://raspberry-frontend:3000` erreichbar.

## 3. Konfiguration der Verbindung zwischen Frontend und Backend

Für die Kommunikation zwischen Frontend und Backend muss die API-URL im Frontend konfiguriert werden:

1. Die Datei `/home/pi/myp/packages/reservation-platform/.env` auf dem Frontend-Raspberry Pi bearbeiten:

```
# Basic Server Configuration
RUNTIME_ENVIRONMENT=prod
DB_PATH=db/sqlite.db

# OAuth Configuration
OAUTH_CLIENT_ID=client_id
OAUTH_CLIENT_SECRET=client_secret

# Backend-URL (Hostname oder IP-Adresse des Backend-Raspberry Pi)
NEXT_PUBLIC_API_URL=http://raspberry-backend:5000
```

2. Frontend-Container neu starten:

```bash
cd /home/pi/myp/packages/reservation-platform
docker-compose down
docker-compose up -d
```

## 4. Wartung und Fehlerbehebung

### Logs anzeigen

**Backend:**
```bash
docker logs -f myp-backend
```

**Frontend:**
```bash
docker logs -f myp-frontend
```

### Container neustarten

**Backend:**
```bash
cd /pfad/zum/backend
docker-compose restart
```

**Frontend:**
```bash
cd /pfad/zum/frontend
docker-compose restart
```

### Datenbank-Reset

Sollte die Datenbank zurückgesetzt werden müssen:

```bash
# Auf dem Backend-Raspberry Pi
cd /home/pi/myp/backend
docker-compose down
rm -f instance/myp.db
docker-compose up -d
```

### Docker Compose YAML-Fehler

Wenn Sie einen YAML-Fehler in der Docker Compose-Datei erhalten:

```
yaml: line 12: did not find expected key
```

Überprüfen Sie folgende Punkte:
1. Die Docker Compose-Version könnte veraltet sein. Die Installationsskripte installieren automatisch die richtige Version.
2. Es könnte ein Syntaxfehler in der YAML-Datei vorliegen. Prüfen Sie insbesondere komplexe Werte wie JSON-Strings.

Fehlerbehebung:
```bash
# Auf dem betroffenen Server
cd /home/pi/myp
# Für das Backend
nano backend/docker-compose.yml
# Für das Frontend
nano packages/reservation-platform/docker-compose.yml
```

### Docker-Daemon läuft nicht

Wenn Sie die Fehlermeldung erhalten, dass der Docker-Daemon nicht läuft:

```
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
```

Starten Sie den Docker-Daemon:
```bash
sudo systemctl start docker
# oder
sudo service docker start
```

### Container startet nicht

Wenn der Container nicht startet, prüfen Sie die Logs:

```bash
docker logs myp-backend
# oder
docker logs myp-frontend
```

### Frontend kann nicht auf Backend zugreifen

1. Stellen Sie sicher, dass beide Server im selben Netzwerk sind
2. Überprüfen Sie die Firewall-Einstellungen
3. Stellen Sie sicher, dass der Backend-Service auf Port 5000 läuft
4. Stellen Sie sicher, dass die richtige Backend-URL in der .env-Datei des Frontends eingestellt ist

## 5. Automatischer Start beim Systemstart

Die Docker-Container sind so konfiguriert, dass sie automatisch beim Neustart der Geräte starten (`restart: unless-stopped`).

Sollte dies nicht funktionieren, kann der Start in die `/etc/rc.local` eingetragen werden:

```bash
# Auf dem Backend-Raspberry Pi
echo "cd /home/pi/myp/backend && docker-compose up -d" >> /etc/rc.local

# Auf dem Frontend-Raspberry Pi
echo "cd /home/pi/myp/packages/reservation-platform && docker-compose up -d" >> /etc/rc.local
```

## 6. Technische Details

- Das Backend ist eine Flask-Anwendung, die mit den Smart Plugs kommuniziert
- Das Frontend ist eine Next.js-Anwendung
- Beide Komponenten laufen in Docker-Containern mit Host-Netzwerkanbindung
- Die Datenbanken werden in Docker-Volumes persistiert

## 7. Raspberry Pi-spezifische Anmerkungen

Wenn Sie Probleme mit der Docker-Installation auf dem Raspberry Pi haben, können Sie folgende Schritte manuell ausführen:

```bash
# Docker für Raspberry Pi installieren
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

# Docker Compose für die richtige Architektur installieren
# Für 32-bit (armhf):
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-armv7" -o /usr/local/bin/docker-compose

# Für 64-bit (arm64):
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-aarch64" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose
```

## 8. Unterstützung

Bei Fragen oder Problemen wenden Sie sich an:
- Till Tomczak (Projektentwickler)