# Deployment auf externen Webserver ## Übersicht Das System generiert alle 4 Minuten statische HTML-Dateien mit aktuellen Wetterdaten und lädt sie auf einen externen Webserver hoch. ## Voraussetzungen 1. **SSH-Zugang** zum Webserver (passwortlos mit SSH-Key empfohlen) 2. **rsync** installiert (auf macOS bereits vorhanden) 3. **Python 3** mit venv 4. **API läuft lokal** (localhost:8000) ## Setup ### 1. Python-Abhängigkeiten installieren ```bash source .venv/bin/activate pip install requests ``` ### 2. Konfiguration anpassen Bearbeiten Sie `generate-static.py`: ```python REMOTE_SERVER = "user@ihr-server.de" # Ihr SSH-Zugang REMOTE_PATH = "/var/www/html/wetterstation" # Pfad auf dem Server ``` ### 3. SSH-Key Setup (einmalig) Für automatisches Upload ohne Passwort-Eingabe: ```bash # SSH-Key generieren (falls noch nicht vorhanden) ssh-keygen -t ed25519 # Public Key auf Server kopieren ssh-copy-id user@ihr-server.de # Test ssh user@ihr-server.de "echo 'Verbindung OK'" ``` ### 4. Frontend für statische Nutzung vorbereiten ```bash # App.jsx durch statische Version ersetzen cp frontend/src/App-static.jsx frontend/src/App.jsx ``` ### 5. Manueller Test ```bash python generate-static.py ``` Dies sollte: - Wetterdaten laden ✓ - Frontend bauen ✓ - Daten einbetten ✓ - Dateien hochladen ✓ ### 6. Cronjob installieren ```bash chmod +x setup-cronjob.sh ./setup-cronjob.sh ``` Der Cronjob läuft dann automatisch alle 4 Minuten. ## Zeitplan Der Cronjob läuft zu folgenden Zeiten: - 00:00, 00:04, 00:08, 00:12, ... - 01:00, 01:04, 01:08, 01:12, ... - etc. Um ihn z.B. immer 1 Minute nach dem 5-Minuten-Schritt zu starten: ```cron 1,6,11,16,21,26,31,36,41,46,51,56 * * * * /pfad/zum/script ``` ## Logs überwachen ```bash # Live-Logs anzeigen tail -f upload.log # Letzte Uploads anzeigen tail -20 upload.log ``` ## iframe in bestehende Webseite einbauen ```html ``` ## Fehlerbehebung ### Upload schlägt fehl ```bash # SSH-Verbindung testen ssh user@ihr-server.de # rsync manuell testen rsync -avz frontend/dist/ user@ihr-server.de:/var/www/html/wetterstation/ ``` ### API nicht erreichbar ```bash # API-Status prüfen curl http://localhost:8000/health ``` ### Cronjob läuft nicht ```bash # Cronjob-Log prüfen tail -f upload.log # Cronjobs anzeigen crontab -l # Script manuell ausführen python generate-static.py ``` ## Cronjob entfernen ```bash crontab -e # Zeile mit generate-static.py löschen ``` ## Verzeichnisstruktur auf dem Server Nach dem Upload sollte der Server folgende Struktur haben: ``` /var/www/html/wetterstation/ ├── index.html (mit eingebetteten Daten) ├── assets/ │ ├── index-xxx.js │ └── index-xxx.css └── ... ```