在自托管 VPS 上安装 Discourse:附常见问题解答

新手安装 Discourse 的分步详细流程。从选择合适的服务器到配置它,再到 SMTP、DNS 以及按正确顺序完成所有步骤。由于这种手动流程分支众多、选项繁多,我有很多不确定之处,也听说许多设置因操作不当而出错。我想确保一切正确,如果有人能纠正我,我将不胜感激。我会尽可能多地列出步骤,并在遇到卡壳时暂停。这可以成为一个有用的页面,将主要疑问全面汇总在一处

目标:在自托管 VPS 上安装 Discourse,用于一个起步阶段拥有 100 名月活用户的论坛

1) 在 2 个官方指南中,我选择了简单的那个。我可能会遇到哪些问题?这是否不利于未来的灵活性/扩展性?
简单 10 分钟基础安装:初学者 Docker 安装指南
功能强大、灵活、大型/多服务器安装:高级 Docker 安装指南

2) 这是一个好的设置顺序吗?i) 配置并租用 VPS > ii) SMTP > iii) 域名和 DNS > iv) 安装 Discourse

3.1) 关于域名和 DNS,我已经有一个使用自定义域名的网站。不确定我应该怎么做;子域名还是子域名服务器?查过但不懂

3.2) 虽然现在不需要,但如果需要,Discourse 论坛可以连接到像 example.com 这样的纯域名对吧(当然前提是未使用)?它不必是像 forum.example.com 这样的子域名对吧?为什么 Discourse 的指南只说“创建一个 DNS A 记录,将你的子域名(例如 forum.example.com)指向你的服务器 IP 地址”

4.1) 关于 SMTP:完全搞糊涂了。关于用户登录,这是我的目标 Connect User logins from my Wix site for my Discourse forum 为了确保这一点,我该怎么做?
4.2) 我还没有设置商务邮箱,现在可以从 Hostinger 设置。这与 SMTP 有很大关系吗?关于 SMTP,我在这个论坛上听说过 MailGun、MailJet 和 Brevo。WDID(这是什么意思)?

5) 选择和配置 VPS:Contabo 和 Hetzner 最便宜,看起来也很靠谱。如果我选择更便宜的 Contabo,我会错过什么有用的东西吗?它们是安全的对吧?(我想比较整个配置与 Hetzner 的,但它甚至似乎不让你在不提供数据、借记卡并审核你的账户的情况下查看配置选项?我拥有的最多的是 @Lilly 的截图)
5.1) 面板:Contabo 显示包含 Webmin 和 Webmin + LAMP。cPanel 显示为昂贵的附加组件。我听说过 cPanel,我不需要这个对吧?
5.2) 操作系统:Contabo 显示包含 Ubuntu,没有关于它的任何信息,这足够吗?(Digital Ocean 的配置显示 Ubuntu 旁边的选项,例如 24.04 (LTS) x64

5.3) 显示包含一堆应用程序。如果你发现任何问题,请告诉我

5.4) 以下默认选择可以吗?我可以不用附加组件对吧?

5.5) 配置中未显示 IPv6,尽管在他们的 VPS 计划页面下宣传“每个计划都包含专用的 IPv4 和 IPv6 地址”。我想知道它是否有
5.6) 听到一些关于 Contabo 的负面评价,这里有过 Contabo 经验的人怎么看?

5.7) 以下良好规格是可用的最低配置,价格也很实惠!只是为了了解,(以防更换 VPS)由于 Discourse 推荐 2GB,4GB 是否不必要?快照是什么?

Screenshot 2026-07-18 004447

如果你是新手,请遵循新手安装指南。不要好高骛远。

就我个人而言,我会先确保 SMTP 工作正常(我有 API 密钥等),并且 DNS 指向我的 IP,然后再去完成 Discourse 的设置,因为如果 DNS 不是 100% 正确,设置向导会报错,你就麻烦了。

我不确定你的服务商在这里指的是什么。也许他们指的是“子域名”?如果是这样,将你的 VPS 的 IPv4 地址添加进去即可。

是的,地址就是地址。它可以是 x.example.comexample.comx.y.example.com,甚至是 example.com/x/(需要一些高级设置)。

无论是否使用 DiscourseConnect,你都需要 SMTP 来处理摘要、管理员通知等。

看起来没问题

如果你使用 Cloudflare,IPv6 可能并不重要。如果你不使用任何形式的代理,那么只有 IPv6 网络的用户将无法访问你的网站,但这种情况现在相对少见(许多 ISP 提供“专用”的 IPv6 和共享的 IPv4,他们仍然可以路由流量)

