Ubuntu 20.04.3 LTS 新安装失败

在新 EC2 实例上采用标准配置进行全新安装失败。我在 AWS 上启动了一台运行 Ubuntu 20.04.3 的 EC2 实例,并执行了所有最新的 Ubuntu 更新。随后运行了位于 此处 的简单标准安装脚本:

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse

./discourse-setup

唯一的小插曲是,在运行 setup 时,由于我忘记在 AWS 上开放两个入站端口,导致无法通过 HTTP(S) 连接到服务器。因此,我在 AWS 安全组中开放了端口后,手动配置了 app.yml 文件,并运行了 ./launcher rebuild app

现在浏览器无法连接,生产日志显示如下错误:

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'

我之所以启动新的 EC2 实例,是因为之前使用的一台重新配置的服务器(同样运行 Ubuntu 20.04.3)在安装 Discourse 时遇到了完全相同的问题,生产日志中也出现了相同的错误。因此,我想从头开始,确保过程简单顺利。

您尝试过重启吗?

是的,我已启动并停止了实例,并在命令行上重启,但无济于事。

好的,我现在非常确定在使用 Ubuntu 20.04.3 及最新更新时,Discourse 安装程序存在问题。我刚刚又运行了一次安装程序,这次我确保端口已打开,因此无需手动配置 app.yml 文件(消除了人为错误)。一切似乎都很顺利,安装程序找到了域名等。然而……网站无法访问。生产日志显示:

/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/message_bus-3.3.6/lib/message_bus.rb:729:in `block in new_subscriber_thread'
Job exception: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:384:in `rescue in establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:365:in `establish_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/redis-4.4.0/lib/redis/client.rb:117:in `block in connect'

这次情况太简单了,我不可能出错,我只运行了脚本。

您是否安装了另一个 Redis?

您有多少内存?是否创建了交换空间?

我还没有安装任何东西。这是一个新的 t2.small EC2 实例,拥有 2GB 内存。我需要查看系统自动创建的标准交换分区。

以下是 RAM 和交换空间的信息。这是一台全新启动的 AWS 实例,已应用所有标准的 Ubuntu 更新,实例类型为 EC2 - t2.small。未进行任何更改、添加、配置或修改。在安装前使用的命令仅为基本的 sudo apt updatesudo apt upgrade。第三次尝试在两个相同操作系统(Ubuntu 20.04.3)的独立实例上安装原生版 Discourse。因此,我认为安装程序与最新版本之间可能存在某些问题。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          1.9Gi       973Mi       131Mi        36Mi       875Mi       855Mi
Swap:         2.0Gi       0.0Ki       2.0Gi

如果磁盘空间也值得关注:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        39G  7.8G   31G  20% /

我刚刚在一台新的 DigitalOcean Droplet 上运行了安装程序,一切正常。问题不在安装程序本身。

我的最佳猜测是,虽然这听起来不太合理,但你多次运行安装程序导致触发了 Let’s Encrypt 的频率限制,这才是真正的问题所在。

请尝试使用不同的域名(例如 forum2.example.com)再次运行。

太棒了!你又答对了,它确实起作用了。

好的,所以我一直在进行大量重建,因为我一直在测试从一个旧服务器迁移论坛。

我到底该如何解决这个难题?我甚至没有使用 Let’s Encrypt。在安装成功后,我更新了 app.yml 文件以更改域名,并确保 app.yml 中的 Let’s Encrypt 模板已被注释掉,然后重新构建,但这并没有解决问题,我仍然遇到同样的 Redis 故障。我是否因为调用 Let’s Encrypt 被硬编码在安装程序中而陷入困境?

除非您使用反向代理来提供 HTTPS,否则无法这样做。您必须启用 HTTPS。如果您移除了 Lets Encrypt,也必须移除 HTTPS 模板(无论它叫什么名字)。

我不太明白您为什么会遇到 Redis 错误;也许您在注释掉 Lets Encrypt 时也注释掉了 Redis?这是我最好的猜测。

您可以尝试按照 Set up Let’s Encrypt with multiple domains / redirects 的指南添加第二个域名,或者等待一周。

好吧,如果你通读整个帖子,会发现这是在全新的实例上进行的简单安装,因此作为安装程序,我无法注释掉任何内容,因为安装程序会根据问题生成 app.yml。因此,Redis 故障直接与 Let’s Encrypt 的速率限制有关。如果这能为开发团队提供任何帮助的话。

我正在使用代理,或者更准确地说,使用 Cloudflare 来提供 SSL 证书,并仅连接/传输 HTTPS 流量。

我测试了注释掉 https 模板——“templates/web.ssl.template.yml”,并在注释掉 Let’s Encrypt 模板的同时执行了 launcher rebuild app,结果仍然相同:Redis 错误。所以我想我卡住了,对吧?多么糟糕的安装程序决定,竟然没有提供绕过 Let’s Encrypt 调用的方法。除非你能提供其他尝试方案,否则我只能耐心对待了。我非常感谢你的所有帮助。我怀着谦卑的挫败感等待。

这使得事情变得复杂得多,除非你仔细研究如何在不破坏 Discourse 的情况下使用 Cloudflare,否则你将来还会遇到其他麻烦。