services: router: image: itzg/mc-router container_name: mc-router restart: unless-stopped ports: - "25565:25565" # bind the API port to only loopback to avoid external exposure - "127.0.0.1:25564:25564" networks: - internal environment: TZ: Europe/Amsterdam API_BINDING: ":25564" MAPPING: | mc.marijndoeve.nl=omb4:25565 omb.marijndoeve.nl=omb4:25565 10.0.0.21=omb4:25565 omb4: image: docker.io/itzg/minecraft-server container_name: mc-omb4 restart: unless-stopped tty: true stdin_open: true depends_on: - router ports: - "24454:24454/udp" # Voice mod volumes: - ./data:/data - dynmap-data:/data/dynmap/web environment: EULA: "TRUE" VERSION: 1.20.4 TYPE: FABRIC DIFFICULTY: hard INIT_MEMORY: 1G MEMORY: 6G ENABLE_AUTOPAUSE: true MAX_TICK_TIME: -1 REMOVE_OLD_DATAPACKS: true VANILLATWEAKS_SHARECODE: "" MODRINTH_PROJECTS: | fabric-api view-distance-fix simple-voice-chat lithium shulkerboxtooltip audioplayer phosphor dynmap:beta no-trial-chambers MODRINTH_DOWNLOAD_DEPENDENCIES: required web: image: gitea.marijndoeve.nl/harmitcraft/dynmap-web:latest restart: unless-stopped container_name: mc-web volumes: - dynmap-data:/var/www/html:ro depends_on: - db networks: - web - internal labels: - traefik.enable=true - traefik.http.routers.ombweb.rule=Host(`mc.marijndoeve.nl`, `omb.marijndoeve.nl`) - traefik.http.routers.ombweb.entrypoints=websecure - traefik.http.routers.ombweb.tls.certresolver=marijndoeve db: image: postgres:16 container_name: mc-db4 environment: TZ: Europe/Amsterdam POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - db-data:/var/lib/postgresql/data restart: unless-stopped networks: - internal monitor: image: itzg/mc-monitor container_name: mc-monitor command: export-for-prometheus restart: unless-stopped environment: GATHER_INTERVAL: 10s GATHER_SERVERS: omb4 depends_on: - omb4 networks: - internal networks: internal: internal: true web: external: true volumes: dynmap-data: db-data: