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

4.8 KiB

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

./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):

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:

<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:

sudo systemctl reload apache2

4. Server starten

Option A: Manuell

npm run start:prod

Option B: Als systemd Service (empfohlen)

sudo ./install-service.sh
sudo systemctl start singlechat
sudo systemctl enable singlechat

5. Service-Verwaltung

# 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:

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:

# 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:

./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

# 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