更改主机名

我导出了 Discourse 容器的一个较旧版本和 Discourse 的 docker 文件,并将其导入到另一台服务器上。
我需要更改 Discourse 的主机名以匹配新服务器。

  • 是否有办法在不重建的情况下使新的 DISCOURSE_HOSTNAME: 生效?
  • 如果我必须重建,它会从 main 分支拉取最新版本并覆盖我当前的版本吗?因为我需要运行当前的确切版本。

你好 Islam :slight_smile:

据我所知,没有。

是的,它会的。

您可以在此处找到与您想要实现的目标相关的信息:Search results for 'install version discourse' - Discourse Meta

您需要更改 Let’s Encrypt 的配置,这(至少部分)是您需要重建的原因。

为什么不升级?这才是您真正需要做的。它到底有多旧?

但是,您可以设法固定 discourse_docker(又名 /var/discourse)以及您正在使用的 Discourse 版本。您可能还需要固定所有插件。

如果您有其他东西在处理 https 解析,那么您也许可以避免重建,只需执行 Change the domain name or rename your Discourse 中的其他操作。

我需要让该实例拥有相同版本以便测试升级到最新版本,如果成功,将在生产环境中执行升级。

如果您有其他东西在处理 https 解析,那么您或许可以避免重新构建,只需在 更改域名或重命名您的 Discourse 中执行其他操作。
HTTPS 是在负载均衡器上处理的,但该链接说我必须在修改 app.yml 后重新构建。

  • 那么如果我固定版本,对于 discourse_docker,我应该检出当前的提交哈希吗?
  • 对于容器内的 Discourse 应用,我也应该使用 version: <commit_hash> 在 app.yml 中设置其当前的提交哈希吗?
  • 插件呢?

如果在测试服务器上安装当前版本并恢复数据库,您很可能可以升级生产服务器。

您提出的方法可能需要几个小时的工作,包含许多难以在论坛上描述的令人困惑的小细节,并且不会证明任何通过将生产数据库恢复到新服务器无法证明的事情。

只需将暂存服务器和生产服务器指向同一个 S3 备份存储桶,备份生产环境并将其恢复到暂存服务器。今后,它们将保持一致,您可以快速连续地升级暂存和生产环境。

1 个赞

我触发了重建,但得到的是:

I, [2023-04-07T19:17:58.707365 #1]  INFO -- : cd /var/www/discourse & gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,""); print $0 }' Gemfile.lock)
ERROR:  Could not find a valid gem 'bundler' (= 2.3.4), here is why:
          Unable to download data from https://rubygems.org/ - Net::OpenTimeout: execution expired (https://rubygems.org/specs.4.8.gz)

但我可以从主机 curl rubygems.org

以上错误有什么建议吗?

你是否执行了命令行重建?这是标准安装吗?

是的,重新构建命令以及通过 GUI 发起的升级都出现了相同的错误。

由于错误(4/4)正在重试获取器:Bundler::HTTPError 由于底层错误 <Net::OpenTimeout: execution expired (https://rubygems.org/specs.4.8.gz)> 无法从 https://rubygems.org/ 获取规范

安装锁定的 bundler 版本(2.4.4)时出错,请使用 `--verbose` 标志重新运行以获取更多详细信息。继续使用 bundler 2.3.6。
正在从 https://rubygems.org/ 获取源索引

由于底层错误 <Net::OpenTimeout: execution expired (https://rubygems.org/specs.4.8.gz)> 无法从 https://rubygems.org/ 获取规范
Docker Manager: 升级失败