这是一个高级设置。除非您有经验的 Linux 服务器管理和 Docker 操作知识,否则请勿遵循此操作。
新站点的 2 容器设置
由 @pfaffman 于 2019-12-11 添加。
注意:如果要创建 2 容器站点,可以这样做:
./discourse-setup --two-container
它的工作方式与正常情况相同,只是它会创建单独的 data 和 web_only 容器,并为数据库生成一个随机密码。如果您已经有一个 app.yml,则需要重命名它,否则 discourse-setup 将只更新它。然后,您可以将备份复制到 /var/discourse/shared/web-only/backups/default 并进行恢复,这对于新手系统管理员来说比下面描述的方法要简单一些。
转换您当前的设置
我成功迁移到了两个容器。如果其他人需要说明,这是为我工作的步骤。
该过程包括备份、设置单独的 web 和数据容器以及恢复数据。
-
停止当前的独立容器
./launcher stop app -
将
samples/中的web_only.yml和data.yml复制到containers/并将它们重命名为您喜欢的任何名称,例如web_rocks.yml和data2.yml。 -
如果您重命名了它们,请注意
data.yml和web_only.yml中的volumes:条目
如果您将web_only.yml重命名为web_rocks.yml,则需要在Web_rocks.yml中进行如下修改:
volumes:
- volume:
host: /var/discourse/shared/web_rocks
guest: /shared
- volume:
host: /var/discourse/shared/web_rocks/log/var-log
guest: /var/log
相应地,对 data.yml 也进行类似的编辑。
设置数据容器
从 data.yml 开始,并为数据库设置一个密码。然后:
- 进入容器的根目录
/var/discourse - 运行
./launcher bootstrap data2(data2 或您给它的任何新名称) - 运行
./launcher start data2(再次使用新名称) - 如果一切顺利,您可以通过以下方式连接到容器:
./launcher enter data2(再次使用新名称) - 通过
exit退出容器。
设置 Web 容器
让我们修改 web_only.yml。
首先,更改模板并像您的 app.yml 那样暴露端口。
其次,确保您链接到正确的数据容器。如果您将 data.yml 重命名为 ‘something_else’,请将其放入 ‘name’ 中。
# 使用 'links' 键将容器链接在一起,即使用 Docker --link 标志。
links:
- link:
name: data
alias: data
虽然我们不再希望暴露 ssh 或任何其他端口,但为了 Web 访问,您仍然需要暴露 80 和 443 端口。这取决于您前面是否运行了 nginx 以及您如何将容器与其连接。
在某个地方,您会找到这个块:
DISCOURSE_DB_USERNAME: discourse
DISCOURSE_DB_PASSWORD: mypassword
DISCOURSE_DB_HOST: data
DISCOURSE_REDIS_HOST: data
- 输入您在数据容器中设置的密码。
- 输入您刚刚写下的数据容器的别名。对于
DB_HOST和REDIS_HOST。它必须与我们提到的 links 块匹配。 - 您可能没有更改
DB_USERNAME。
您会找到 DISCOURSE_DEVELOPER_EMAILS 和 DISCOURSE_HOSTNAME 等值的。您已经在 app.yml 中拥有这些值。从那里复制它们。
在 hooks 部分,请记住设置您已经在 app.yml 中使用的任何附加插件
现在您应该可以引导它了:
./launcher bootstrap web_only (再次使用您的新/自己的名称)
引导完成后,您可以启动 web_only (使用您的新名称):
./launcher start web_only
当 Discourse 准备就绪后,登录并恢复您的站点。
之后,对我来说一切又恢复正常了,我的 discourse 安装又可以运行了,但现在是在两个单独的容器中。
使用单独的 Web 和数据容器时如何更新
如果您不关心几分钟的停机时间——或者当数据需要升级时。Postgres 和 Redis 的更改不频繁,保持数据容器运行使得可以在旧的 web_only 容器运行时构建一个新的 web_only 容器。
./launcher stop web_only && ./launcher rebuild data && ./launcher rebuild web_only
这适用于 Postgres 和/或 Redis 的次要升级。
如果您关心每一分钟的停机时间 并且 数据不需要升级(大多数情况下都是如此):
仅升级 web_only:
./launcher bootstrap web_only && ./launcher destroy web_only && ./launcher start web_only
只需重建 web_only 并跳过 data 就足够了,除非 Postgres 或 Redis 有升级。这些升级大约每年发生一次,您会看到像 PostgreSQL 15 update 这样的公告,尽管 Redis 升级和 Postgres 的次要更新不会有如此明显的公告。
重建数据需要停机(与单容器版本的原因相同——您不能在另一个进程访问相同数据库文件时升级 postgres。此外,当您构建一个新的数据容器时,必须销毁并启动 web_only 容器,因为它将尝试连接到旧的容器。
您通常不需要重建数据容器(这就是这种方法节省停机时间的原因)。您需要注意 Postgres 或 Redis 何时有升级;前端不会知道;这是一个高级设置,比单容器需要更多的关注。
管理双容器安装
@pfaffman 某天会创建一个关于此的主题,但在那之前,这里有一个:Managing a Two-Container Installation - Documentation - Literate Computing Support

