# 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 ```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 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] 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] ``` 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