适用于双网站设置的 App.yml 共享卷

我想修改我的 app.yml,以便在同一台机器上(运行在 nginx 后面)启动另一个 Discourse 实例(独立的容器、独立的数据库、所有可想象的部分都独立——以实现可移植性)。

因此,我的第一个设置如下(关键部分):

## site01 的 app.yml
volumes:
  - volume:
      host: /var/discourse_site01/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse_site02/shared/standalone/log/var-log
      guest: /var/log

.. 这样运行得很好——实例已上线,一切正常。现在,我想托管另一个 Discourse 实例,为此我在另一个 app.yml 中规划了共享卷,如下所示:

## site02 的 app.yml
volumes:
  - volume:
      host: /var/discourse_site02/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse_site02/shared/standalone/log/var-log
      guest: /var/log

在这个第二个设置中,是否有任何需要注意的问题?我是在生产机器上运行,所以我想再次确认这个 app.yml 是否正确。

我强烈建议先在克隆或测试副本上进行测试,切勿直接在实时服务器上操作。

能否详细说明一下 nginx 的使用情况?同一台机器上是否还有其他生产服务?

@Stephen:nginx 仅仅是一个指向第一个 Discourse 实例的反向代理。没什么复杂的。事实上,我完全按照 meta.discourse 上的指南来设置 nginx 作为前端服务器。

这台机器上没有运行其他任何服务。事实上,因为这是一台生产服务器,我将所有内容都设置在一个完全隔离的主机文件夹 discourse_site02 中。这样解释清楚吗?

你对我描述的 app.yml 有什么问题吗?或者你认为我的配置哪里出错了?

那么,有什么理由不采用 双容器多站点安装 吗?我认为这样并不会牺牲太多可移植性。在不同服务器之间迁移实例的最快方式是迁移备份。

如果您需要迁移某个实例,只需启动一台新服务器,将旧实例标记为只读,更新 DNS 指向,然后恢复备份即可。如果使用像 Cloudflare 这样低 TTL 的 DNS 服务,小型站点可以在几分钟内完成迁移。用户只会经历短暂的只读访问期,不会丢失任何内容。

以这种方式分配资源要高效得多,您无需在独立的容器中运行两个数据库服务器和两个 Web 服务器,同时也完全消除了对 nginx 反向代理的需求。

@Stephen:是的,我已经看到了您提供的链接,但为了简化设置(我们团队规模较小,经验有限),我希望按照我之前描述的方式进行,最终形成两个数据库和两个 Web 服务器等架构。事实上,这正是我偏好的设置。

除了您指出的效率问题外,还有其他需要注意的地方吗?

我展示的两个 app.yml 文件是否正确?

感谢您的时间,以及如此出色的软件 :smile:

此致

@Stephen:只是想问问,您觉得我的配置对于双容器设置来说看起来正确吗?

正如我所说,我并不打算节省资源或追求效率 :slight_smile: 只是想知道这样运行是否可行,假设以后不会出现什么意外问题。