version: "3.9" services: # -------- RustFS 主服务 -------- rustfs: image: rustfs/rustfs:1.0.0-alpha.60 container_name: rustfs restart: unless-stopped volumes: - /vol2/1000/rustfs_vol2:/data - ./data:/app/data:rw environment: RUSTFS_VOLUMES: /data/rustfs0 RUSTFS_ADDRESS: ":9000" RUSTFS_SERVER_DOMAINS: rfs.jmsu.top RUSTFS_ACCESS_KEY: ${RUSTFS_ACCESS_KEY} RUSTFS_SECRET_KEY: ${RUSTFS_SECRET_KEY} RUSTFS_CONSOLE_ENABLE: "true" # **仅绑定到本机 Tailscale IP**,供云端 Traefik 反代 ports: - "${LOCAL_TS_IP}:9000:9000" # -------- RustFS MCP 接口(假设走 HTTP on :9009)-------- rustfs-s3-toolkit: image: hotwa/rustfs-s3-toolkit:latest container_name: rustfs-mcp restart: unless-stopped environment: MCP_PORT: "9009" volumes: - ./data:/app/data:rw ports: - "${LOCAL_TS_IP}:9009:9009" # -------- Registrar:把 :9000 注册到 rfs.jmsu.top -------- registrar-rustfs: image: hashicorp/consul:1.21 container_name: registrar-rustfs restart: unless-stopped depends_on: - rustfs volumes: - ./registrar.sh:/registrar.sh:ro environment: # 指向“云端” Consul Server(通过 Tailscale) CONSUL_HTTP_ADDR: "http://${CONSUL_SERVER_IP}:8500" # 下面这 4 个由 registrar.sh 必填 SERVICE_NAME: "rustfs" SERVICE_ADDR: "${LOCAL_TS_IP}" SERVICE_PORT: "9000" ROUTE_HOST: "rfs.jmsu.top" # 可选项(HTTP/TCP、健康检查、入口等) SERVICE_PROTOCOL: "http" CHECK_TYPE: "http" CHECK_PATH: "/" CHECK_INTERVAL: "10s" CHECK_TIMEOUT: "2s" DEREG_AFTER: "1m" TRAEFIK_HTTP_ENTRYPOINT: "websecure" TRAEFIK_TCP_ENTRYPOINT: "tcp" # TRAEFIK_CERT_RESOLVER 可在云端用 file/dynamic 统一配置,这里不强制 command: ["/bin/sh","/registrar.sh"] # -------- Registrar:把 :9009 注册到 mcprfs.jmsu.top -------- registrar-mcprfs: image: hashicorp/consul:1.21 container_name: registrar-mcprfs restart: unless-stopped depends_on: - rustfs-s3-toolkit volumes: - ./registrar.sh:/registrar.sh:ro environment: CONSUL_HTTP_ADDR: "http://${CONSUL_SERVER_IP}:8500" SERVICE_NAME: "mcprfs" SERVICE_ADDR: "${LOCAL_TS_IP}" SERVICE_PORT: "9009" ROUTE_HOST: "mcprfs.jmsu.top" SERVICE_PROTOCOL: "http" # 如果 MCP 走 TCP,请改成 "tcp" 并把 CHECK_TYPE 改为 tcp CHECK_TYPE: "http" CHECK_PATH: "/" CHECK_INTERVAL: "10s" CHECK_TIMEOUT: "2s" DEREG_AFTER: "1m" TRAEFIK_HTTP_ENTRYPOINT: "websecure" TRAEFIK_TCP_ENTRYPOINT: "tcp" command: ["/bin/sh","/registrar.sh"]