networks: default: driver: bridge postgres_network: driver: bridge discord_network: driver: bridge redis_network: driver: bridge traefik: external: true moodle_db_network: driver: bridge services: hub: build: context: . dockerfile: ./apps/hub/Dockerfile args: - NEXT_PUBLIC_HUB_URL=$NEXT_PUBLIC_HUB_URL - NEXT_PUBLIC_HUB_SERVER_URL=$NEXT_PUBLIC_HUB_SERVER_URL - NEXT_PUBLIC_DISCORD_URL=$NEXT_PUBLIC_DISCORD_URL - NEXT_PUBLIC_MOODLE_URL=$NEXT_PUBLIC_MOODLE_URL - NEXT_PUBLIC_DISPATCH_URL=$NEXT_PUBLIC_DISPATCH_URL labels: - "traefik.enable=true" - "traefik.http.routers.hub.rule=Host(`hub.premiumag.de`)" - "traefik.http.routers.hub.entrypoints=websecure" - "traefik.http.routers.hub.tls.certresolver=le" - "traefik.http.services.hub.loadbalancer.server.port=3000" ports: - 3000:3000 environment: - NEXTAUTH_URL=${AUTH_HUB_URL} - NEXTAUTH_SECRET=${AUTH_HUB_SECRET} env_file: - .env.prod networks: - discord_network - postgres_network - traefik hub-server: build: context: . dockerfile: ./apps/hub-server/Dockerfile container_name: hub-server labels: - "traefik.enable=true" - "traefik.http.routers.hub-server.rule=Host(`api.hub.premiumag.de`)" - "traefik.http.routers.hub-server.entrypoints=websecure" - "traefik.http.routers.hub-server.tls.certresolver=le" - "traefik.http.services.hub-server.loadbalancer.server.port=3000" env_file: - .env.prod networks: - discord_network - postgres_network - traefik depends_on: postgres: condition: service_healthy # Dispatch Service dispatch: build: context: . dockerfile: ./apps/dispatch/Dockerfile args: - NEXT_PUBLIC_DISPATCH_URL=$NEXT_PUBLIC_DISPATCH_URL - NEXT_PUBLIC_HUB_URL=$NEXT_PUBLIC_HUB_URL - NEXT_PUBLIC_DISPATCH_SERVICE_ID=1 - NEXT_PUBLIC_LIVEKIT_URL=$NEXT_PUBLIC_LIVEKIT_URL - NEXT_PUBLIC_DISPATCH_SERVER_URL=$NEXT_PUBLIC_DISPATCH_SERVER_URL env_file: - .env.prod deploy: replicas: 2 labels: - "traefik.enable=true" - "traefik.http.routers.dispatch.rule=Host(`dispatch.premiumag.de`)" - "traefik.http.routers.dispatch.entrypoints=websecure" - "traefik.http.routers.dispatch.tls.certresolver=le" - "traefik.http.services.dispatch.loadbalancer.server.port=3000" environment: - NEXTAUTH_URL=${AUTH_DISPATCH_URL} - NEXTAUTH_SECRET=${AUTH_DISPATCH_SECRET} networks: - postgres_network - traefik dispatch-server: build: context: . dockerfile: ./apps/dispatch-server/Dockerfile env_file: - .env.prod deploy: replicas: 3 labels: - "traefik.enable=true" - "traefik.http.routers.dispatch-server.rule=Host(`api.dispatch.premiumag.de`)" - "traefik.http.routers.dispatch-server.entrypoints=websecure" - "traefik.http.routers.dispatch-server.tls.certresolver=le" - "traefik.http.services.dispatch-server.loadBalancer.sticky.cookie.name=server_id" - "traefik.http.services.dispatch-server.loadBalancer.sticky.cookie.httpOnly=true" - "traefik.http.services.dispatch-server.loadbalancer.server.port=3000" networks: - discord_network - postgres_network - redis_network - traefik depends_on: postgres: condition: service_healthy redis: condition: service_healthy discord-server: build: context: . dockerfile: ./apps/discord-server/Dockerfile env_file: - .env.prod deploy: replicas: 1 labels: - "traefik.enable=false" networks: - postgres_network - discord_network docs: build: context: . dockerfile: ./apps/docs/Dockerfile labels: - "traefik.enable=true" - "traefik.http.routers.docs.rule=Host(`docs.premiumag.de`)" - "traefik.http.routers.docs.entrypoints=websecure" - "traefik.http.routers.docs.tls.certresolver=le" - "traefik.http.services.docs.loadbalancer.server.port=80" networks: - traefik postgres: image: postgres:13 container_name: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U persistant-data -d var"] interval: 10s timeout: 5s retries: 3 ports: - "5432:5432" environment: POSTGRES_USER: persistant-data POSTGRES_PASSWORD: persistant-data-pw POSTGRES_DB: var volumes: - postgres-data:/var/lib/postgresql/data networks: - postgres_network - traefik redis: container_name: redis image: redis/redis-stack:latest ports: - "6379:6379" volumes: - "redis_data:/data" networks: - redis_network healthcheck: test: ["CMD", "redis-cli", "--raw", "incr", "ping"] livekit: image: livekit/livekit-server command: --config /etc/livekit.yaml --node-ip 37.221.196.140 restart: unless-stopped networks: - traefik ports: - "7881:7881" - "7882:7882/udp" depends_on: - redis volumes: - ./livekit.yaml:/etc/livekit.yaml labels: - "traefik.enable=true" - "traefik.http.routers.livekit.rule=Host(`livekit.premiumag.de`)" - "traefik.http.routers.livekit.entrypoints=websecure" - "traefik.http.routers.livekit.tls=true" - "traefik.http.routers.livekit.tls.certresolver=le" - "traefik.http.routers.livekit.service=livekit" - "traefik.http.services.livekit.loadbalancer.server.port=7880" volumes: postgres-data: moodle_data: moodle_database: moodle_moodledata: redis_data: driver: local portainer_data: