从独立容器迁移到独立的 Web 和数据容器

I’m trying to implement the separate containers, but with a remote database. I’ve followed these instructions above and the howto for setting up a remote postgres DB. The setup works, but I’m wondering why there are two identical references (under web_only and data) to the same database. It makes me believe I’m doing something wrong and the web_only container is not even using the data container.

Am I doing this correctly?

Here is my setup.

Under the web_only.yml I added:

  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

under data.yml

I removed postgres.template.yml

templates:
#  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"

I also added the following:

env:
  # ensure locale exists in container, you may need to install it
  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

If you’re using a remote database, you don’t need to create the data container which has a database in it. Note that you need both postgres and redis (so you might need the data container for that).

1 个赞

但在这里,我只运行了 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 代码,我没发现任何明显可能导致其无法运行的问题。

你的服务器运行在什么操作系统上?

do server ubuntu
我已成功运行独立容器。
目前我正在尝试此方法:Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache

您是想实现多站点还是多容器?

正如我之前提到的基准测试,我曾独立运行过一个论坛一个月。当我想搭建一个新的论坛时,尝试了以下几种方法:

  1. 在同一台服务器上运行独立的容器,但未成功。
  2. 使用多站点 Docker 配置,为 Web 和数据库分别设置不同的容器,参考 https://meta.discourse.org/t/multisite-configuration-with-docker/14084,也未成功。
  3. 您提到的双容器方案,同样未成功。
  4. 正在尝试 Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache 中的方案,或许可以行得通。

如果您只想运行第二个独立容器,则需要修改 YAML 文件以使用不同的目录和端口。可能还需要禁用 Let’s Encrypt。

等所有这些修复完成后,我想为初学者写一些教程。

1 个赞

仅供参考,如果您想进行性能基准测试,不应在生产机器上进行。相反,请启动一个独立的 VPS 并用于基准测试。

尝试在同一台机器上运行两个独立的 Discourse 实例可能会导致安装严重损坏,这并不是理想的做法。

该命令仅在运行时不存在 app.yml 的情况下才会创建独立的数据容器和 Web 容器。它不会创建两个 Web 容器。

1 个赞

在我运行此命令之前,似乎已经存在 app.yml 了。

我认为这一点非常关键,是否应该添加到原帖中,并可能也发布到 GitHub 上?

我想我本不该将这一功能留作未文档化。而且,实际上,迁移到双容器配置并无帮助,因此它可能根本不该出现在这里。

1 个赞

或许可以设立一个专门的 howto 栏目?

不需要非常详细,但对于那些想要开始一些高级 Discourse 探索的用户来说,这会非常有用。

2 个赞

也许吧。它确实提供了很大帮助,而且和 discourse-setup 一样,它是为非常特定的用途设计的,即针对全新的标准安装。我的安装脚本已经使用它相当长一段时间了。如果你愿意对旧容器进行备份并在新容器上恢复,它可以成为切换到双容器架构的简便方式。

我一直担心的是,它的维护难度会很高,因为一些不理解它的用户可能会尝试使用它,随后却无法使用任何文档,因为“重建应用”(rebuild app)将不再适用。此外,判断何时需要重建数据库容器也很困难。最近我的一次重建就失败了,因为 Redis 版本是 3.0,而现在要求 4.0。同时,Postgres 也需要更新,这需要遵循一系列步骤,但你必须知道何时重建数据容器、何时重建 Web 容器,以及如何修改路径以偏离推荐配置。整个过程对我来说一切顺利,但要在论坛中向一个连 Bash 是什么都不知道的人解释这些,对所有人来说都会令人沮丧。

我认为,最好将创建非标准安装的门槛保持得较高,以避免人们因自身操作而陷入困境。

3 个赞