200Mbps 速度不算很快,但其余配置非常适合中小型论坛。2GB 的推荐配置不知为何显得有点低,所以 8GB 会为你提供更好的服务。我运行我的小站点使用的是 LXC(开销更低),配置为 8GB/6vCPUs,资源使用率很低,重建时 CPU 峰值约为 50-60%。

快照基本上只是你虚拟机的还原点,所以如果出了任何问题,你可以回滚。当你有频繁的异地 Discourse 备份(通过 R2 或其他方式)时,这不太有用,但它仍然是一个“锦上添花”的功能,以防万一。

请不要 @ 提及他人。我真的不需要通知里多出这些噪音,而且这通常也不符合论坛礼仪。如果你想提及用户名但不想主动通知他们,请用反引号将用户名括起来,这样就不会发送通知给他们了。让人们在阅读了你的帖子后自行决定是否回复。谢谢。

祝你的新事业顺利。

目前请完全不要碰这个。先从基础开始。

  1. 使用 Namecheap 等域名注册商购买一个带有名称服务器的域名。或者既然你已经有一个想用的域名:

使用子域名——这是安装 Discourse 的标准方式,这样你的地址就会类似 forum.yoursite.com

  1. 如果你不想使用 DiscourseID,那就找一个支持 SMTP 的事务性邮件服务(如 Mailgun 或 Resend)。Resend 是免费的,我本人也在用。

  1. 在你选择的 VPS 供应商处设置一个带有 SSH 访问权限的 VPS 服务器实例(droplet)。
  2. 按照指南中的脚本安装 Discourse。

正如其他地方已经提到的,你很可能无法实现这一点,因为你没有企业版 Wix 账户。请先做好调研并了解相关信息。阅读是成为一名优秀 Discourse 管理员的基本要求。

单点登录(SSO)是你目前根本不应该考虑的事情,因为你还在努力学习如何设置最基本的自托管安装。

要在初始设置运行后编辑 app.yml 文件,在 SSH 进入服务器后的提示符下执行:

cd /var/discourse
nano containers/app.yml

这里有一个 app.yml 示例文件:

我会说不要直接降到2GB的下限,除非你运行的是一个用户不多的小型论坛。

不,不需要cPanel。

商务邮箱是否提供事务性邮件服务?我知道有些不提供。使用Mailgun、Brevo、Amazon SES等工具会更安全。

其他人已经详细阐述过这一点,但我在此链接相关文档:Configure your hosted Discourse site to run at the root or apex domain (e.g. example.com)

话虽如此,我建议你直接使用常规的默认选项,即使用子域名。此外,如果你已经将主站放在根域名下,这样可以清楚地表明该论坛属于该组织,而不是网络上的随机论坛。

快照本质上是对整个VPS的完整备份。如果VPS上只托管Discourse,你仍然可以定期备份Discourse,以防出现问题。

哦……这对我来说非常重要,也是我选择自托管的原因之一。如果以后能轻松解决这个问题那就好,但我想知道这种常规设置以后会不会成为障碍?我现在是否应该做点什么不同的事情,以便为将来实现该功能留出余地,即使我现在不实施?
论坛只是我主站的延伸,两者需要统一。如果它们是隔离的,在我的情况下会造成很多问题。
我不确定 SSO 是否是唯一的解决方案,但我希望我的 Wix 网站和 Discourse 论坛之间的分离越少越好。

正如我上面所说:

而在这里你发布了:

你对 MiniOrange 了解多少?免费计划似乎仅限少数用户使用,因此如果你使用每月 49 美元的基础计划,费用可能会变得很高:

在规划想要实现的目标时,研究和仔细阅读至关重要。

你会编写 Wix 的 Velo 脚本吗?

也许是一个 JavaScript 解决方案

我认为你需要直接在 Wix 网站上设置一个自定义 API 端点,以接收来自 Discourse 的登录请求。看起来这需要在名为 http-functions.js 的文件中编写 Velo 模块的 JavaScript 代码。

这将拦截来自 Discourse 的用户,重定向并验证其已登录的 Wix 会话,生成一个签名的有效负载,然后希望将他们安全地传回论坛。

也许类似于这样:

import { ok, redirect, badRequest } from 'wix-http-functions';
import { currentMember } from 'wix-members-backend';
import crypto from 'crypto';

// 选择一个安全的随机字符串作为密钥 

const DISCOURSE_SECRET = "YOUR_SUPER_SECRET_STRING_HERE"; 

