Deployment
Anleitung zum Betrieb des Collab Servers in verschiedenen Umgebungen.
Systemanforderungen
| Komponente | Minimum | Empfohlen |
|---|---|---|
| Node.js | 20.x | 22.x LTS |
| RAM | 512 MB | 2 GB |
| Storage | 1 GB | 10 GB |
| CPU | 1 Core | 2+ Cores |
Umgebungsvariablen
| Variable | Default | Beschreibung |
|---|---|---|
PORT |
4000 |
Server-Port |
NODE_ENV |
development |
Umgebung |
CONTENT_PATH |
./content |
Pfad zum Content |
LOG_LEVEL |
info |
Log-Level |
Development
# Mit npm
npm run dev
# Mit Custom Content
CONTENT_PATH=../my-content npm run devProduction Build
# TypeScript kompilieren
npm run build
# Starten
NODE_ENV=production npm startDocker
Dockerfile
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY dist/ ./dist/
COPY content/ ./content/
EXPOSE 4000
ENV NODE_ENV=production
ENV PORT=4000
CMD ["node", "dist/server.js"]Docker Compose
version: '3.8'
services:
collab-server:
build: .
ports:
- "4000:4000"
volumes:
- ./content:/app/content
environment:
- NODE_ENV=production
- PORT=4000
restart: unless-stoppedBefehle
# Build
docker build -t quiet-frames-collab-server .
# Run
docker run -d -p 4000:4000 \
-v $(pwd)/content:/app/content \
quiet-frames-collab-server
# Mit Docker Compose
docker-compose up -dReverse Proxy
Nginx
server {
listen 80;
server_name quiet-frames.de;
location / {
proxy_pass http://localhost:4000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}Caddy
quiet-frames.de {
reverse_proxy localhost:4000
}SSL/TLS
Mit Certbot (Let's Encrypt)
certbot --nginx -d quiet-frames.deMit Caddy (automatisch)
Caddy holt automatisch Zertifikate.
PM2 (Process Manager)
# Installation
npm install -g pm2
# Starten
pm2 start dist/server.js --name collab-server
# Cluster Mode (Multi-Core)
pm2 start dist/server.js -i max --name collab-server
# Autostart
pm2 startup
pm2 saveecosystem.config.js
module.exports = {
apps: [{
name: 'collab-server',
script: 'dist/server.js',
instances: 'max',
exec_mode: 'cluster',
env_production: {
NODE_ENV: 'production',
PORT: 4000
}
}]
};Monitoring
Health Check
curl http://localhost:4000/healthPM2 Monitoring
pm2 monit
pm2 logs collab-serverExterne Services
- Uptime Robot – Verfügbarkeit
- Sentry – Error Tracking
- Grafana – Metriken
Backup
Content-Verzeichnis
# Täglich um 2:00
0 2 * * * tar -czf /backups/content-$(date +\%Y\%m\%d).tar.gz /app/contentSnapshots
# Wöchentlich
0 3 * * 0 tar -czf /backups/snapshots-$(date +\%Y\%m\%d).tar.gz /app/data/snapshotsLogs
Log-Pfade
| Umgebung | Pfad |
|---|---|
| Development | Console |
| Production | /var/log/collab-server/ |
| Docker | docker logs |
Log-Rotation
/var/log/collab-server/*.log {
daily
rotate 14
compress
missingok
notifempty
}Troubleshooting
Port bereits belegt
# Prozess finden
lsof -i :4000
# Beenden
kill -9 <PID>Sockets Timeouts
Nginx Timeout erhöhen:
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;Memory Leaks
# Node mit erhöhtem Memory-Limit
NODE_OPTIONS="--max-old-space-size=4096" npm start