add chapters and deploy script
This commit is contained in:
226
DEPLOY.md
Normal file
226
DEPLOY.md
Normal file
@@ -0,0 +1,226 @@
|
||||
# MathQuest Deployment Anleitung
|
||||
|
||||
Diese Anleitung erklärt, wie du MathQuest auf deinem Server deployst.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Server mit Ubuntu/Debian
|
||||
- Node.js installiert (Version 14 oder höher)
|
||||
- Nginx installiert
|
||||
- SSL-Zertifikat für lydix.de (Let's Encrypt)
|
||||
- Root-Zugriff oder sudo-Rechte
|
||||
|
||||
## Schritt 1: Dateien auf den Server kopieren
|
||||
|
||||
### Option A: Mit SCP (vom lokalen Rechner)
|
||||
|
||||
```bash
|
||||
# Vom lokalen Rechner aus:
|
||||
scp -r /home/lukas/nerd/mathquest/* user@dein-server:/var/www/mathquest/
|
||||
```
|
||||
|
||||
### Option B: Mit Git (wenn du ein Repository hast)
|
||||
|
||||
```bash
|
||||
# Auf dem Server:
|
||||
cd /var/www
|
||||
git clone dein-repo-url mathquest
|
||||
cd mathquest
|
||||
```
|
||||
|
||||
## Schritt 2: Dependencies installieren
|
||||
|
||||
```bash
|
||||
cd /var/www/mathquest
|
||||
npm install --production
|
||||
```
|
||||
|
||||
## Schritt 3: Berechtigungen setzen
|
||||
|
||||
```bash
|
||||
chown -R www-data:www-data /var/www/mathquest
|
||||
chmod +x /var/www/mathquest/server.js
|
||||
```
|
||||
|
||||
## Schritt 4: systemd Service installieren
|
||||
|
||||
```bash
|
||||
# Service-Datei kopieren
|
||||
sudo cp /var/www/mathquest/mathquest.service /etc/systemd/system/
|
||||
|
||||
# Service aktivieren und starten
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable mathquest
|
||||
sudo systemctl start mathquest
|
||||
|
||||
# Status prüfen
|
||||
sudo systemctl status mathquest
|
||||
```
|
||||
|
||||
## Schritt 5: Nginx konfigurieren
|
||||
|
||||
### SSL-Zertifikat prüfen
|
||||
|
||||
Da du einen Wildcard DNS Eintrag hast, sollte ein Wildcard-Zertifikat für `*.lydix.de` existieren.
|
||||
|
||||
Prüfe deine Zertifikate:
|
||||
```bash
|
||||
sudo certbot certificates
|
||||
```
|
||||
|
||||
Finde den korrekten Pfad (oft `/etc/letsencrypt/live/lydix.de/` oder `/etc/letsencrypt/live/lydix.de-0001/`):
|
||||
```bash
|
||||
ls -la /etc/letsencrypt/live/
|
||||
```
|
||||
|
||||
Falls der Pfad anders ist, passe die SSL-Zertifikat-Pfade in `nginx-mathquest.conf` an.
|
||||
|
||||
### Nginx-Konfiguration installieren
|
||||
|
||||
```bash
|
||||
# Konfiguration kopieren
|
||||
sudo cp /var/www/mathquest/nginx-mathquest.conf /etc/nginx/sites-available/mathquest.conf
|
||||
|
||||
# Symlink erstellen
|
||||
sudo ln -s /etc/nginx/sites-available/mathquest.conf /etc/nginx/sites-enabled/
|
||||
|
||||
# Konfiguration testen
|
||||
sudo nginx -t
|
||||
|
||||
# Nginx neu laden
|
||||
sudo systemctl reload nginx
|
||||
```
|
||||
|
||||
## Schritt 6: DNS konfigurieren
|
||||
|
||||
Da du einen Wildcard DNS Eintrag hast (`*.lydix.de`), ist kein separater A-Record für `mathquest.lydix.de` nötig. Die Subdomain sollte automatisch funktionieren.
|
||||
|
||||
Falls der Wildcard-Eintrag noch nicht existiert, erstelle einen:
|
||||
```
|
||||
*.lydix.de A deine-server-ip
|
||||
```
|
||||
|
||||
## Schritt 7: Firewall prüfen
|
||||
|
||||
Stelle sicher, dass Port 80 und 443 offen sind:
|
||||
|
||||
```bash
|
||||
# UFW
|
||||
sudo ufw allow 80/tcp
|
||||
sudo ufw allow 443/tcp
|
||||
|
||||
# Oder iptables
|
||||
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
|
||||
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
|
||||
```
|
||||
|
||||
## Automatisches Deployment
|
||||
|
||||
Du kannst auch das bereitgestellte Deployment-Script verwenden:
|
||||
|
||||
```bash
|
||||
cd /var/www/mathquest
|
||||
chmod +x deploy.sh
|
||||
sudo ./deploy.sh
|
||||
```
|
||||
|
||||
## Nützliche Befehle
|
||||
|
||||
### Service verwalten
|
||||
|
||||
```bash
|
||||
# Status prüfen
|
||||
sudo systemctl status mathquest
|
||||
|
||||
# Logs ansehen
|
||||
sudo journalctl -u mathquest -f
|
||||
|
||||
# Service neustarten
|
||||
sudo systemctl restart mathquest
|
||||
|
||||
# Service stoppen
|
||||
sudo systemctl stop mathquest
|
||||
|
||||
# Service starten
|
||||
sudo systemctl start mathquest
|
||||
```
|
||||
|
||||
### Nginx verwalten
|
||||
|
||||
```bash
|
||||
# Konfiguration testen
|
||||
sudo nginx -t
|
||||
|
||||
# Nginx neu laden
|
||||
sudo systemctl reload nginx
|
||||
|
||||
# Nginx neustarten
|
||||
sudo systemctl restart nginx
|
||||
|
||||
# Logs ansehen
|
||||
sudo tail -f /var/log/nginx/mathquest-access.log
|
||||
sudo tail -f /var/log/nginx/mathquest-error.log
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Service startet nicht
|
||||
|
||||
```bash
|
||||
# Prüfe die Logs
|
||||
sudo journalctl -u mathquest -n 50
|
||||
|
||||
# Prüfe ob Port 3000 belegt ist
|
||||
sudo netstat -tulpn | grep 3000
|
||||
|
||||
# Prüfe die Berechtigungen
|
||||
ls -la /var/www/mathquest
|
||||
```
|
||||
|
||||
### Nginx gibt 502 Bad Gateway
|
||||
|
||||
```bash
|
||||
# Prüfe ob der Service läuft
|
||||
sudo systemctl status mathquest
|
||||
|
||||
# Prüfe die Nginx-Logs
|
||||
sudo tail -f /var/log/nginx/mathquest-error.log
|
||||
|
||||
# Prüfe ob Node.js auf Port 3000 lauscht
|
||||
sudo netstat -tulpn | grep 3000
|
||||
```
|
||||
|
||||
### SSL-Zertifikat Probleme
|
||||
|
||||
```bash
|
||||
# Prüfe Zertifikat
|
||||
sudo certbot certificates
|
||||
|
||||
# Erneuere Zertifikat falls nötig
|
||||
sudo certbot renew
|
||||
|
||||
# Prüfe Zertifikat-Pfade in Nginx-Konfiguration
|
||||
sudo cat /etc/nginx/sites-available/mathquest.conf | grep ssl_certificate
|
||||
```
|
||||
|
||||
## Updates durchführen
|
||||
|
||||
1. Dateien auf dem Server aktualisieren
|
||||
2. Dependencies aktualisieren (falls nötig):
|
||||
```bash
|
||||
cd /var/www/mathquest
|
||||
npm install --production
|
||||
```
|
||||
3. Service neustarten:
|
||||
```bash
|
||||
sudo systemctl restart mathquest
|
||||
```
|
||||
|
||||
## Backup
|
||||
|
||||
Wichtig: Backupe regelmäßig die `tasks.json` Datei, da dort alle Antworten gespeichert werden:
|
||||
|
||||
```bash
|
||||
# Backup erstellen
|
||||
cp /var/www/mathquest/tasks.json /var/www/mathquest/tasks.json.backup
|
||||
```
|
||||
Reference in New Issue
Block a user