jlgarnier
(Jean-Luc GARNIER)
1
尊敬的社区成员:
我尝试按照 discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub 上的官方说明安装 Discourse 的私有实例。尽管脚本看起来非常复杂,但我不得不手动修改 container.yml 和 discourse-setup 文件来设置我自己的配置……
第一个问题:尽管安装脚本很复杂,但它不允许修改暴露的端口!端口 80/443 在我的服务器上无法使用,因为它们已被 nginx 使用。因此,我不得不再次调整设置脚本,将端口 3080/3443 设置为访问 Discourse 所需的端口。
然后,我设法让所有容器都正常运行。通过 Portainer 查看堆栈时,我发现应用程序启动后会悄无声息地停止,并且日志没有提供太多关于原因的信息。由于 redis 和 postgres 没有发布任何端口,Discourse 应用程序是否会因为无法连接到这些组件而失败?我错过了什么或者做错了什么?
_discourse-app_logs.txt (10.4 KB)
提前感谢您的任何帮助!
RGJ
(Richard - Communiteq)
2
Caused by:
Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for [::1]:6379
所以它无法连接到 IPv6 回环地址上的 Redis。
jlgarnier
(Jean-Luc GARNIER)
3
理查德您好,感谢您的快速回复!我不是 IT 专业人士,只是喜欢摆弄工具:这个问题该如何解决?
先谢谢您的建议!
RGJ
(Richard - Communiteq)
4
您似乎通过为 Redis 和 Postgres 设置单独的容器偏离了标准安装,因此恐怕我无法立即为您提供答案。您是如何在 Discourse 中配置 Redis 设置的?
另外,我确实看到了 redis:4-alpine。恐怕您需要迁移到新版本的 Redis,因为 Discourse 要求版本 6.20 或更高版本。不过,我认为这并不是您问题的根源。
2 个赞
pfaffman
(Jay Pfaffman)
5
安装脚本仅适用于标准安装。如果您要进行更复杂的设置,则必须手动编辑 yml 文件。这比修改脚本要简单得多。
Discourse 不能在非标准端口上运行。您需要在前面设置一个反向代理。请参阅诸如在运行 Discourse 的同一台机器上运行其他网站之类的帖子。
如果您不打算使用提供的 postgres 和 redis,那么您需要自己找出原因。可能的原因太多,我们无法猜测或推断。我建议在单独的虚拟机上进行标准安装,以了解其工作原理,然后再尝试非常复杂的设置。
3 个赞
jlgarnier
(Jean-Luc GARNIER)
6
我没有执行任何“非标准”安装!我已按照文档中的说明,从 Github 下载了所有内容,仅更改了暴露的端口并运行了脚本:
- 我没有更改 redis 配置,也没有更改 postgres。
- 我没有更改 redis 版本。
这些软件已由正版的 discourse-setup 脚本安装。
@pfaffman 你的意思是“手动编辑 yml”?你说的是哪个 yml?“containers”目录里有很多 .yml 文件……
顺便说一句,我确实有一个反向代理在服务器上,它似乎有一个简单的配置:多个 subdomain.conf 文件定义了重定向 subdomain:80 → 端口 XXX。这是必需的吗?
我建议在单独的虚拟机上进行标准安装,看看它是如何工作的,然后再尝试非常复杂的设置。
我不想进行复杂的设置😊,我只需要让 Discourse 与其他容器一起运行,而这正是 Docker 的设计用途……
再次感谢你的帮助!
RGJ
(Richard - Communiteq)
7
通常 discourse-setup 不会安装单独的 postgres 和 redis 实例,当然也不会安装 12 和 4 版本。
您能否发布您的配置以及您对 container.yml 和脚本所做的更改?请确保删除任何机密设置。
另外,请告知您使用的 discourse_docker 存储库的提交版本。
3 个赞
pfaffman
(Jay Pfaffman)
8
您修改了 discourse-setup 和一个将在您更新 discourse-docker 时被覆盖的文件。更改 app.yml 以外的任何内容都绝对是非标准的。
为什么?无论您需要更改什么,都不是这样做的。您需要将这些更改放入您的 app.yml。
Discourse 在非标准端口上无法工作,因此这不是标准安装。
标准安装包括单个容器中的 postgres 和 redis。如前所述,您使用的是不受支持的 redis 和 postgres 版本。您也可以按照此处所述进行双容器安装 从独立容器迁移到单独的 Web 和数据容器(您可以使用 ./discourse-setup --two-container 让 discourse-setup 创建单独的数据和 Web 容器,尽管维护起来有点复杂(您必须知道何时更新数据容器)。
1 个赞
RGJ
(Richard - Communiteq)
10
2 个赞
pfaffman
(Jay Pfaffman)
11
它只会安装 docker。
看起来不错。
app.yml 是由 discourse-setup 创建的。如果它无法访问端口,您将无法运行 discourse-setup,但如果您阅读了源代码,您会发现您可以运行 ./discourse-setup --skip-connection-test 并继续运行。
您的 nginx 将负责 let’s encrypt,因此您需要注释掉 let’s encrypt 模板。我怀疑这在上面和下面的反向代理主题中已经描述过了。
请参阅 使用 Nginx Proxy Manager 管理 Discourse 的多个站点 或 在与 Discourse 相同的机器上运行其他网站(已链接)。
1 个赞
jlgarnier
(Jean-Luc GARNIER)
12
您好 @pfaffman,
阅读有关在同一台机器上运行其他网站与 Discourse 的文档,我需要一些确认:
如果另一台服务器正在使用端口 80 或 443,则无法使用 ./discourse-setup 来设置 Discourse。您需要使用您喜欢的文本编辑器复制并编辑 samples/standalone.yml。
我理解我需要在运行 discourse-setup 之前修改 app.yml,正如序言中所述:
如果另一台服务器正在使用端口 80 或 443,则无法使用 ./discourse-setup 来设置 Discourse。您需要使用您喜欢的文本编辑器复制并编辑 samples/standalone.yml。
您能否确认以下流程:
- 从 Github 下载所有内容
- 使用选项
--skip-connection-test 运行 discourse-setup 一次 → 这将创建 containers/app.yml
- 按照上面文档中的描述修改 app.yml
- 使用
/var/discourse/launcher rebuild app 更新软件
- 创建指向 Discourse 套接字的 nginx 站点并重启 nginx
- 最后,在浏览器中访问 https://discourse.mydomain.com 来访问 Discourse,该地址仅指向服务器 IP。
提前感谢您的建议!
jlgarnier
(Jean-Luc GARNIER)
13
更新:
- 从 Github 下载所有内容:完成
- 使用
--skip-connection-test 选项运行 discourse-setup 一次:一切顺利,直到脚本返回
docker: Error response from daemon: driver failed programming external connectivity on endpoint app (784361985c928eb26b149d829f37882056562d9b1e77ef4ce71fbfe30c5d80b1): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use.
在我看来,这很正常,因为容器试图访问与现有网络服务器相同的端口。但是,由于没有创建 discourse 容器(如 docker container ls 返回的那样),我想在你继续进行 nginw 配置之前确认这一点……
提前感谢你的帮助!
jlgarnier
(Jean-Luc GARNIER)
15
您是指“在运行 discourse-setup 之前”吗?如果是这样,我应该修改哪个文件,因为在运行脚本之前 app.yml 不存在?我想安装一个单容器应用程序:我应该再次运行相同的 discourse-setup 脚本还是 /var/discourse/launcher rebuild app 命令?
顺便问一下,我上面的过程是否正确?
pfaffman
(Jay Pfaffman)
16
使用 nano 或类似工具编辑现有文件并注释掉端口。./launcher rebuild app。
在您的情况下,可能还可以使用 --skip-rebuild,因此您将运行:
./discourse-setup --skip-connection-test --skeip-rebuild
nano containers/app.yml
./launcher rebuild app
jlgarnier
(Jean-Luc GARNIER)
17
抱歉打扰您,我需要百分之百确定,因为我绝对不是专家
:
- 我再次运行
./discourse-setup --skip-connection-test --skip-rebuild(上次运行没有使用 --skip-rebuild 选项)。我不需要删除上次运行已安装的内容。
- 然后我编辑现有的 app.yml 文件并注释掉端口(它们已经被注释掉了)
- 然后我运行
./launcher rebuild app
再次感谢您的时间!
pfaffman
(Jay Pfaffman)
18
您再也不需要运行 discourse-setup 了(除非您更改了内存量,并希望它将内存设置更新为默认推荐设置)。
只需编辑端口并重新构建。
jlgarnier
(Jean-Luc GARNIER)
19
你好 Jay,
这是今天早上重建的结果:
我不想安装 NPM,因为我读到它不是一个健壮的工具,而且 Discourse 的配置涉及硬编码 IP:我应该安装吗?
提前感谢您的建议!
RGJ
(Richard - Communiteq)
20
所以这听起来像是你 Discourse 安装前面的反向代理 nginx 的问题。
等等……什么?为什么你需要在容器外安装 NPM?
2 个赞