将您的 Discourse 实例迁移到不同的服务器

在此补充一个我在迁移过程中遇到的边缘情况,希望能帮助到其他遇到类似问题的人。

在将独立的 Discourse 实例迁移到新 VPS 时,我遇到了一个 Let’s Encrypt/SSL 的边缘情况,因此我记录了详细的诊断和恢复步骤,希望这对其他按照本指南操作的人有用。

在我的案例中,app 内的 nginx 无法启动,因为 /var/discourse/shared/standalone/ssl/ 中的两个 .cer 文件都变成了零字节文件:

PEM_read_bio_X509_AUX() failed

重新构建尝试再次签发证书,经过多次尝试后,我触发了 Let’s Encrypt 的证书速率限制。仅从旧服务器复制仍然有效的证书文件是不够的,因为启动 app 会再次将它们替换为零字节文件。

最终解决问题的方法是停止 app,并从旧服务器复制工作正常的 /var/discourse/shared/standalone/ssl/ 目录以及对应的 /var/discourse/shared/standalone/letsencrypt/ 状态,然后再次启动容器。

我已在此处记录了完整的步骤:

这些是针对此次特定迁移的诊断/恢复笔记,而非官方迁移或 HTTPS 文档的替代品。

还有一个较旧的 Meta 主题涵盖了相关的零字节 .cer 故障模式: