Falco
(Falco)
2021 年12 月 7 日 14:02
1
由于 Discourse 现在支持在树莓派上运行 ,在您的家庭实验室中运行小型实例将成为常见的用例。但是,许多住宅 ISP 会阻止 Discourse 所需的 80/443 端口的入站流量。
对于我们在 https://discourse-on-a-pi.falco.dev/ 上的演示站点,我们使用了 Cloudflare Tunnel 来解决这个问题,您也可以这样做!
设置您的隧道
首先,请遵循以下指南:
https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide
您唯一需要更改的是将 URL 从 url: http://localhost:8000 更改为 url: http://localhost:80。让隧道在后台运行。
禁用 Rocket Loader
您必须禁用 Cloudflare Rocket Loader 才能使 Discourse 正常工作。
https://community.cloudflare.com/t/how-can-i-remove-the-rocket-loader-script-from-the-header-tag-on-my-website/4229/2
安装 Discourse
遵循 如何在生产环境中安装 Discourse ,但在创建 app.yml 文件后,在它给出 5 秒倒计时时按下 CTRL +C 。
现在编辑文件的前几行,使其看起来像这样:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/cloudflare.template.yml"
# - "templates/web.ratelimited.template.yml"
## 如果您想添加 Let's Encrypt (https),请取消注释这两行
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
并在 env: 部分下添加以下行:
DISCOURSE_FORCE_HTTPS: true
然后运行 ./launcher rebuild app。
在等待时,安装一个页面规则以始终重定向到 HTTPS,如下所示:
几分钟后,您新的 Discourse 实例将在您在隧道/Discourse 配置中使用的域上可用 。
38 个赞
我认为最好提及端口。如果用户决定使用 Argo Tunnel,那么他们需要将端口设置为与隧道设置相同。例如:
-80:80
#-443:443
然后他们需要让隧道监听
http://localhost:80
我使用的是 Unix 套接字来连接它们。
5 个赞
Stigin
(Stigin)
2021 年12 月 22 日 07:48
4
您好 Rafael,
感谢您的教程。
我已按照您上面指南中的所有步骤操作,一切运行正常,但是;
点击电子邮件中的链接激活我的帐户时,我会返回到正确的网页,其中有一个激活按钮,但此按钮不起作用。我在论坛上查找了相关指南,看起来像是域名到 IP 的问题?
我已确认 config 中的 force_https 设置为 true。
有什么想法/您是否遇到过此问题(附有截图)——这个按钮不起作用?
3 个赞
最后,在树莓派上安装了 Discourse。但我遇到了 Cloudflare Tunnels 的问题。
我无法通过域名访问 Discourse 网站,是不是 config.yml 配置有问题?
url: http://localhost:80
tunnel: 371dd57c-************
credentials-file: /home/pi/.cloudflared/371dd57c-*********.json
3 个赞
Falco
(Falco)
2022 年1 月 24 日 04:53
7
隧道命令的输出是什么?它应该明确说明你在配置中犯下的任何错误。
3 个赞
cloudflared tunnel 信息 输出:
cloudflared tunnel info ******
2022-01-24T04:55:47Z INF 无法确定默认源证书路径。在 [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath= 中没有文件 cert.pem
2022-01-24T04:55:47Z ERR 您需要使用 --origincert 选项指定源证书路径,或设置 TUNNEL_ORIGIN_CERT 环境变量。有关更多信息,请参阅 https://developers.cloudflare.com/argo-tunnel/reference/arguments/。originCertPath=
解析 tunnel ID 时出错:定位源证书时出错:从终端运行时,客户端未指定 origincert 路径
2 个赞
Falco
(Falco)
2022 年1 月 24 日 05:00
9
看起来您放错了证书文件?如果您以 root 用户身份运行,该文件应位于
/root/.cloudflared/
而不是您放置它的位置
2 个赞
Falco
(Falco)
2022 年1 月 24 日 05:33
11
您是尝试以 pi 用户还是 root 用户身份启动隧道?
3 个赞
我正在以 pi 用户身份使用此命令
cloudflared tunnel run <UUID 或 NAME>
2 个赞
Stigin
(Stigin)
2022 年1 月 24 日 10:40
13
您好 @bekircem ,
看起来您的 Cloudflared 已成功连接到 Cloudflare 的边缘。
您是否已在 Cloudflare 上通过 CNAME 记录到您的 Argo Tunnel ID 启用了路由?
此致,
Alex。
3 个赞
Stigin
(Stigin)
2022 年1 月 24 日 11:00
15
@bekircem ,这个很有意思——嗯!!
您在浏览您的网站地址时遇到的当前错误是什么?只是一个通用的 Cloudflare Argo Tunnel 错误页面吗?
请运行命令 docker ps 向我们展示您正在运行的容器,并运行 cloudflared tunnel list 向我们展示您当前正在运行的隧道 || 确保您模糊化您的 argo 路由/任何不相关的容器!
Alex。
3 个赞
浏览到您的网站地址时,您目前收到什么错误?是通用的 Cloudflare Argo Tunnel 错误页面吗?
没有 Cloudflare Argo Tunnel 错误页面。
ERR_NAME_NOT_RESOLVED
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1bde9b70f55 local_discourse/app “/sbin/boot” 11 hours ago Up 11 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp app
当以 root 用户身份使用此命令 cloudflared tunnel list
2022-01-24T15:55:03Z INF 无法确定默认源证书路径。在 [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared] originCertPath= 中没有文件 cert.pem
2022-01-24T15:55:03Z ERR 您需要使用 --origincert 选项指定源证书路径,或设置 TUNNEL_ORIGIN_CERT 环境变量。有关更多信息,请参阅 https://developers.cloudflare.com/argo-tunnel/reference/arguments/。originCertPath=
找不到源证书:客户端在从终端运行时未指定 origincert 路径
当以 pi 用户身份使用此命令 cloudflared tunnel list
您可以使用 `cloudflared tunnel info <name/uuid>` 获取每个 tunnel 的更详细信息
ID NAME CREATED CONNECTIONS
371dd57c-**************** ze****2022-01-24T03:35:19Z
这正常吗?
我们需要为 config.yml 文件中的 DISCOURSE_HOSTNAME 使用子域,对吗?
更新:我已卸载 Cloudflared 并以 root 用户重新安装,现在可以正常工作了。我仍然不明白我之前尝试中到底哪里出错了。
2 个赞
不知怎么的,我终于在 Raspberry 上运行了网站,并且它已上线。
我不太明白怎么做到的。我删除了 Cloudflared 并以 root 用户重新安装它。然后它就工作了……
我有两个问题:
1- 似乎我的 SSL 证书无法正常工作,因此我无法登录 Discourse 上的管理员帐户。(它似乎在隐身标签中运行。也许是关于缓存的问题。)您使用的是 full 还是 full(strict)?
2- 我对将 cloudflared 作为服务运行有疑问。https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel/run-as-service
我使用 cloudflared tunnel run <UUID or NAME> 命令运行了隧道。但是当我关闭 iterm 窗口时,它会停止工作吗?
如果您已经登录并且在 ~/.cloudflared/ 中有一个配置文件,这些文件将被复制到 /etc/cloudflared/。
如果您没有配置文件,则需要创建一个 config.yml 文件,其中包含上述字段。您可以通过运行 cloudflared --config CONFIG-FILE service install 来传递自定义文件。
我检查了,我在 /etc/cloudflared/ 中没有配置文件。在这种情况下,我应该怎么做才能自动运行此服务?
谢谢。
2 个赞
Falco
(Falco)
2022 年1 月 25 日 02:45
18
3 个赞
Stigin
(Stigin)
2022 年1 月 25 日 03:00
19
嘿 @bekircem ,
我认为重新安装它应该可以解决 cloudflared 找不到证书的问题……
关于将 Cloudflare 作为服务运行——您在手动运行服务时创建的配置文件需要移动到 /etc/cloudflared。
我不确定是否应该在此处链接个人网站,所以如果我需要删除它,请告诉我,但我已经在我的一个博客中涵盖了这一点,在名为:“将 Cloudflared 设置为服务并运行 ”的部分中。
让我们知道您的进展!
Alex。
4 个赞
感谢您的回复。
很棒的博文,谢谢分享。
将 Cloudflared 作为服务运行
sudo cloudflared service install
config.yml 文件已自动复制到 /etc/cloudflared/。
sudo systemctl start cloudflared
sudo systemctl enable cloudflared
运行得很棒。我还没试过重启,但希望它能正常工作。
4 个赞