Files
singlechat/README-PRODUCTION.md
Torsten Schulz (local) 8d7c7d6f2a
Some checks failed
Deploy SingleChat / deploy (push) Failing after 1s
autodeploy implemented
2026-06-15 16:17:20 +02:00

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

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 und startet dort das Rollout-Skript.

In Gitea müssen dafür gesetzt sein:

  • Repository Variables:
    • PROD_HOST: Produktionsserver, z.B. tsschulz.de
    • PROD_PORT: SSH-Port, z.B. 2222
    • PROD_USER: SSH-User für den Deploy
    • PROD_DEPLOY_SCRIPT: optional, Standard ist /usr/local/bin/actualize-singlechat.sh
  • Repository Secret:
    • PROD_SSH_KEY_B64: privater SSH-Key base64-kodiert

Auf dem Produktionsserver das Rollout-Skript installieren:

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