在家庭互联网环境下通过Cloudflare Tunnel安装Discourse

您好,

我刚在我的 R-Pi 4 上安装了 Discourse 和 Cloudflared,并遵循了原始帖子的说明,但不确定 Discourse 的主机应该填什么,因为 Cloudflared 隧道会转发它,我应该只填 localhost 吗?
也许 @Falco 可以帮忙?

顺便说一句,抱歉顶帖。

2 个赞

您仍然需要拥有一个域名才能使用本指南,因此 host 值将是您为 Discourse 和隧道配置的域名顶点或子域名。

2 个赞

所以主机值应该是我想让 Discourse 所在的子域?

2 个赞

是的,它应该是您想要 Discourse 的网址。

3 个赞

你确定吗?
如果我这样做,它会给我这个错误:


你认为我做错了什么吗?

我将 Discourse 主机名设置为我想要 Discourse 所在的精确子域名。
我按照此处所述(Set up your first tunnel · Cloudflare One docs CLI 安装了 Cloudflared 到 R-Pi4,并将其作为服务运行。
而且,我确信我按照你原始帖子中的说明安装了 Discourse。

2 个赞

您可以分享一下域名吗?

我能私信发给你吗?我不太想让陌生人看到。

1 个赞

现在你设置了正确的域名,它能正常工作了吗?

2 个赞

太棒了!刚启动!感谢您的帮助!我只有一个与 MailJet(我用于 STMP 的邮件提供商)有关的问题,它正在预先阻止我的验证电子邮件。

2 个赞

帖子已拆分为新主题:Any MailJet alternatives?

一个帖子已合并到现有主题:任何 MailJet 替代方案?

嘿,我成功安装了!我有一个小问题,您认为配备 4GB 内存的树莓派 4 型 B 可以处理多少活动/用户?

2 个赞

这是一个很好的问题。由于在像 Discourse 这样复杂的系统中很难直接将用户数量与服务器负载相关联,因此承认 Raspberry Pi 系统中的主要瓶颈是存储 IOPS 是公平的。

因此,只要您的大部分所需资源都位于 RAM 中,介于进程 RSS 和 Linux 缓存之间,您就应该获得流畅的体验。Cloudflare 充当缓存 CDN 的事实也将大有帮助,您甚至可以使用 使用对象存储进行上传(S3 和克隆) 来延长 Pi 设置的使用寿命。

5 个赞

我收到了这个 Docker 部分的错误

FAILED
--------------------
Pups::ExecError: /usr/local/bin/ruby -e 'if ENV["DISCOURSE_HOSTNAME"] == "discourse.example.com"; puts "Aborting! Domain is not configured!"; exit 1; end' failed with return #<Process::Status: pid 115 exit 1>
Location of failure: /usr/local/lib/ruby/gems/2.7.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params "/usr/local/bin/ruby -e 'if ENV[\"DISCOURSE_HOSTNAME\"] == \"discourse.example.com\"; puts \"Aborting! Domain is not configured!\"; exit 1; end'"
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
9ba0db264ae559f3f748cc1e42a8683ea0b4e355b0d45da0f472afea7ff7c472

这意味着您没有正确配置域名。您需要一个有效的域名才能使其正常工作。请再次运行 ./discourse-setup 或编辑 app.yml 文件进行修复。

1 个赞

谢谢回复,我已成功在 RockPi4 上部署 :+1:

3 个赞

你好 @Falco

我确信我已按照你的指南进行设置,但我注意到有些奇怪。

在容器配置中,我没有加载 SSL 模板,并且 DISCOURSE_FORCE_HTTPS 环境变量设置为 true。我不确定这有什么作用,但我想它会将 SiteSetting.force_https 设置为 true,然后在管理员仪表板中隐藏它以防止被禁用。

我的 cf tunnel 配置如下:

ingress:
  - hostname: dc.example.com
    service: http://dc:80 # dc 是我的 discourse 单机应用容器名称

问题是,我可以访问 http://dc.example.com,它不会重定向到 https。这是预期行为吗?

你能重现这个问题吗?我想知道这是否是一个 bug。

我相关的 cf 设置是:

  • SSL/TLS > Overview > SSL/TLS encryption mode: full (不是 full (strict))
  • SSL/TLS > Edge Certificates > Always Use HTTPS: off

我知道我可以让 cf 进行重定向(通过 Always Use HTTPS 或批量重定向规则),但我原以为 discourse 会处理这个问题并在 force_https 为 true 时重定向所有内部 URI。有什么想法?

忽略重定向问题,无论 DISCOURSE_FORCE_HTTPSSiteSetting.force_https 的值如何,浏览 https://dc.example.com 都可以正常工作。

编辑:尽管不明白 force_https 实际上有什么作用(也许如果未包含 SSL 模板,它就什么都不做?),但我突然想到,如果 discourse 实际将所有内容 https 重定向,那么 tunnel 配置可能无法按原样工作。如果它这样做了,argotunnel 就无法通过 http(如 service: http://dc:80)访问 discourse,所以也许我应该:

  • 依赖 cf 进行重定向 OR
  • 让 discourse 使用证书,并让 cloudflared 通过 https 访问 discourse 源站 (service: https://dc:443)

总之,也许你的 argotunnel 指南可以更新以解决这个问题?

2 个赞

你说得对。我没注意到我的测试 TLD .dev 仅支持 HTTPS:

我已经更新了指南,告知用户为此使用页面规则,感谢你的报告!

2 个赞

但我有一个问题……
我看到“合并页面浏览量”上有很高的匿名查看量,我认为这是由于 DDoS 攻击,因为服务器 CPU 达到了 60%,而爬虫只占一小部分……但如何防止 DDoS 攻击呢?……先谢谢你的回答。

1 个赞

如果您使用 Cloudflare 作为反向代理(这与 Cloudflared/Argo Tunnel 是分开的),您应该能获得一些开箱即用的 DDoS 防护。在您的 DNS 记录上启用它,并将其设置为“橙色云”。

1 个赞