恢复 Discourse 备份到新服务器后无法登录

您好,

我已在新的虚拟机上恢复了一个 Discourse 备份。
恢复过程本身似乎成功了。我看到了正确的启动 GUI。

如果我尝试登录,会收到一个未知错误:

Processing by UsersController#create as */*
  Parameters: {"name"=>"Istvan XXXXXXX", "email"=>"istvan.XXXXXXXX@mailbox.org", "password"=>"[FILTERED]", "username"
=>"Istvan", "password_confirmation"=>"[FILTERED]", "challenge"=>"6662a14f4549a786ed0f37XXXXXX", "timezone"=>"Eur
ope/Berlin"}
Filter chain halted as :respond_to_suspicious_request rendered or redirected
Completed 200 OK in 3ms (Views: 0.2ms | ActiveRecord: 0.0ms | Allocations: 1007)
Started POST "/login" for 172.17.0.1 at 2021-10-13 13:37:31 +0000
Processing by StaticController#enter as HTML
  Parameters: {"username"=>"Istvan", "password"=>"[FILTERED]", "redirect"=>"/u/account-created"}
Redirected to http://discourse.XXXXXXXXX/u/account-created
Completed 302 Found in 2ms (ActiveRecord: 0.0ms | Allocations: 512)
Started GET "/u/account-created" for 172.17.0.1 at 2021-10-13 13:37:31 +0000
Processing by UsersController#account_created as HTML
  Rendered default/empty.html.erb within layouts/application (Duration: 0.1ms | Allocations: 11)
  Rendered layout layouts/application.html.erb (Duration: 60.6ms | Allocations: 36879)
Completed 200 OK in 81ms (Views: 62.1ms | ActiveRecord: 0.0ms | Allocations: 39906)
Started GET "/session/csrf" for 172.17.0.1 at 2021-10-13 13:37:48 +0000
Processing by SessionController#csrf as JSON
Completed 200 OK in 4ms (Views: 2.0ms | Allocations: 602)
Started POST "/session" for 172.17.0.1 at 2021-10-13 13:37:48 +0000
Processing by SessionController#create as */*
  Parameters: {"login"=>"Istvan", "password"=>"[FILTERED]", "second_factor_method"=>"1", "timezone"=>"Europe/Berlin"
}
Can't verify CSRF token authenticity.
  Rendered text template (Duration: 0.0ms | Allocations: 1)
Filter chain halted as :verify_authenticity_token rendered or redirected
Completed 403 Forbidden in 5ms (Views: 0.7ms | Allocations: 897)

您有什么解决此问题的建议吗?

此致

I.

尝试重置您的密码

我试过了,但它不起作用……

我认为电子邮件消息在旧安装中已被禁用(我恢复了其备份)。

我。

尝试通过控制台检查 force_https 是否已启用

SiteSetting.force_https

如果为 false,将其设置为 true

SiteSetting.force_https = true

您的意思是,在 Docker 容器内还是在 VM 的 bash 中?

在 Docker 内部。请在您的虚拟机中执行以下操作

cd /var/discourse/
./launcher enter app
rails c

谢谢,不过它实际上已经是“true”了:

image

也许需要将其设置为 false(我没有证书),或者我们需要使用正确的域名(它尚未进行 CNAME 配置)。

YAML 文件中未启用 HTTPS。

为什么不呢?Let’s Encrypt 会免费提供证书给您。

如果您试图在没有主机名的情况下使用 IP 地址,那就是您的问题。您必须使用主机名。

如果您未使用 https,则确实应将其设置为 false。

“生产”系统的域名为 “https://deinbalkonnetz.de”(托管于 discourse)。我们已将其迁移至内部虚拟机,该虚拟机仍使用域名 “discourse.itas-karlsruhe.de”。此域名(不支持 HTTPS)仍用于 app.yml 中。

迁移 Discourse 的正确顺序是什么?

#1 先将生产域名转发至虚拟机?
#2 同时将 app.yml 更改为最终域名并启用 Let’s Encrypt?

请确认!

谢谢。

I.

如果您要离开 discourse.org 托管服务,那么您应该首先取消您的订阅,以便上传的文件被包含在您的备份中。否则,您的备份将仅指向它们 S3/CDN 上的上传文件。

我建议您在一台具有公共 IP 的服务器上进行测试,或者至少在一台拥有有效 HTTPS 证书的服务器上测试(在私有 IP 上配置 HTTPS 证书更为困难)。

当您准备好迁移时,需要更改服务器的 DNS 记录并重新构建以获取 Let’s Encrypt 证书,因此在 DNS 传播期间,您将处于一段过渡期。

好的,非常感谢。

如果您要离开 discourse.org 托管,那么您应该首先取消您的订阅,以便上传内容被包含在备份中。否则,您的备份将仅指向他们 S3/CDN 上的上传内容。

我已请求新的备份……

我建议在具有公共 IP 的服务器上进行测试,或者至少是具有有效 HTTPS 证书的服务器(在私有 IP 上配置起来更困难)。

我将先在“rail c”中停用 HTTPS,以便能够登录。登录后,我会检查 lets encrypt 插件是否已激活(或者需要通过 app.yml 进行配置)?如果已激活,我将为临时域名启用 HTTPS。如果一切正常,我们将把最终域名转发到虚拟机,并使用该域名重新构建应用。

我认为这是一个合适的路线图……对吗?

您好,

在将 SiteSetting.force_https = false 设置为停用 HTTPS 后,网站已可访问,我能够以站点管理员身份登录。

我已按照以下步骤配置了 Let’s Encrypt:
(Set up HTTPS support with Let's Encrypt)

但在重建网站后,一切均未生效,浏览器中无法访问任何页面……

是否有办法检查问题出在哪里?

此致,

I.