services: traefik: image: traefik:v3.3 ports: - 8000:8000 - 8080:8080 networks: - players - internal command: - '--api.insecure=true' - '--providers.docker=true' - '--providers.docker.exposedbydefault=false' - '--entrypoints.web.address=:8000' volumes: - /var/run/docker.sock:/var/run/docker.sock:ro app: image: linuxodyssey/frontend depends_on: - backend restart: always build: context: . dockerfile: app/Dockerfile target: prod networks: - internal labels: - 'traefik.enable=true' - 'traefik.http.routers.app.entrypoints=web' - 'traefik.http.routers.app.rule=PathPrefix(`/`)' - 'traefik.http.routers.app.service=app' - 'traefik.http.services.app.loadbalancer.server.port=80' backend: image: linuxodyssey/backend depends_on: - db restart: always build: context: . dockerfile: server/Dockerfile target: prod networks: - internal - players volumes: - /var/run/docker.sock:/var/run/docker.sock - ./logs:/app/logs - ./config:/app/config - ./quests:/app/quests:ro env_file: - .env.prod environment: - DOCKER_NETWORK=linux-odyssey-players - BACKEND_URL=http://backend:3000 - HOST_PROJECT_ROOT=${PWD} labels: - 'traefik.enable=true' - 'traefik.http.routers.backend-api.entrypoints=web' - 'traefik.http.routers.backend-api.rule=PathPrefix(`/api`)' - 'traefik.http.routers.backend-api.service=backend' - 'traefik.http.routers.backend-socket.entrypoints=web' - 'traefik.http.routers.backend-socket.rule=PathPrefix(`/socket.io`)' - 'traefik.http.routers.backend-socket.service=backend' - 'traefik.http.routers.backend-trpc.entrypoints=web' - 'traefik.http.routers.backend-trpc.rule=PathPrefix(`/trpc`)' - 'traefik.http.routers.backend-trpc.service=backend' - 'traefik.http.routers.backend-api-docs.entrypoints=web' - 'traefik.http.routers.backend-api-docs.rule=PathPrefix(`/api-docs`)' - 'traefik.http.routers.backend-api-docs.service=backend' - 'traefik.http.services.backend.loadbalancer.server.port=3000' analytics: image: linuxodyssey/analytics build: context: . dockerfile: services/analytics/Dockerfile target: prod restart: always depends_on: - db networks: - internal ports: - '3001:3001' env_file: - .env.prod db: image: mongo:6 restart: always networks: - internal ports: - '27017:27017' volumes: - mongo:/data/db - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro env_file: - .env.prod base: image: linuxodyssey/quest-base build: context: . dockerfile: ./quests/Dockerfile networks: internal: players: name: linux-odyssey-players internal: true volumes: mongo: