services: traefik: image: traefik:v2.11 ports: - "80:80" - "443:443" - "8080:8080" # Traefik Dashboard deploy: placement: constraints: - node.role == manager labels: - "traefik.enable=true" - "traefik.http.routers.api.rule=Host(`traefik.premiumag.de`)" - "traefik.http.routers.api.service=api@internal" - "traefik.http.routers.api.entrypoints=web" - "traefik.http.services.api.loadbalancer.server.port=8080" command: - "--api.dashboard=true" - "--api.insecure=true" # Nur für Testzwecke! - "--entrypoints.web.address=:80" - "--providers.docker" - "--providers.docker.swarmmode=true" volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" dispatch: deploy: replicas: 3 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 labels: - "traefik.enable=true" - "traefik.http.routers.dispatch.rule=Host(`dispatch.premiumag.de`)" - "traefik.http.services.dispatch.loadbalancer.server.port=3000" env_file: - .env.prod networks: - postgres_network hub: build: context: . dockerfile: ./apps/hub/Dockerfile args: - NEXT_PUBLIC_DISPATCH_URL=$NEXT_PUBLIC_DISPATCH_URL - NEXT_PUBLIC_HUB_URL=$NEXT_PUBLIC_HUB_URL - NEXT_PUBLIC_LIVEKIT_URL=$NEXT_PUBLIC_LIVEKIT_URL - NEXT_PUBLIC_HUB_SERVER_URL=$NEXT_PUBLIC_HUB_SERVER_URL container_name: hub ports: - "3000:3000" env_file: - .env.prod networks: - postgres_network hub-server: build: context: . dockerfile: ./apps/hub-server/Dockerfile container_name: hub-server ports: - "3003:3000" env_file: - .env.prod networks: - postgres_network depends_on: postgres: condition: service_healthy dispatch-server: deploy: replicas: 3 build: context: . dockerfile: ./apps/dispatch-server/Dockerfile env_file: - .env.prod networks: - postgres_network - redis_network labels: - "traefik.enable=true" - "traefik.http.routers.dispatch.rule=Host(`dispatch-server.premiumag.de`)" - "traefik.http.services.dispatch.loadbalancer.server.port=3000" depends_on: postgres: condition: service_healthy redis: condition: service_healthy 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 grafana: image: grafana/grafana:latest container_name: grafana ports: - "4100:3000" depends_on: - postgres volumes: - ./grafana:/var/lib/grafana 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"] moodle_database: container_name: moodle_database image: docker.io/bitnami/mariadb:latest environment: # ALLOW_EMPTY_PASSWORD is recommended only for development. - ALLOW_EMPTY_PASSWORD=yes - MARIADB_USER=bn_moodle - MARIADB_DATABASE=bitnami_moodle - MARIADB_CHARACTER_SET=utf8mb4 - MARIADB_COLLATE=utf8mb4_unicode_ci volumes: - "moodle_database:/bitnami/mariadb" moodle: image: bitnami/moodle:latest container_name: moodle ports: - "8081:8080" # Moodle läuft auf http://localhost:8081 environment: - MOODLE_DATABASE_HOST=moodle_database - MOODLE_DATABASE_PORT_NUMBER=3306 - MOODLE_DATABASE_USER=bn_moodle - MOODLE_DATABASE_NAME=bitnami_moodle - MOODLE_USERNAME=admin - MOODLE_PASSWORD=admin123 - MOODLE_EMAIL=admin@example.com - MOODLE_SITE_NAME="Mein Lokales Moodle" - MOODLE_SSLPROXY=false - ALLOW_EMPTY_PASSWORD=yes depends_on: - moodle_database volumes: - moodle_data:/bitnami/moodle - moodle_moodledata:/bitnami/moodledata # Für den Zugriff auf den Host livekit-server: image: livekit/livekit-server container_name: livekit_server restart: unless-stopped ports: - "7880:7880" - "7881:7881" - "7882:7882/udp" volumes: - "./livekit.yaml:/livekit.yaml" command: - "--config" - "/livekit.yaml" - "--node-ip=127.0.0.1" networks: default: driver: bridge networks: traefik_public: external: true postgres_network: driver: bridge redis_network: driver: bridge volumes: postgres-data: moodle_data: moodle_database: moodle_moodledata: redis_data: driver: local