Update Socket.IO deployment documentation and fixCertPermissions.sh script for improved service user configuration
This commit enhances the Socket.IO deployment documentation by adding a new section on configuring the systemd service to run as `www-data`, ensuring proper permissions for SSL certificate access. It also updates the fixCertPermissions.sh script to handle cases where the service user is not defined or is set to `nobody`, defaulting to `www-data` and verifying its existence. These changes improve the overall security and functionality of the deployment process.
This commit is contained in:
@@ -18,7 +18,22 @@ sudo cp /var/www/tt-tagebuch.de/apache.conf.example /etc/apache2/sites-available
|
||||
sudo systemctl restart apache2
|
||||
```
|
||||
|
||||
### 3. SSL-Zertifikat-Berechtigungen setzen
|
||||
### 3. systemd-Service konfigurieren (als www-data)
|
||||
|
||||
**WICHTIG:** Der Service sollte als `www-data` laufen, nicht als `nobody`!
|
||||
|
||||
```bash
|
||||
# Service-Datei installieren
|
||||
sudo cp /var/www/tt-tagebuch.de/tt-tagebuch.service /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
```
|
||||
|
||||
Die Service-Datei konfiguriert:
|
||||
- User: `www-data` (Standard-Webserver-Benutzer)
|
||||
- Group: `www-data`
|
||||
- Port: 3050 (HTTP) und 3051 (HTTPS)
|
||||
|
||||
### 4. SSL-Zertifikat-Berechtigungen setzen
|
||||
|
||||
**WICHTIG:** Der Node.js-Prozess muss Zugriff auf die SSL-Zertifikate haben!
|
||||
|
||||
@@ -30,10 +45,10 @@ sudo ./scripts/fixCertPermissions.sh
|
||||
|
||||
Dieses Skript:
|
||||
- Erstellt die Gruppe `ssl-cert` (falls nicht vorhanden)
|
||||
- Fügt den Service-Benutzer zur Gruppe hinzu
|
||||
- Fügt den Service-Benutzer (`www-data`) zur Gruppe hinzu
|
||||
- Setzt die Berechtigungen für die Zertifikate
|
||||
|
||||
### 4. Backend neu starten
|
||||
### 5. Backend neu starten
|
||||
|
||||
**WICHTIG:** Der Backend-Server muss neu gestartet werden, damit der HTTPS-Server auf Port 3051 läuft!
|
||||
|
||||
@@ -45,7 +60,7 @@ sudo systemctl restart tt-tagebuch
|
||||
pm2 restart tt-tagebuch-backend
|
||||
```
|
||||
|
||||
### 5. Prüfen, ob HTTPS-Server läuft
|
||||
### 6. Prüfen, ob HTTPS-Server läuft
|
||||
|
||||
```bash
|
||||
# Prüfe, ob Port 3051 geöffnet ist
|
||||
@@ -54,7 +69,7 @@ sudo netstat -tlnp | grep 3051
|
||||
sudo ss -tlnp | grep 3051
|
||||
|
||||
# Prüfe Backend-Logs
|
||||
sudo journalctl -u tt-tagebuch-backend -f
|
||||
sudo journalctl -u tt-tagebuch -f
|
||||
# Oder bei PM2:
|
||||
pm2 logs tt-tagebuch-backend
|
||||
```
|
||||
@@ -64,7 +79,7 @@ Du solltest folgende Meldung sehen:
|
||||
🚀 HTTPS-Server für Socket.IO läuft auf Port 3051
|
||||
```
|
||||
|
||||
### 6. Diagnose-Skript ausführen
|
||||
### 7. Diagnose-Skript ausführen
|
||||
|
||||
```bash
|
||||
cd /var/www/tt-tagebuch.de/backend
|
||||
@@ -76,7 +91,7 @@ Dieses Skript prüft:
|
||||
- Ob Port 3051 geöffnet ist
|
||||
- Ob der Server erreichbar ist
|
||||
|
||||
### 7. Testen
|
||||
### 8. Testen
|
||||
|
||||
Im Browser sollte Socket.IO jetzt direkt zu `wss://tt-tagebuch.de:3051` verbinden.
|
||||
|
||||
@@ -98,7 +113,7 @@ Im Browser sollte Socket.IO jetzt direkt zu `wss://tt-tagebuch.de:3051` verbinde
|
||||
|
||||
3. **Prüfe Backend-Logs auf Fehler:**
|
||||
```bash
|
||||
sudo journalctl -u tt-tagebuch-backend -n 50
|
||||
sudo journalctl -u tt-tagebuch -n 50
|
||||
# Oder:
|
||||
pm2 logs tt-tagebuch-backend --lines 50
|
||||
```
|
||||
@@ -129,6 +144,28 @@ Falls die Zertifikate nicht existieren:
|
||||
sudo certbot certonly --standalone -d tt-tagebuch.de
|
||||
```
|
||||
|
||||
### Service läuft als "nobody"
|
||||
|
||||
**Problem:** Der Service läuft als `nobody`, was zu eingeschränkt ist.
|
||||
|
||||
**Lösung:**
|
||||
1. Installiere die Service-Datei (siehe Schritt 3)
|
||||
2. Führe das Berechtigungs-Skript aus (siehe Schritt 4)
|
||||
3. Starte den Service neu
|
||||
|
||||
```bash
|
||||
# Prüfe aktuellen Service-User
|
||||
sudo systemctl show -p User tt-tagebuch.service
|
||||
|
||||
# Installiere Service-Datei
|
||||
sudo cp /var/www/tt-tagebuch.de/tt-tagebuch.service /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart tt-tagebuch
|
||||
|
||||
# Prüfe, ob jetzt als www-data läuft
|
||||
sudo systemctl show -p User tt-tagebuch.service
|
||||
```
|
||||
|
||||
### Frontend verbindet nicht
|
||||
|
||||
1. **Prüfe Browser-Konsole auf Fehler**
|
||||
|
||||
@@ -20,9 +20,17 @@ fi
|
||||
# Prüfe, welcher Benutzer den systemd-Service ausführt
|
||||
SERVICE_USER=$(sudo systemctl show -p User tt-tagebuch.service 2>/dev/null | cut -d= -f2)
|
||||
|
||||
if [ -z "$SERVICE_USER" ]; then
|
||||
echo "⚠️ Konnte Service-Benutzer nicht ermitteln. Verwende 'www-data' als Standard."
|
||||
# Wenn kein User definiert ist oder "nobody", verwende www-data
|
||||
if [ -z "$SERVICE_USER" ] || [ "$SERVICE_USER" = "nobody" ]; then
|
||||
echo "⚠️ Service-Benutzer ist '$SERVICE_USER' oder nicht definiert."
|
||||
echo " Verwende 'www-data' als Standard (empfohlen für Webserver-Services)."
|
||||
SERVICE_USER="www-data"
|
||||
|
||||
# Prüfe, ob www-data existiert
|
||||
if ! id "$SERVICE_USER" &>/dev/null; then
|
||||
echo "❌ Benutzer '$SERVICE_USER' existiert nicht!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "🔧 Konfiguriere SSL-Zertifikat-Berechtigungen..."
|
||||
|
||||
30
tt-tagebuch.service
Normal file
30
tt-tagebuch.service
Normal file
@@ -0,0 +1,30 @@
|
||||
[Unit]
|
||||
Description=TT-Tagebuch Node.js Service
|
||||
After=network.target mysql.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=www-data
|
||||
Group=www-data
|
||||
WorkingDirectory=/var/www/tt-tagebuch.de/backend
|
||||
ExecStart=/usr/bin/node server.js
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
SyslogIdentifier=tt-tagebuch
|
||||
|
||||
# Umgebungsvariablen
|
||||
Environment=NODE_ENV=production
|
||||
# PORT: HTTP-Server für API (wird von Apache auf Port 443 proxied)
|
||||
Environment=PORT=3050
|
||||
# HTTPS_PORT: HTTPS-Server für Socket.IO (direkt erreichbar auf Port 3051)
|
||||
Environment=HTTPS_PORT=3051
|
||||
|
||||
# Sicherheit
|
||||
NoNewPrivileges=true
|
||||
PrivateTmp=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
Reference in New Issue
Block a user