version: '3.8' services: # 1. 遊戲管理中心 crafty: container_name: crafty_controller image: registry.gitlab.com/crafty-controller/crafty-4:latest restart: unless-stopped environment: - TZ=Asia/Taipei ports: - "8000:8443" # 管理介面 volumes: - /docker/minecraft/crafty/backups:/crafty/backups - /docker/minecraft/crafty/logs:/crafty/logs - /docker/minecraft/crafty/servers:/crafty/servers - /docker/minecraft/crafty/config:/crafty/app/config - /docker/minecraft/crafty/import:/crafty/import networks: - minecraft_net # 資源限制(避免單一伺服器吃光所有資源) deploy: resources: limits: memory: 24G reservations: memory: 8G # 保證最低 8GB,適合多伺服器同時運行 # 2. 全方位監控儀表板 (Netdata) netdata: image: netdata/netdata:latest container_name: netdata_minecraft hostname: minecraft-host # 便於識別 restart: unless-stopped ports: - "8010:19999" # 監控網頁介面 cap_add: - SYS_PTRACE - SYS_ADMIN security_opt: - apparmor:unconfined environment: - TZ=Asia/Taipei # 可選:Netdata Cloud 整合 - NETDATA_CLAIM_TOKEN=${NETDATA_CLAIM_TOKEN:-} # your-token-here - NETDATA_CLAIM_ROOMS=${NETDATA_CLAIM_ROOMS:-} # your-room-id-here # 數據保留設定 - NETDATA_DBENGINE_MULTIHOST_DISK_SPACE=5120 # 5GB 磁碟空間(保留 7 天) volumes: - netdataconfig:/etc/netdata - netdatalib:/var/lib/netdata # 時序資料庫存放位置,會成長到約 5GB - netdatacache:/var/cache/netdata - /etc/passwd:/host/etc/passwd:ro - /etc/group:/host/etc/group:ro - /proc:/host/proc:ro - /sys:/sys:ro - /etc/os-release:/host/etc/os-release:ro - /var/run/docker.sock:/var/run/docker.sock:ro # 關鍵:讓 Netdata 讀取 Docker 狀態 - /docker/minecraft/crafty/servers:/host/minecraft:ro # 監控 MC 伺服器目錄大小 networks: - minecraft_net deploy: resources: limits: memory: 512M reservations: memory: 256M # 3. 即時日誌瀏覽器 (Dozzle) - 看報錯用 dozzle: image: amir20/dozzle:latest container_name: dozzle_minecraft restart: unless-stopped environment: - TZ=Asia/Taipei - DOZZLE_LEVEL=info - DOZZLE_TAILSIZE=500 # 日誌顯示行數 - DOZZLE_FILTER=name=crafty*|name=minecraft* # 只顯示 MC 相關容器 ports: - "8020:8080" # 訪問即可看到所有容器日誌 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro networks: - minecraft_net deploy: resources: limits: memory: 256M # 4. GoEdge 管理後台 + API 節點 + MySQL # 官方建議使用 goedgelabs/goedge-admin 映像,內建 MariaDB goedge-admin: image: goedgelabs/goedge-admin:latest container_name: goedge_admin restart: unless-stopped environment: - TZ=Asia/Taipei volumes: - goedge_admin_mysql:/var/lib/mysql # MySQL 資料庫 - goedge_admin_data:/usr/local/goedge/edge-admin # Admin 設定 + 日誌 + API 設定 ports: - "8030:7788" # 管理後台登入端口 (預設 admin/123456) networks: - minecraft_net # 5. GoEdge 邊緣節點 (實際負責轉發的 Proxy) goedge-node: image: goedgelabs/goedge-node:latest container_name: goedge_node restart: unless-stopped environment: - TZ=Asia/Taipei volumes: - goedge_node_data:/usr/local/goedge/edge-node ports: - "1110-1200:1110-1200" # 預留 1110 到 1200 之間的 90 個端口 networks: - minecraft_net depends_on: - goedge-admin # 6. 備份服務 (可選) - 自動備份到雲端或其他位置 # duplicati: # image: lscr.io/linuxserver/duplicati:latest # container_name: minecraft_backup # restart: unless-stopped # environment: # - PUID=1000 # - PGID=1000 # - TZ=Asia/Taipei # ports: # - "8200:8200" # volumes: # - ./duplicati/config:/config # - ./crafty/backups:/backups:ro # - ./crafty/servers:/source:ro # networks: # - minecraft_net # 7. Watchtower - 自動更新容器映像檔(可選) # watchtower: # image: containrrr/watchtower:latest # container_name: watchtower_minecraft # restart: unless-stopped # environment: # - TZ=Asia/Taipei # - WATCHTOWER_CLEANUP=true # - WATCHTOWER_SCHEDULE=0 0 4 * * * # 每天凌晨 4 點檢查更新 # - WATCHTOWER_INCLUDE_STOPPED=false # volumes: # - /var/run/docker.sock:/var/run/docker.sock # networks: # - minecraft_net networks: minecraft_net: driver: bridge volumes: netdataconfig: netdatalib: netdatacache: goedge_admin_mysql: # MySQL 資料庫(單獨備份用) goedge_admin_data: # Admin 所有資料(設定 + 日誌 + API) goedge_node_data: # Node 所有資料(設定 + 日誌)