rdesign/docker-compose.yml

109 lines
4.2 KiB
YAML

services:
rdesign-frontend:
build:
context: ./frontend
dockerfile: Dockerfile
container_name: rdesign-frontend
restart: unless-stopped
environment:
- NEXT_PUBLIC_RDESIGN_API_URL=https://scribus.rspace.online
- NEXT_PUBLIC_STUDIO_URL=https://scribus.rspace.online/vnc/vnc.html?autoconnect=true&resize=scale
- NEXT_PUBLIC_LLM_API_URL=https://llm.jeffemmett.com
- NEXT_PUBLIC_ENCRYPTID_SERVER_URL=https://auth.ridentity.online
- ENCRYPTID_SERVER_URL=https://auth.ridentity.online
- RSPACE_API_URL=https://rspace.online/api
- HOSTNAME=0.0.0.0
labels:
- "traefik.enable=true"
# Catch-all for the frontend (lowest priority of our services)
- "traefik.http.routers.rdesign-frontend.rule=Host(`scribus.rspace.online`) && !PathPrefix(`/vnc`) && !Path(`/health`) && !PathPrefix(`/output`) && !PathPrefix(`/templates/{path:.*}`) && !PathPrefix(`/rswag`) && !PathPrefix(`/export`) && !PathPrefix(`/convert`) && !PathPrefix(`/jobs`) && !PathPrefix(`/docs`) && !PathPrefix(`/openapi`)"
- "traefik.http.routers.rdesign-frontend.entrypoints=web"
- "traefik.http.routers.rdesign-frontend.priority=190"
- "traefik.http.services.rdesign-frontend.loadbalancer.server.port=3000"
networks:
- traefik-public
deploy:
resources:
limits:
cpus: "1"
memory: 1G
reservations:
cpus: "0.25"
memory: 256M
rdesign-api:
build:
context: .
dockerfile: Dockerfile
container_name: rdesign-api
restart: unless-stopped
volumes:
- ./templates:/app/templates
- ./output:/app/output
- ./jobs:/app/jobs
- ./scripts:/app/scripts
- /opt/apps/rswag/designs:/app/rswag-designs:ro
environment:
- PYTHONUNBUFFERED=1
- BASE_URL=https://scribus.rspace.online
- RSWAG_DESIGNS_PATH=/app/rswag-designs
labels:
- "traefik.enable=true"
# API backend — serves /api/*, /health, /output/*, /templates/*, etc.
- "traefik.http.routers.rdesign-api.rule=Host(`scribus.rspace.online`) && (Path(`/health`) || PathPrefix(`/output`) || PathPrefix(`/templates`) || PathPrefix(`/rswag`) || PathPrefix(`/export`) || PathPrefix(`/convert`) || PathPrefix(`/jobs`) || PathPrefix(`/docs`) || PathPrefix(`/openapi`))"
- "traefik.http.routers.rdesign-api.entrypoints=web"
- "traefik.http.routers.rdesign-api.priority=200"
- "traefik.http.services.rdesign-api.loadbalancer.server.port=8080"
- "traefik.http.middlewares.rdesign-cors.headers.accesscontrolallowmethods=GET,POST,OPTIONS,DELETE"
- "traefik.http.middlewares.rdesign-cors.headers.accesscontrolallowheaders=*"
- "traefik.http.middlewares.rdesign-cors.headers.accesscontrolalloworiginlist=https://scribus.rspace.online,https://rswag.online"
- "traefik.http.middlewares.rdesign-cors.headers.accesscontrolmaxage=86400"
- "traefik.http.routers.rdesign-api.middlewares=rdesign-cors"
networks:
- traefik-public
deploy:
resources:
limits:
cpus: "4"
memory: 8G
reservations:
cpus: "1"
memory: 2G
rdesign-studio:
build:
context: .
dockerfile: Dockerfile.studio
container_name: rdesign-studio
restart: unless-stopped
volumes:
- ./templates:/app/templates
- ./output:/app/output
- /opt/apps/rswag/designs:/app/rswag-designs:ro
environment:
- VNC_PASSWORD=changeme
- DISPLAY_WIDTH=1920
- DISPLAY_HEIGHT=1080
labels:
- "traefik.enable=true"
- "traefik.http.routers.rdesign-studio.rule=Host(`scribus.rspace.online`) && PathPrefix(`/vnc`)"
- "traefik.http.routers.rdesign-studio.entrypoints=web"
- "traefik.http.routers.rdesign-studio.priority=210"
- "traefik.http.services.rdesign-studio.loadbalancer.server.port=6080"
- "traefik.http.routers.rdesign-studio.middlewares=rdesign-studio-strip"
- "traefik.http.middlewares.rdesign-studio-strip.stripprefix.prefixes=/vnc"
networks:
- traefik-public
deploy:
resources:
limits:
cpus: "2"
memory: 4G
reservations:
cpus: "0.5"
memory: 1G
networks:
traefik-public:
external: true