fileverse/poc/collab-server/docker-compose.yml

66 lines
1.9 KiB
YAML

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