export async function get_discourseSso(request) {
    const query = request.query;
    const payload = query.sso;
    const sig = query.sig;

    if (!payload || !sig) {
        return badRequest({ body: "Missing SSO parameters" });
    }

    // 验证来自 Discourse 的传入签名

    const computedSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(payload).digest('hex');
    if (computedSig !== sig) {
        return badRequest({ body: "Invalid cryptographic signature" });
    }

    // 检查用户是否已登录 Wix

    const member = await currentMember.getMember({ fieldsets: ['FULL'] });
    
    // 解析传入的有效负载以获取唯一的跟踪 nonce

    const decodedPayload = Buffer.from(payload, 'base64').toString('ascii');
    const params = new URLSearchParams(decodedPayload);
    const nonce = params.get('nonce');

    if (!member) {
        // 如果未登录,强制他们先登录 Wix,然后返回此处
        const loginUrl = `https://yourwixsite.com{encodeURIComponent(request.url)}`;
        return redirect(loginUrl);
    }

    // 构建用于 Discourse 的用户有效负载

    const userPayload = `nonce=${nonce}&email=${encodeURIComponent(member.loginEmail)}&external_id=${member._id}&username=${encodeURIComponent(member.profile.nickname || member._id)}&name=${encodeURIComponent(member.contactDetails.firstName + ' ' + member.contactDetails.lastName)}`;

    // 加密并签署用户有效负载
    const base64Payload = Buffer.from(userPayload).toString('base64');
    const returnSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(base64Payload).digest('hex');

    // 将已登录用户重定向回 Discourse
    const discourseReturnUrl = `https://yourforum.com{encodeURIComponent(base64Payload)}&sig=${returnSig}`;
    return redirect(discourseReturnUrl);
}

你还需要替换其中的论坛 URL

此外还需要进行一些 DiscourseConnect 配置,但在你拥有一个实际运行且无错误的自行托管论坛之前,不要进行任何此类操作。

我对这些都不是专家,对 Wix 也知之甚少,所以不能保证这是可行的解决方案。我只是提供一个拟议方法的示例,以说明其复杂性。

不管这段文字是由哪个 AI 撰写的,它显然没有理解 OpenID/SAML 和 Discourse Connect 是完全不同的概念,因此我也不太相信它所陈述的其他内容。

感谢大家到目前为止提供的所有答案🙏

在拥有超过2名代表的情况下,我已经核实并确认了这一点。他们的商务邮箱涵盖了 Discourse 的 SMTP 需求,无需使用 MailGun 等提供商。他们也对此进行了限定,说明它不适用于营销/群发邮件。
Business Starter 计划(1年协议 @ 0.79/月)的主要限制:

  • 每日发送限制: 每天 500 封邮件。
  • 每封邮件的最大收件人数: 200 人。
  • 每月发送限制: 无,仅受每日限制
    其完整规格,包括 IMAP/SMTP 限制:Hostinger 邮箱的参数和限制
关于上述内容的摘要聊天👆,如果人们想进一步查看,包含详细信息

我看到您正在考虑使用 Hostinger 的商务邮箱计划来满足您的 Discourse SMTP 需求,并希望确保它涵盖一切,而无需使用 Mailgun。很乐意对此进行调查…
您可以使用 Hostinger Business Email 的 SMTP 进行 Discourse 设置,对于常规商务通信和标准论坛通知,您无需使用单独的提供商(如 MailGun)。
然而,重要的是要记住,我们的 SMTP 并非为营销或群发邮件而设计。它主要用于商务通信。如果您计划发送大量营销活动或大规模事务性邮件,那么像 MailGun 这样的专用服务仍然是满足这些特定需求的更好选择。

如果我在 Hostinger 设置商务邮箱,但将来需要群发邮件,我可以直接使用例如 MailGun,而无需迁移/或在 MailGun 注册新邮箱吗?

这将取决于 Mailgun 的必要设置。让我确认一下…
如果您仅使用 Mailgun 的 SMTP 发送邮件,则需要添加额外的 TXT 记录。MX 记录不会改变,因此您可以继续使用 Hostinger 邮箱计划接收邮件

不太明白,能否请再详细解释一下?

把您的邮箱想象成一个实体邮箱:
接收(邮箱本身): 您的邮件会到达 Hostinger,因为您的 MX 记录。您将保持这些记录完全不变,因此您将继续在 Hostinger 收件箱中接收所有邮件。
发送(邮递员): 您可以有多种发送邮件的方式。通过在您的域名中添加 TXT 记录(专门用于 SPF 和 DKIM),您实际上是授予 Mailgun “权限”以您的名义发送邮件。
这意味着您 无需迁移/在 MailGun 注册新邮箱。您可以保留 Hostinger 的专业邮箱用于日常商务聊天,并在准备好时仅将 Mailgun 用作高容量论坛通知或营销邮件的“发送引擎”


是的.. MiniOrange 可能不是我想要的,根据他们的网站,它似乎是一个第三方 IdP。我试图使用我现有的 Wix 数据库作为我的 IdP

