根域名在 bootstrap 时定死(FELIS_ROOT_DOMAIN),之后没有任何改它的流程。要换域名,得手工碰六个面,其中只有 login 的 CR 会自收敛:
FELIS_ROOT_DOMAIN
漏掉任何一个,症状是部分功能坏掉而不是整体报错 —— 最难查的那种。
Identified by Claude Opus 5 (claude-opus-5) while mapping what a live domain change would have to touch, on 2026-07-28.
这一条和「Make configuration updates reach already-deployed installs」(issue #1)同源:根域名会渗进已渲染的产物里,而重跑 setup 不会重渲染它们。
另有一个不在代码里的前提条件:DNS 上 *.<domain> 的通配不覆盖 op.console.<domain> —— 那是第三层,必须单独有记录。换域名时这一条最容易漏。
*.<domain>
op.console.<domain>
有一条命令或流程,输入新域名,六个面全部收敛,且能验证。
重跑 bootstrap 不是解法。 它会覆盖运维手动调过的东西,包括那张写一次就不动的 panel 证书。
在这条落地之前,至少应该有一份把六个面逐条列出来的手册 —— 现在连清单都散在各处。
6a06185 加了 sudo felis domain set [-yes] <新根域名> 和 sudo felis domain check。
6a06185
sudo felis domain set [-yes] <新根域名>
sudo felis domain check
set 先打印计划(每个面从什么改成什么、会作废多少 passkey、没有 SMTP 时如何恢复),加 -yes 才动手。执行顺序:两份 toml → panel 证书(Felis 自签的重签,旧证书留作 *.pre-domain-<时间>;运维自己的证书若不覆盖新名字,在改动任何东西之前就停下)→ 两个命名空间的 felis-config 与 felis-api-tls Secret → login 的 CR env → 代理的 felis-link.properties → 滚动 felis-api → 重启 felis-velocity → 等 login pod 带新 env 就绪 → 跑 check。在 [auth] 里手动设的主机名保留不动。重复执行只收敛还落后的面。 check 每个面输出一行(包括 Cloudflare tunnel ingress 和 DNS,并单独提示通配记录不覆盖 op.console),有面落后时退出码为 1。
-yes
*.pre-domain-<时间>
felis-config
felis-api-tls
[auth]
op.console
安装器(23b7c14):重跑时保留 [auth]。已安装的主机若带了不同的 FELIS_ROOT_DOMAIN,安装器在第一步就退出,并提示改用 felis domain set。 54a5331:felis-link.properties 内容没变时不再重写,check 用 mtime 判断代理是否落后因此不会误报。
felis domain set
VM 实测(k3s / CentOS Stream 9):
10.211.55.6.nip.io → 10-211-55-6.nip.io
/config.json
Felis routing ready: rootDomain=10-211-55-6.nip.io
FELIS_PANEL_HOSTNAME
set -yes
10.211.55.6.nip.io
测试:Go 单测和 shell 测试逐条做了变异验证(故意改坏被测代码,确认测试变红后再恢复)。 文档:docs/operations.md §6。
No dependencies set.
The note is not visible to the blocked user.
问题
根域名在 bootstrap 时定死(
FELIS_ROOT_DOMAIN),之后没有任何改它的流程。要换域名,得手工碰六个面,其中只有 login 的 CR 会自收敛:漏掉任何一个,症状是部分功能坏掉而不是整体报错 —— 最难查的那种。
证据
Identified by Claude Opus 5 (claude-opus-5) while mapping what a live domain change would have to touch, on 2026-07-28.
这一条和「Make configuration updates reach already-deployed installs」(issue #1)同源:根域名会渗进已渲染的产物里,而重跑 setup 不会重渲染它们。
另有一个不在代码里的前提条件:DNS 上
*.<domain>的通配不覆盖op.console.<domain>—— 那是第三层,必须单独有记录。换域名时这一条最容易漏。验收
有一条命令或流程,输入新域名,六个面全部收敛,且能验证。
备注
重跑 bootstrap 不是解法。 它会覆盖运维手动调过的东西,包括那张写一次就不动的 panel 证书。
在这条落地之前,至少应该有一份把六个面逐条列出来的手册 —— 现在连清单都散在各处。
6a06185加了sudo felis domain set [-yes] <新根域名>和sudo felis domain check。set 先打印计划(每个面从什么改成什么、会作废多少 passkey、没有 SMTP 时如何恢复),加
-yes才动手。执行顺序:两份 toml → panel 证书(Felis 自签的重签,旧证书留作*.pre-domain-<时间>;运维自己的证书若不覆盖新名字,在改动任何东西之前就停下)→ 两个命名空间的felis-config与felis-api-tlsSecret → login 的 CR env → 代理的 felis-link.properties → 滚动 felis-api → 重启 felis-velocity → 等 login pod 带新 env 就绪 → 跑 check。在[auth]里手动设的主机名保留不动。重复执行只收敛还落后的面。check 每个面输出一行(包括 Cloudflare tunnel ingress 和 DNS,并单独提示通配记录不覆盖
op.console),有面落后时退出码为 1。安装器(23b7c14):重跑时保留
[auth]。已安装的主机若带了不同的FELIS_ROOT_DOMAIN,安装器在第一步就退出,并提示改用felis domain set。54a5331:felis-link.properties 内容没变时不再重写,check 用 mtime 判断代理是否落后因此不会误报。
VM 实测(k3s / CentOS Stream 9):
10.211.55.6.nip.io → 10-211-55-6.nip.io用时 34 秒。独立核对了四处:30443 上实际下发的证书 SAN、两个主机名下的/config.json、代理日志Felis routing ready: rootDomain=10-211-55-6.nip.io、login pod 的FELIS_ROOT_DOMAIN/FELIS_PANEL_HOSTNAME,全部是新名字。set -yes:所有面都是 already,felis-api pod 和代理启动时间都没变。FELIS_ROOT_DOMAIN跑安装器:输出第 4 行就拒绝,没有改动任何东西。10.211.55.6.nip.io:30 秒,check 全部 ok。测试:Go 单测和 shell 测试逐条做了变异验证(故意改坏被测代码,确认测试变红后再恢复)。
文档:docs/operations.md §6。