← 全部作品
服务台首页。八个服务挂在同一条入口下,只用一次登录。
服务台
把散在七八个地方的内部服务收进一个入口,登录和证书只有一套

为什么做
这几年陆续往服务器上装东西:密码库、监控、远程桌面、图床、备份、证书。每个都有自己的一套东西要记——端口、登录页、证书什么时候到期。
一开始还记得住,后来就记不住了。有一回想看看备份跑没跑成功,翻了半天才想起来是哪个端口。证书更麻烦,八个服务各管各的,到期时间不一样,有几回是浏览器先报了错我才知道。
所以做了这么一个首页:一个域名进来,所有服务都在,登录过一次就不用再登,证书统一续。
关键的取舍
不改动各个服务本身。 每个服务都有自己的账号体系,我没有去改它们,而是在门口加了一层。代价是有些服务的界面里还会冒出它自己的登录框,看着重复。换来的是我升级任何一个服务都不用管登录。
公网只开 80 和 443。 其他服务的端口一律退到内网,外面碰不到。加一个新服务不用动防火墙规则,这是最省事的地方。代价是调试的时候必须先想清楚流量从哪进来。
首页只显示状态,不做图表。 我本来想把每个服务的指标都抓过来画在一张图上。后来发现我真正会看的只有 它活着吗,要看细节点进去就行。首页因此简单了很多,代价是有时候得多点一下。
统一入口是怎么做的
所有流量先到一台反向代理(我用的是 Caddy),由它按域名分发到各个服务。每个服务只在自己的容器里监听端口,这些端口不对公网暴露。首页就是一个静态目录,file_server 把它直接发出去。
archerhan.com {
root * /srv/site
file_server
}
home.archerhan.com {
reverse_proxy home:3000
}
新加一个服务就是复制一段、改个域名。
回头看
动手的时候我以为最难的是统一登录,真正拖时间的是证书。八个服务的续期方式各不相同,有几个根本不支持自动续,最后是写了个脚本每月跑一次。
麻烦的从来不是功能本身,而是那些你以为顺手就能带上的边角。
Next.js · Caddy 统一入口 · 每个服务一个子域 · 源码不公开