[quote=“Lilly, post:8, topic:407922”]
你知道如何为 Wix 编写 Velo 脚本吗?
[/quote]\n不完全确定你所说的“脚本”是什么意思,但我在 Wix 上做过很多前端和后端 Velo 编码,通过自己、AI 和教程使用 Velo 代码构建了许多功能,但我还是个新手。我瞥了一眼你的代码,安装后很乐意尝试。关于 Wix 论坛,它不错(虽然不像这里这么活跃),而且那个问题还没有得到回答

到目前为止,我已经; :check_mark:使用 Hostinger 为 SMTP 设置邮箱(在 Wix 上更新了相关的 DNS 记录,如 MX、CNAME 和 TXT) :check_mark:订购了 VPS 并等待其配置完成

不像安装某些移动应用程序那样哈哈

您真的、真的应该自己进行备份。并且要将这些备份存放在异地。这是您作为系统管理员的职责之一。如果您将一切事务都交给托管提供商,您可能会失去所有数据,而您的业务对提供商的价值微乎其微。如果您正在建立一个真正的社区,其中用户关心他们的信息和人际关系,那么您的数据对您和社区的价值是巨大的。

建立社区意味着承担责任:如果您不具备履行这一责任所需的技能,就应该将其外包。这意味着您需要付费聘请一家信誉良好的机构来为您处理事务:安全、维护、连续性、修复和恢复。

你认为快照应该多久生成一次?每月一次,并每周进行备份?还是每两周一次?或者这样做是否过于频繁?

就我个人而言,我从未使用过快照。(我认为它们是额外收费的项目,而且当有实时数据库在运行时,我不确定它们是否有用。)

我考虑备份频率的方式是:当我需要恢复备份时,我会作何感想?如果我丢失了一个月的会员对话和贡献?那感觉会很糟糕。我对社区负有责任,而我却让他们的努力付诸东流。

另一方面,如果我处于磁盘空间有限的情况,我希望平衡磁盘使用。实际上我所做的,而且我可能应该重新审视这一点,是每两天备份一次并保留四个备份。我的版主团队之一每晚自动拉取备份目录的副本,因此我们有一个异地副本。在发生灾难的情况下,我们可能会损失半周的贡献。

鉴于之前使用 Contabo 服务的负面体验,我正在考虑改用 OVHcloud 的替代方案 https://www.ovhcloud.com/en/vps/。但如果它不合适,我就只能将就使用 Contabo 了。

1) 如果选择带应用程序的发行版,只显示这个有限的选项:没有 Ubuntu 作为选项的 Docker。所以我应该避免这个,选择仅显示 Ubuntu 的发行版吗?这是否意味着我稍后可以安装 Docker,还是这对来说太复杂了?(如果这是决定性因素,请忽略接下来的问题)

2) 关于备份,这非常吸引人:免费托管每日备份?太棒了,对吧?

  1. 关于 OVHcloud 与 Contabo 相比的规格担忧:
    3.1) 2 个 vCore 够用吗?
    3.2) 我应该询问关于端口的问题吗?(Contabo 显示的是 200Mbit/s)
3.3) 带宽够用吗?关于这一点,这里是 Contabo 与 OVH 的对比:

我使用具有完全相同规格的 OVHcloud 来运行我的小论坛,并且使用 Debian 系统,效果非常好。

哇!很高兴听到这个消息:) 到目前为止,我看到的 Ubuntu 太多了,感觉它就像是一个必备条件。官方指南也推荐它,所以我想知道 Debian 是否会给像我这样的新手带来更多困难(在设置/修改/最新更新/使事物兼容方面)?或者这根本不成问题?

让生活更简单。使用 Ubuntu。

标准安装只需 30 分钟 :slight_smile:

(帖子已被作者删除)

(帖子已被作者删除)

不要选择预装 Docker 的版本。直接使用标准的 Ubuntu 或 Debian 即可,脚本会完成其余工作。

我非常不喜欢 Ubuntu,老实说,我不太清楚它与 Debian 有什么区别(除了它臃肿得多),以及为什么在 Discourse 上如此强烈推荐它而不是普通的 Debian。鉴于你似乎缺乏相关经验,只需遵循标准的 Ubuntu 安装指南即可。

谢谢澄清,如果我只选择显示 Ubuntu 的发行版,我会没事吧?

[quote=“Gid, post:15, topic:407922”]
只选 Ubuntu 发行版可以吗?这是否意味着我以后可以安装 Docker,还是说这对我来说太复杂了?
[/quote]\n只是因为没预装,以后管理它也不会给我带来额外的费用或麻烦,对吧?

差点忘了另一件事,与其他 VPS 不同,这个没有面板。这能免费且轻松地解决吗?