我已经到了绝望的边缘,因为试图让 Discourse 机器人或 Claude 来解决这个问题似乎是不可能的。我真的无法清楚地解释这个问题,因为我的技术知识有限,我认为这才是真正困扰我的地方。
我会尝试从我的角度解释一下发生了什么。
当我从单容器迁移到双容器时,samples/ 目录中的文件使用了 web-only,我错误地保留了它,而没有使用 web_only。
然后,由于这个原因(我认为是这样),我的图片无法加载,因为某个“部分”预期指向 web_only,但它被设置为了 web-only。我进行了一些更改,图片问题得到了修复。现在的问题在于 Let’s Encrypt 证书。
我让机器人帮我修复,它让我等到第二天,因为问题是证书速率限制。问题应该会自动解决。但没有。然后我又问了它一次,接着问了 Claude,又问了 Claude 一次……过去一周我们一直在经历这种“等到明天 X 点它一定会修好”的循环。它从来没有修好,它们都说“哦,对不起,我不应该假设它会修好,让我们试试这个,因为现在它真的会修好了”。但事实并非如此。
网站本身是正常运行的,但我感觉每次我想重建时,都会出点什么事,老实说,我不想总是依赖这种权宜之计。
Claude 告诉我向 web_only.yml 中的 hooks 添加某些内容,但这里论坛提供的说明中并没有提到类似的东西,所以我期待另一种解决方案,比如……解决实际问题。
请有人能帮我弄清楚问题所在,以及哪里出现了故障吗?我会非常感激,因为到目前为止这真的让人精疲力竭。不是工作本身,而是不明白发生了什么,以及为什么“等到明天”似乎永远无法解决任何问题。
谢谢!
我让 Claude 解释一下问题似乎是什么,也许这会有帮助?这是它说的:
标题: 双容器设置:拆分后 ECC 证书文件夹缺失,每次启动时 --force 循环触发速率限制
设置: 两个容器(data + web_only),从独立模式迁移而来。模板:web, ratelimited, ssl, letsencrypt, cloudflare。主机名 alltiago.com,无别名。
症状: 每次启动 web_only 时都会触发 Let’s Encrypt 速率限制,nginx 无法提供服务,返回连接错误,直到手动从 /etc/nginx/conf.d/outlets/server/20-https.conf 中移除 ECC 行。
我发现的情况:
/shared/letsencrypt/alltiago.com_ecc/ 在我的安装中不存在。/shared/letsencrypt/alltiago.com/(RSA)存在并正常工作,正常续期。
在 web.letsencrypt.ssl.template.yml 中:
cert_exists() {
[[ "$(cd ${LETSENCRYPT_DIR}/${DISCOURSE_HOSTNAME}$1 && openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer | grep "OK")" ]]
}
issue_cert "ec-256"
if ! cert_exists "_ecc"; then
issue_cert "ec-256" "--force"
fi
由于目录缺失,cert_exists "_ecc" 在每次启动时都会失败,因此 --force 会运行并请求一个全新的 ECC 证书,无论磁盘上有什么。这是通过 after_ssl 钩子实现的,该钩子修补了 /etc/runit/1.d/install-ssl,因此它不仅在引导时运行,而且在每次容器启动时都会运行。
结果:429 too many certificates (5) already issued for this exact set of identifiers in the last 168h。然后 --installcert 仍然针对空目录运行,并写入一个不可用的 /shared/ssl/alltiago.com_ecc.cer。nginx 配置了两个证书,无法加载 ECC 证书,因此无法提供服务。
已确认正常工作: ACME HTTP-01 验证成功(通过 staging 测试,ECC 证书针对 letsencrypt_test 正常签发,目录结构创建正确)。RSA 证书今天成功续期。所以这不是 DNS、防火墙或验证的问题。
问题:
- 是否有支持的方法可以在不等待速率限制过期的情况下重建
alltiago.com_ecc/? cert_exists返回 false 是否应该触发--force而不是正常的 issue?--force会绕过“现有有效证书”检查,并在目录缺失时保证速率限制耗尽。- 是否有文档说明如何仅运行 RSA?
为了不让话题跑偏,这里有两个事实说明:重试日期从 8 月 27 日推迟到了 8 月 29 日,因为今天的 RSA 续期消耗了滚动 168 小时窗口中的一个名额。而且没有人报告这个问题的原因是,在正常安装中,两个目录都会在首次启动时创建,并且 --force 分支永远不会运行。