GoDoxy:让 NAS 上的容器自己报上门,还能自动睡觉省电

我 NAS 上跑的自托管服务越来越多之后,入口网关反而成了最纠结的一块

Nginx Proxy Manager 够用,但容器一多,每次加路由都要进 WebUI 点几下;Traefik 够自动,可 label 写多了人也麻。有没有一种东西:既能让容器自动被发现、自动暴露域名,又带一个能看状态、看日志、管证书的面板?最近看到的 GoDoxy,大概就是冲着这个方向去的。

GoDoxy 是什么

GoDoxy 是一个用 Go 写的反向代理 + 自托管网关,定位是”面向自托管玩家的轻量级入口”。它最吸引我的不是反代本身,而是把几件事揉在了一起:

  • 自动路由发现:监听 Docker/Podman 容器,读取 label 或 compose 里的容器名,自动生成子域名路由;
  • WebUI 统一管理:路由、证书、容器日志、指标、服务器状态,一个页面看完;
  • Idle Sleeper:没人访问时自动停止容器,有请求时再自动唤醒,省内存省电;
  • Proxmox 集成:能自动绑定 PVE 节点和 LXC 容器,并在 WebUI 里启停;
  • 多 Docker 节点:单面板管多台宿主机的容器,适合家里多设备的场景。

项目仓库 3500+ star,最新 v0.30.1 就是几天前发布的,MIT 协议,commit 数已经超过 2000。对一个 2024 年初才创建的项目来说,迭代算快了。

为什么我会注意到它

说实话,我一开始只是想找个比 NPM 更”自动”的东西。NPM 的问题是:加服务要手动建 Proxy Host,改上游端口、改证书,服务一多就变成了重复的鼠标劳动。Traefik 能自动,但调试 label、看日志、解决 502 的时候体验一般。

GoDoxy 的做法比较中间态:你像往常一样写 docker-compose.yml,加个 proxy.aliases: qbt 的 label,它就能自动给你生成 qbt.yourdomain.com 的路由。不需要额外写一堆反代配置,也不强制你学习一套全新的 DSL。

而且它还有个我挺在意的功能:Idle Sleeper。NAS 上很多服务不是 24 小时都有人用的,比如某个电子书管理器、某个开发工具栈、某个偶尔才打开的图片处理服务。这些容器空转时也在吃内存和电。GoDoxy 可以在没有流量时把容器停掉,等下一次请求进来再唤醒。对内存只有 16GB 的家用 NAS 来说,这种”用的时候才醒”的机制很实用。

安装与基本用法

官方推荐用一键脚本部署:

/bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/yusing/godoxy/main/scripts/setup.sh)"
docker compose up -d

脚本会生成 compose.yml.envconfig/config.yml。需要提前做的是把 *.yourdomain.com 的泛域名 A 记录指向运行 GoDoxy 的机器。

官方强调 GoDoxy 设计为 host 网络模式 运行,不要改成 bridge,否则它监听端口和发现容器的方式会出问题。如果想改监听端口,改 .env 而不是改网络模式。

一个典型服务的 compose 写法大概是这样:

services:
  qbt:
    image: lscr.io/linuxserver/qbittorrent
    container_name: qb
    labels:
      - "proxy.aliases=qbt"
    networks:
      - default

GoDoxy 会自动用 proxy.aliases 作为子域名,没写的话就用 container_name。HTTPS 证书走 Let’s Encrypt,支持 DNS-01 自动续期。

WebUI 里能看到什么

面板主要分几块:

  • Apps:服务总览, uptime、CPU、内存、磁盘、网络,一行一个;
  • Routes:每个路由的健康状态、响应时间、日志流;
  • Servers:多节点监控,CPU/内存/磁盘 IO 的趋势图;
  • Settings:全局配置、证书、中间件、访问控制。

对家用环境来说,这个面板的信息密度刚刚好。不用单独再装一个 Uptime Kuma 或者 Beszel 看健康状态,虽然深度监控肯定不如专业工具,但日常判断”是不是这个服务挂了”足够。

Idle Sleeper 是亮点,但也有条件

Idle Sleeper 的逻辑是:GoDoxy 代理层持续统计每个路由的流量,当一段时间内没有请求时,调用 Docker API 停止容器;下一次有请求进来时,先把容器启动,等健康检查通过再转发流量。

这个功能适合的场景:

  • 启动时间不长的服务(几秒到几十秒);
  • 不需要高可用、偶尔访问的内部工具;
  • 内存紧张,想尽量少跑容器的机器。

不太适合的场景:

  • 对首包延迟敏感的服务,唤醒那几十秒会有人明显感觉到;
  • 数据库、消息队列这类有状态核心服务;
  • 健康检查配置不对的服务,唤醒后可能一直报错。

v0.30.0 还把默认唤醒超时从 30 秒提到了 3 分钟,说明作者也意识到有些服务启动没那么快。实测时建议先把超时调大,再观察日志。

几个需要注意的坑

1. Host 网络是硬要求

GoDoxy 不是简单”建议”用 host 网络,而是很多功能依赖它。如果你习惯给所有容器配 bridge + 端口映射,这里要改思路。

2. 目前只支持 Linux

官方明确只支持 Linux amd64 / arm64。Mac 用户想本地试,只能跑在虚拟机或远程 Linux 里。

3. 泛域名证书需要 DNS-01

如果你要用 Let’s Encrypt 的通配符证书,必须配置 DNS 提供商的 API。HTTP-01 只能签发单域名。

4. Proxmox 集成要权限

想从 WebUI 启停 LXC,GoDoxy 需要能连上 PVE API 并有对应权限。家用小环境可能还得额外配一个 API Token。

5. 项目还在快速迭代

v0.30.x 相比 v0.29 改动不小,Proxy Protocol、Idlewatcher、API 初始化顺序都有调整。生产用之前建议先看 release note,避免升级后配置失效。

和同类工具怎么选

工具 适合谁 短板
Nginx Proxy Manager 只想点鼠标就能反代的人 不够自动化,服务多后重复劳动多
Traefik 云原生、K8s 用户 label 复杂,调试体验一般
Caddy 喜欢简单配置文件的极客 生态插件要自己维护
GoDoxy 自托管玩家、多容器 NAS、Proxmox 用户 较新,文档还在完善,Mac 不支持

如果你家里有一台 NAS、几台 LXC、十几个容器服务,GoDoxy 的”自动发现 + 面板 + Idle Sleeper”组合确实比传统方案更省心力。但如果你只是反代一两个服务,NPM 或 Caddy 反而更稳。

我的结论

GoDoxy 不是 Traefik 的替代品,更像是一个”自托管场景的专用网关”。它把路由发现、证书、监控、省电集成在一个面板里,降低了多服务家庭的维护成本。

我打算先在测试环境里跑两周,重点观察 Idle Sleeper 对常用服务的延迟影响,以及多节点场景下路由同步是否稳定。如果没问题,再把它切到主 NAS 上。对同样在家折腾一堆容器的人来说,这个项目值得关注。

项目地址:github.com/yusing/godoxy

文档:docs.godoxy.dev

发表评论