# Fileverse Collaboration Server — Self-hosted on Netcup # Y.js WebSocket relay for real-time document collaboration # # Deploy: scp to Netcup, docker compose up -d # Requires: Traefik network, DNS for collab.jeffemmett.com services: collab-server: build: context: . dockerfile: Dockerfile restart: unless-stopped environment: PORT: 5000 HOST: 0.0.0.0 NODE_ENV: production MONGODB_URI: mongodb://collab-mongo:27017/collab REDIS_URL: redis://collab-redis:6379 CORS_ORIGINS: "https://rnotes.jeffemmett.com,https://rspace.jeffemmett.com,http://localhost:3000" # SERVER_DID and other secrets via Infisical INFISICAL_CLIENT_ID: ${INFISICAL_CLIENT_ID} INFISICAL_CLIENT_SECRET: ${INFISICAL_CLIENT_SECRET} networks: - proxy - collab-internal labels: - "traefik.enable=true" # HTTP router - "traefik.http.routers.collab.rule=Host(`collab.jeffemmett.com`)" - "traefik.http.routers.collab.entrypoints=websecure" - "traefik.http.routers.collab.tls.certresolver=letsencrypt" - "traefik.http.services.collab.loadbalancer.server.port=5000" # WebSocket support - "traefik.http.middlewares.collab-headers.headers.customrequestheaders.X-Forwarded-Proto=https" - "traefik.http.routers.collab.middlewares=collab-headers" depends_on: - collab-mongo - collab-redis collab-mongo: image: mongo:7 restart: unless-stopped volumes: - collab-mongo-data:/data/db networks: - collab-internal collab-redis: image: redis:7-alpine restart: unless-stopped command: redis-server --maxmemory 128mb --maxmemory-policy allkeys-lru volumes: - collab-redis-data:/data networks: - collab-internal networks: proxy: external: true collab-internal: driver: bridge volumes: collab-mongo-data: collab-redis-data: