163 lines
3.6 KiB
Markdown
163 lines
3.6 KiB
Markdown
# SingleChat Production Installation
|
|
|
|
## Voraussetzungen
|
|
|
|
- Node.js 18 oder höher
|
|
- Apache mit mod_ssl und mod_proxy
|
|
- SSL-Zertifikat (Let's Encrypt empfohlen)
|
|
|
|
## Installation
|
|
|
|
### 1. Abhängigkeiten installieren und Build erstellen
|
|
|
|
```bash
|
|
./install.sh
|
|
```
|
|
|
|
Dieses Skript:
|
|
- Installiert alle Node.js-Dependencies
|
|
- Baut den Client für Production
|
|
- Kopiert die gebauten Dateien nach `docroot/dist`
|
|
- Erstellt eine `.env` Datei mit einem zufälligen `SESSION_SECRET`
|
|
|
|
### 2. .env Datei anpassen
|
|
|
|
Bearbeite die `.env` Datei und passe `SESSION_SECRET` an (falls noch nicht geschehen):
|
|
|
|
```bash
|
|
nano .env
|
|
```
|
|
|
|
Wichtig: Verwende ein starkes, zufälliges Secret für `SESSION_SECRET`!
|
|
|
|
### 3. Apache-Konfiguration
|
|
|
|
Die Apache-Konfiguration sollte bereits vorhanden sein. Stelle sicher, dass sie folgendes enthält:
|
|
|
|
```apache
|
|
<VirtualHost *:443>
|
|
ServerName ypchat.net
|
|
ServerAlias www.ypchat.net
|
|
|
|
# SSL-Konfiguration
|
|
Include /etc/letsencrypt/options-ssl-apache.conf
|
|
SSLCertificateFile /etc/letsencrypt/live/www.ypchat.net/fullchain.pem
|
|
SSLCertificateKeyFile /etc/letsencrypt/live/www.ypchat.net/privkey.pem
|
|
|
|
# Reverse Proxy zu Node.js
|
|
ProxyPreserveHost On
|
|
ProxyPass / http://localhost:4000/
|
|
ProxyPassReverse / http://localhost:4000/
|
|
|
|
# WebSocket-Support für Socket.IO
|
|
RewriteEngine on
|
|
RewriteCond %{HTTP:Upgrade} websocket [NC]
|
|
RewriteCond %{HTTP:Connection} upgrade [NC]
|
|
RewriteRule ^/?(.*) "ws://localhost:4000/$1" [P,L]
|
|
</VirtualHost>
|
|
```
|
|
|
|
Wichtig: Die WebSocket-Rewrite-Regeln sind für Socket.IO erforderlich!
|
|
|
|
Nach Änderungen an der Apache-Konfiguration:
|
|
|
|
```bash
|
|
sudo systemctl reload apache2
|
|
```
|
|
|
|
### 4. Server starten
|
|
|
|
#### Option A: Manuell
|
|
|
|
```bash
|
|
npm run start:prod
|
|
```
|
|
|
|
#### Option B: Als systemd Service (empfohlen)
|
|
|
|
```bash
|
|
sudo ./install-service.sh
|
|
sudo systemctl start singlechat
|
|
sudo systemctl enable singlechat
|
|
```
|
|
|
|
### 5. Service-Verwaltung
|
|
|
|
```bash
|
|
# Status prüfen
|
|
sudo systemctl status singlechat
|
|
|
|
# Logs anzeigen
|
|
sudo journalctl -u singlechat -f
|
|
|
|
# Neustart
|
|
sudo systemctl restart singlechat
|
|
|
|
# Stoppen
|
|
sudo systemctl stop singlechat
|
|
```
|
|
|
|
## Updates
|
|
|
|
Nach Code-Änderungen:
|
|
|
|
```bash
|
|
# 1. Client neu bauen
|
|
npm run build
|
|
|
|
# 2. Dateien kopieren
|
|
cp -r client/dist docroot/
|
|
|
|
# 3. Server neustarten
|
|
sudo systemctl restart singlechat
|
|
```
|
|
|
|
Oder alles in einem Schritt:
|
|
|
|
```bash
|
|
./install.sh && sudo systemctl restart singlechat
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Socket.IO-Verbindung schlägt fehl
|
|
|
|
- Prüfe, ob die WebSocket-Rewrite-Regeln in Apache korrekt sind
|
|
- Prüfe die Apache-Logs: `sudo tail -f /var/log/apache2/error.log`
|
|
- Prüfe die Server-Logs: `sudo journalctl -u singlechat -f`
|
|
|
|
### CORS-Fehler
|
|
|
|
- Stelle sicher, dass die Domain in `server/index.js` korrekt konfiguriert ist
|
|
- Prüfe, ob `NODE_ENV=production` gesetzt ist
|
|
|
|
### Session-Probleme
|
|
|
|
- Stelle sicher, dass `SESSION_SECRET` in `.env` gesetzt ist
|
|
- Prüfe, ob `secure: true` für Cookies in Production aktiviert ist
|
|
|
|
### Port bereits belegt
|
|
|
|
```bash
|
|
# Prüfe, welcher Prozess Port 4000 verwendet
|
|
sudo lsof -i :4000
|
|
|
|
# Beende den Prozess oder ändere PORT in .env
|
|
```
|
|
|
|
## Umgebungsvariablen
|
|
|
|
Die folgenden Umgebungsvariablen können in `.env` gesetzt werden:
|
|
|
|
- `NODE_ENV`: `production` (automatisch gesetzt)
|
|
- `PORT`: `4000` (Standard)
|
|
- `SESSION_SECRET`: Zufälliges Secret für Sessions (wird von install.sh generiert)
|
|
|
|
## Sicherheit
|
|
|
|
- **SESSION_SECRET**: Verwende ein starkes, zufälliges Secret
|
|
- **HTTPS**: Stelle sicher, dass SSL/TLS korrekt konfiguriert ist
|
|
- **Firewall**: Port 4000 sollte nur von localhost erreichbar sein
|
|
- **Updates**: Halte Node.js und alle Dependencies aktuell
|
|
|