4.8 KiB
YpChat 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
.envDatei mit einem zufälligenSESSION_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.deSSH_PORT: SSH-Port, z.B.22SSH_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.jskorrekt konfiguriert ist - Prüfe, ob
NODE_ENV=productiongesetzt ist
Session-Probleme
- Stelle sicher, dass
SESSION_SECRETin.envgesetzt ist - Prüfe, ob
secure: truefü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