Files
singlechat/README-PRODUCTION.md
Torsten Schulz (local) 8c9a600645
All checks were successful
Deploy SingleChat / deploy (push) Successful in 24s
fixed some domain issues
2026-06-16 12:47:58 +02:00

193 lines
4.8 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
# SSL-Konfiguration
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/ypchat.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/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>
<VirtualHost *:443>
ServerName www.ypchat.net
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/ypchat.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ypchat.net/privkey.pem
RewriteEngine On
RewriteRule ^ https://ypchat.net%{REQUEST_URI} [R=301,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
### Automatisch per Gitea Actions
Der Workflow `.gitea/workflows/deploy.yml` deployt bei jedem Push auf `main` per SSH auf den Produktionsserver, installiert dort das aktuelle Rollout-Skript und startet es.
In Gitea müssen dafür gesetzt sein:
- Repository Variables:
- `SSH_HOST`: Produktionsserver, z.B. `rv2756.1blu.de`
- `SSH_PORT`: SSH-Port, z.B. `22`
- `SSH_USER`: SSH-User für den Deploy
- Repository Secret:
- `PROD_SSH_KEY_B64`: privater SSH-Key base64-kodiert
Das Rollout-Skript kann bei Bedarf auch manuell installiert und getestet werden:
```bash
sudo install -m 755 scripts/actualize-singlechat.sh /usr/local/bin/actualize-singlechat.sh
```
Das Skript aktualisiert `/opt/ypchat` aus `ssh://git@tsschulz.de:2222/torsten/singlechat`, installiert Dependencies mit `npm ci`, baut den Client, aktualisiert `docroot/dist` und startet `ypchat` neu. Bei Bedarf können `APP_DIR`, `REPO_URL`, `BRANCH` und `SERVICE_NAME` als Environment-Variablen überschrieben werden.
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