# voitrans 业务单镜像部署 # # voitrans-a11: gateway + home + api + mcp + timer 五个集群服务(shell 脚本管理多进程)。 # 镜像版本通过 TAG 控制;接入外部网络(默认 1panel-network),与 etcd/mysql/redis/nats 通过容器名互通。 # 不直接 docker compose 调用,统一经 dev-deploy.sh / prod-deploy.sh(它们把 env/.env 落为 .env)。 services: voitrans-a11: image: ${REGISTRY:-docker-registry.ideapsound.com}/voitrans-a11:${TAG:-latest} container_name: voitrans-a11 restart: unless-stopped platform: ${PLATFORM:-linux/amd64} networks: - appnet # 把整个部署目录挂为 /app(WORKDIR):内含 confs/ log/ 及各服务运行期资源(密钥/词库等,如有) volumes: - .:/app # 把 .env 整体注入容器,供各 yaml 里 ${VAR} 在启动时展开(compose 默认只做文件内插值,需显式 env_file) env_file: - .env environment: TZ: Asia/Shanghai stop_grace_period: 30s # 端口(容器内部,对外经反代/NPM 暴露;如需直接发布改用下方 ports): # 7001 gateway RPCX / 7100 gateway HTTP # 7002 home RPCX / 7003 timer RPCX # 7004 mcp RPCX / 7300 mcp HTTP # 7005 api RPCX / 8080 api Console expose: - "7100" - "7300" - "8080" # 如需宿主机直接访问,取消注释(左=宿主端口,右=容器端口): # ports: # - "7100:7100" # gateway HTTP # - "8080:8080" # api Console # - "7300:7300" # mcp HTTP # 健康检查:探测 gateway HTTP 端口 healthcheck: test: ["CMD", "sh", "-c", "nc -z 127.0.0.1 7100 || exit 1"] interval: 30s timeout: 5s retries: 3 start_period: 30s # 外部共享网络:依赖的 etcd/mysql/redis/nats 在此网络(用容器名连接),目标机需预先存在 networks: appnet: name: ${DOCKER_NETWORK:-1panel-network} external: true