# Discourse 测试和生产实例的最佳方案

**URL:** <https://meta.discourse.org/t/best-approach-for-test-and-production-instance-of-discourse/125235>\
**Category:** Self-hosting\
**Created:** [2019年八月8日 14:38 UTC](https://meta.discourse.org/t/best-approach-for-test-and-production-instance-of-discourse/125235 "2019-08-08T14:38:36Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![PackElend](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/packelend/32/95294_2.png) [@PackElend](https://meta.discourse.org/u/PackElend)\
**Post date:** [2019年八月8日 14:38 UTC](https://meta.discourse.org/t/best-approach-for-test-and-production-instance-of-discourse/125235/1 "2019-08-08T14:38:36Z")

</div>

你好，  
我正准备按照 [指南](https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md) 在 Digital Ocean 云服务器上创建一个 Discourse 实例。

起初，我们将使用 Discourse 的精简/默认配置，并逐步扩展。为了熟悉系统，我们希望偶尔使用测试实例。  
以下哪种方法更明智：

1. [在同一服务器上通过反向代理运行](https://meta.discourse.org/t/running-other-websites-on-the-same-machine-as-discourse/17247)
2. [多站点配置](https://meta.discourse.org/t/multisite-configuration-with-docker/14084)

正如 [在主机上设置沙盒和测试 Discourse？](https://meta.discourse.org/t/sandbox-and-test-discourse-on-host/53625) 中所总结的那样。

我知道第一种方法需要更多内存，正如 [Two standalone instances on one server? - #26 by schleifer](https://meta.discourse.org/t/two-standalone-instances-on-one-server/60551/26) 中所述，但它仅偶尔运行。  
围绕这个问题还有其他相关主题：

1. [单台服务器上运行多个 Discourse 实例](https://meta.discourse.org/t/multiple-discourse-instances-in-a-single-server/88723)
2. [在同一台机器上运行 Discourse 和其他网站](https://meta.discourse.org/t/running-other-websites-on-the-same-machine-as-discourse/17247)  
但其中缺乏优缺点对比。

本次练习的另一个目标是熟悉以下内容：

1. 备份
2. 迁移位置
3. 迁移内容
4. 迁移设置
5. 迁移单个讨论

一个使用场景是：我们在生产实例中讨论某些内容，将整个数据库（论坛内容）迁移到测试实例进行测试，然后通过单个讨论的导出/导入将讨论移回生产实例，同时复制已更改的设置，以便我们可以测试并批准某个插件。

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2019年八月8日 16:03 UTC](https://meta.discourse.org/t/best-approach-for-test-and-production-instance-of-discourse/125235/2 "2019-08-08T16:03:52Z")

</div>

多站点部署对测试服务器毫无益处。如果升级以测试插件是否损坏，两个站点都会受影响。

同一台服务器通过反向代理运行是可以的，但会带来很多麻烦；如果这对你来说不难，那么“多个 Discourse 实例”的解决方案可能适合你。最简单的方案是搭建独立的服务器，并让它们共享同一个 S3 备份桶，这样就能轻松将生产站点的数据恢复到开发站点，以查看效果。这也能让你确信，你可以利用最新的备份快速启动新服务器。

---

<div class="post-metadata">

**Author:** ![PackElend](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/packelend/32/95294_2.png) [@PackElend](https://meta.discourse.org/u/PackElend)\
**Post date:** [2019年八月8日 16:24 UTC](https://meta.discourse.org/t/best-approach-for-test-and-production-instance-of-discourse/125235/3 "2019-08-08T16:24:51Z")

</div>

> [@pfaffman](#):
>
> S3 备份

这真的很便宜 🙂 比 OD 方案更好，如何自动将备份从 DO 推送到 S3？

> [@pfaffman](#):
>
> 但麻烦很多；

你能说说具体有哪些麻烦吗：upside\_down\_face:  
因为我们目前采取的是低成本方案（至少在初期）。所以

> [@pfaffman](#):
>
> 最简单的方法是单独使用一台服务器

我们更希望避免这种做法。

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2019年八月8日 16:27 UTC](https://meta.discourse.org/t/best-approach-for-test-and-production-instance-of-discourse/125235/4 "2019-08-08T16:27:55Z")

</div>

> [@pfaffman](#):
>
> 如果这对您来说不难，那么其中一个“多个 Discourse 实例”的解决方案可能适合您。

这样您就可以让两个容器共享同一个备份卷，而无需费力配置 S3 备份。

---

<div class="post-metadata">

**Author:** ![PackElend](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/packelend/32/95294_2.png) [@PackElend](https://meta.discourse.org/u/PackElend)\
**Post date:** [2019年八月8日 16:31 UTC](https://meta.discourse.org/t/best-approach-for-test-and-production-instance-of-discourse/125235/5 "2019-08-08T16:31:33Z")

</div>

> [@pfaffman](#):
>
> 如果对你来说不难的话，

nginx 代理让我想起了什么，看看我能不能搞定它：yum:}

---

<div class="post-metadata">

**Author:** ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)\
**Post date:** [2019年八月9日 03:53 UTC](https://meta.discourse.org/t/best-approach-for-test-and-production-instance-of-discourse/125235/6 "2019-08-09T03:53:42Z")

</div>

在我看来，最好的方法是尽量减少折腾和复杂化。直接创建两个 Droplet，然后搞定。

---

<div class="post-metadata">

**Author:** ![PackElend](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/packelend/32/95294_2.png) [@PackElend](https://meta.discourse.org/u/PackElend)\
**Post date:** [2019年八月9日 07:55 UTC](https://meta.discourse.org/t/best-approach-for-test-and-production-instance-of-discourse/125235/7 "2019-08-09T07:55:34Z")

</div>

> [@sam](#):
>
> 直接创建两个 Droplet 就搞定吧。

我用一个 Droplet 尝试过，但最后无法发送验证邮件，[DigitalOcean + Siteground 通过 465 端口发送邮件无法使用（2525 端口可以）](https://meta.discourse.org/t/digitalocean-siteground-email-via-port-465-won-t-work-2525-will-work/125067) 🤬。  
现在我决定从头开始，按照[安装指南](https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md)操作，包括注册一个 Mailgun 账户 🤮。
