Skip to content

feat: 无头模式 + /healthz + Docker 部署 (#79) - #108

Open
ghshhf wants to merge 2 commits into
LAGcomcom:masterfrom
ghshhf:fix/headless-healthz
Open

ghshhf wants to merge 2 commits into
LAGcomcom:masterfrom
ghshhf:fix/headless-healthz

Conversation

@ghshhf

@ghshhf ghshhf commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

需求

托盘程序跑不进容器/服务器。要部署到 Docker、NAS 或任何无图形会话的机器,需要三样东西:不启托盘、有健康检查端点、有可复用的镜像。

修复

  1. 无头模式:ZEN_GATE_HEADLESS=1 等价于 --no-tray,在 flag.Parse() 之后生效,显式传参的优先级不受影响。
  2. /healthz:与 /health 同义(Kubernetes 探针与 Docker HEALTHCHECK 的默认约定名),响应体保持不变。
  3. Docker:Dockerfile(多阶段构建,alpine 运行层,ZEN_GATE_HOME=/data 挂卷,内建 HEALTHCHECK)+ docker-compose.yml(8787 端口、命名卷、restart: unless-stopped)。

配置目录走 ZEN_GATE_HOME,容器重建不丢配置。

实测

在本机以空配置目录起了一个无头实例(ZEN_GATE_HEADLESS=1 ZEN_GATE_HOME=… --port 18787):

$ curl http://127.0.0.1:18787/healthz
{"ok":true,"service":"zen-gate"}

日志确认无窗口、正常出服务:dashboard ready at http://127.0.0.1:18787。

两点说明

  • 单实例锁在容器里不是问题(一个容器一个进程),但同一台机上做无头灰度时需要 ZEN_GATE_ALLOW_MULTI=1,否则第二次启动会去聚焦已有窗口 —— 这个行为我保留原样,没有改动。
  • 内置 Qoder 网关的固定端口 8095 与宿主实例撞了会打日志跳过,不影响 8787 上的服务;容器内单实例部署不涉及。

测试

go build ./... / go vet ./... 通过;internal/gateway 测试通过(22.2s)。

Closes #79

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

【功能请求】支持 Docker / 无头部署,并允许管理端可选放开局域网访问

1 participant