我尝试实现分离容器,但使用的是远程数据库。我遵循了上述说明以及如何指南来设置远程 PostgreSQL 数据库。设置可以正常工作,但我想知道为什么在 web_only 和 data 下会有两个指向同一数据库的相同引用。这让我觉得我可能做错了什么,并且 web_only 容器根本没有使用 data 容器。
我这样做对吗?
以下是我的设置。
在 web_only.yml 中,我添加了:
DISCOURSE_DB_SOCKET: ''
DISCOURSE_DB_USERNAME: REMOVE
DISCOURSE_DB_PASSWORD: REMOVE
DISCOURSE_DB_HOST: xxx.ondigitalocean.com
DISCOURSE_DB_NAME: REMOVE
DISCOURSE_DB_PORT: 25060
DISCOURSE_DB_BACKUP_PORT: 25060
DISCOURSE_REDIS_HOST: data
在 data.yml 中,
我删除了 postgres.template.yml
templates:
# - "templates/postgres.template.yml"
- "templates/redis.template.yml"
我还添加了以下内容:
env:
# 确保容器中已存在 locale,您可能需要安装它
LANG: en_US.UTF-8
DISCOURSE_DB_USERNAME: REMOVE
DISCOURSE_DB_PASSWORD: REMOVE
DISCOURSE_DB_HOST: REMOVE.ondigitalocean.com
DISCOURSE_DB_NAME: REMOVE
DISCOURSE_DB_PORT: 25060
DISCOURSE_DB_BACKUP_PORT: 25060
pfaffman
(Jay Pfaffman)
28
如果您使用的是远程数据库,则无需创建包含数据库的数据容器。请注意,您需要同时使用 PostgreSQL 和 Redis(因此您可能仍需要数据容器来支持这两者)。
1 个赞
我不太清楚您所说的“两个容器”具体指什么,但如果您认为两个容器意味着两个独立的 Discourse 实例,那么您的方向可能错了。
这篇文章可以帮助您设置独立的应用程序和数据库容器,适合需要一定灵活性的高级用户。
如果您想在同一台机器上安装或托管两个 Discourse 站点,可以查看 Discourse 多站点配置:
Multisite configuration with Docker
1 个赞
我所说的容器是指,当你在宿主机上输入
docker ps
时,可以看到两个正在运行的容器。
其次,关于这两个容器的命令,我找不到在哪里设置域名。
那么是哪个容器在运行?如果假设是 app 容器,那么答案是否定的,你正在运行旧版本的 discourse-setup。
在继续之前,请先执行 git pull,以确保你使用的是最新版本的 discourse-setup。
如果你发现 data 或 web-only 容器正在运行,那么你应该检查是什么导致另一个容器无法启动。通常,web-only 容器无法启动是因为端口 80/443 上已有其他进程(Web 服务器)在运行。
是的,应用
哦不,我今天从 GitHub 克隆了源代码。
我本人还没试过,但既然 @pfaffman 是开发这个功能的天才,也许他能帮忙解决。
查看 GitHub 上的 discourse-setup 代码,我没发现任何明显可能导致其无法运行的问题。
你的服务器运行在什么操作系统上?
如果您只想运行第二个独立容器,则需要修改 YAML 文件以使用不同的目录和端口。可能还需要禁用 Let’s Encrypt。
仅供参考,如果您想进行性能基准测试,不应在生产机器上进行。相反,请启动一个独立的 VPS 并用于基准测试。
尝试在同一台机器上运行两个独立的 Discourse 实例可能会导致安装严重损坏,这并不是理想的做法。
pfaffman
(Jay Pfaffman)
42
该命令仅在运行时不存在 app.yml 的情况下才会创建独立的数据容器和 Web 容器。它不会创建两个 Web 容器。
1 个赞
在我运行此命令之前,似乎已经存在 app.yml 了。
我认为这一点非常关键,是否应该添加到原帖中,并可能也发布到 GitHub 上?
pfaffman
(Jay Pfaffman)
45
我想我本不该将这一功能留作未文档化。而且,实际上,迁移到双容器配置并无帮助,因此它可能根本不该出现在这里。
1 个赞
或许可以设立一个专门的 howto 栏目?
不需要非常详细,但对于那些想要开始一些高级 Discourse 探索的用户来说,这会非常有用。
2 个赞
pfaffman
(Jay Pfaffman)
47
也许吧。它确实提供了很大帮助,而且和 discourse-setup 一样,它是为非常特定的用途设计的,即针对全新的标准安装。我的安装脚本已经使用它相当长一段时间了。如果你愿意对旧容器进行备份并在新容器上恢复,它可以成为切换到双容器架构的简便方式。
我一直担心的是,它的维护难度会很高,因为一些不理解它的用户可能会尝试使用它,随后却无法使用任何文档,因为“重建应用”(rebuild app)将不再适用。此外,判断何时需要重建数据库容器也很困难。最近我的一次重建就失败了,因为 Redis 版本是 3.0,而现在要求 4.0。同时,Postgres 也需要更新,这需要遵循一系列步骤,但你必须知道何时重建数据容器、何时重建 Web 容器,以及如何修改路径以偏离推荐配置。整个过程对我来说一切顺利,但要在论坛中向一个连 Bash 是什么都不知道的人解释这些,对所有人来说都会令人沮丧。
我认为,最好将创建非标准安装的门槛保持得较高,以避免人们因自身操作而陷入困境。
3 个赞