您好。几小时前,我使用 ./launcher rebuild app 更新了 Discourse Image 和 Discourse。在此过程中,我遇到了一些错误,通过从 app.yml 中删除已弃用的插件安装行得以修复。没有进行其他配置更改。现在我有一个正在运行的 Docker 容器,监听 80 和 443 TCP 端口,但容器内的 nginx 拒绝接受 SSL/TLS 连接。容器内的 error.log 显示证书没有错误,access.log 显示没有请求,telnet 到 443 端口显示连接被拒绝,TCP 端口 80 上的 HTTP 访问正常,但我们遇到了 SSO 身份验证问题(可能是安全 cookie 问题)。Launcher 重启和 discourse-doctor 均无效。在容器内重启 nginx 也无效。现在应该在哪里查找问题以及该怎么做?
我没有对ufw、iptables等进行任何配置更改。在更新之前端口是正常打开的。配置是否会在Discourse更新过程中被更改?
当然可以,Discourse docker 容器应该在 ufw 前面。但是,不打开 443 端口会导致不同容器之间的通信问题或 telnet 问题。
.\launcher logs app 返回什么?(您可以使用 MS Word 来编辑您的域名等)
您是通过 PuTTy 还是其他 SSH 客户端访问您的服务器?是否打开了 22 端口?
我也在自托管实例上看到了这个问题,这是在最近重建之后出现的。除了重建本身,配置没有任何变化。我可以通过 SSH 访问服务器,这是 ./launcher logs app 的输出。
run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
run-parts: executing /etc/runit/1.d/cleanup-pids
Cleaning stale PID files
run-parts: executing /etc/runit/1.d/copy-env
run-parts: executing /etc/runit/1.d/install-ssl
Started runsvdir, PID is 45
ok: run: redis: (pid 55) 0s
supervisor pid: 53 unicorn pid: 76
Docker 容器正在运行,我的 docker ps 输出证明了这一点。(容器 ID 已隐藏)
local_discourse/app “/sbin/boot” 16 minutes ago Up 16 minutes 0.0.0.0:80-\u003e80/tcp, [::]:80-\u003e80/tcp, 0.0.0.0:443-\u003e443/tcp, [::]:443-\u003e443/tcp, 0.0.0.0:5432-\u003e5432/tcp, [::]:5432-\u003e5432/tcp app
一个重要的注意事项是,我们不使用 openSSL 来获取证书,因为需要一个特定的颁发者。但是,此证书没有更改,并且在重建之前一直正常工作。
看起来 nginx 期望的 IP(本地 IP)与分配给容器的 IP 之间存在不匹配。看起来容器可能在桥接模式下运行?这是容器的网络设置。
“Labels”: {
“org.opencontainers.image.created”: “2025-07-25T21:40:36+00:00”
},
“NetworkSettings”: {
“Bridge”: “”,
“SandboxID”: “[REDACTED]”,
“SandboxKey”: “[REDACTED]”,
“Ports”: {
“443/tcp”: [
{
“HostIp”: “0.0.0.0”,
“HostPort”: “443”
},
{
“HostIp”: “::”,
“HostPort”: “443”
}
],
“5432/tcp”: [
{
“HostIp”: “0.0.0.0”,
“HostPort”: “5432”
},
{
“HostIp”: “::”,
“HostPort”: “5432”
}
],
“80/tcp”: [
{
“HostIp”: “0.0.0.0”,
“HostPort”: “80”
},
{
“HostIp”: “::”,
“HostPort”: “80”
}
]
},
“HairpinMode”: false,
“LinkLocalIPv6Address”: “”,
“LinkLocalIPv6PrefixLen”: 0,
“SecondaryIPAddresses”: null,
“SecondaryIPv6Addresses”: null,
“EndpointID”: “[REDACTED]”,
“Gateway”: “172.17.0.1”,
“GlobalIPv6Address”: “”,
“GlobalIPv6PrefixLen”: 0,
“IPAddress”: “172.17.0.2”,
“IPPrefixLen”: 16,
“IPv6Gateway”: “”,
“MacAddress”: “[REDACTED]”,
“Networks”: {
“bridge”: {
“IPAMConfig”: null,
“Links”: null,
“Aliases”: null,
“MacAddress”: “[REDACTED]”,
“DriverOpts”: null,
“GwPriority”: 0,
“NetworkID”: “[REDACTED]”,
“EndpointID”: “[REDACTED]”,
“Gateway”: “172.17.0.1”,
“IPAddress”: “172.17.0.2”,
“IPPrefixLen”: 16,
“IPv6Gateway”: “”,
“GlobalIPv6Address”: “”,
“GlobalIPv6PrefixLen”: 0,
“DNSNames”: null
}
}
}
app.yml 中似乎有一个新的 PR 引入了新的变量要求。这似乎还没有文档记录,但您需要在 app.yml 文件中添加 ENABLE_SSL: true。
这听起来像是一个错误。SSL 几年前就已经默认开启了。你能提供一下提交的链接吗?
我在 SSL 模板的代码中看到了它。我可能遗漏了什么,因为我正在用手机查看,而且 GitHub 也有问题,但看起来它会破坏所有自托管的站点。
干得漂亮,杰夫!谢谢!
感谢修复 @featheredtoast
谢谢,各位。我们也解决了这个问题。
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.