156 lines
2.8 KiB
Markdown
156 lines
2.8 KiB
Markdown
# 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
|
|
<iframe
|
|
src="https://ihre-domain.de/wetterstation/"
|
|
width="100%"
|
|
height="1200"
|
|
frameborder="0"
|
|
style="border: none;">
|
|
</iframe>
|
|
```
|
|
|
|
## 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
|
|
└── ...
|
|
```
|