在 Azure 上设置 Discourse

本指南面向希望在 Azure 中自行托管 Discourse 站点的用户,将引导您完成创建 Linux 虚拟机(VM)所需的初始 Azure 门户配置步骤。完成后,您可按照 常规云安装指南 进行后续操作(该指南适用于任何网络托管环境)。如果您不打算自行托管,而是希望由我们为您托管 Discourse 论坛,请在此处 注册

1) 创建资源组

在创建虚拟机之前,请先创建资源组。您的 Discourse 站点相关的所有内容(如虚拟机存储磁盘、网络、安全组、Blob 存储等)都将位于此资源组中。要创建资源组,请点击绿色加号并选择“资源组”,然后填写“资源组名称”字段,选择您的“订阅”和“资源组位置”,最后点击“创建”。

2) 创建 Linux 虚拟机

本指南将为您创建一个 Ubuntu 16.04 LTS 虚拟机。为此,请再次点击绿色加号,然后搜索"Ubuntu Server 16.04 LTS",它应该会出现在可用虚拟机列表中。

选择它,确保部署模型设置为“资源管理器”,然后点击“创建”。

3) 配置基本设置

此时您应位于“创建虚拟机”的“基础”选项卡上。填写所有必填字段以设置虚拟机。选择我们之前创建的"discourse"资源组,为您的虚拟机命名(例如"discourse"),并选择您希望使用的区域。

仍在“基础”选项卡上,您需要选择虚拟机的大小。默认选项为“标准 D2s v3",该配置拥有 8 GB 内存,每月费用为 71.42 美元。请务必点击“更改大小”,并根据您的工作负载选择合适的虚拟机规格。

对于最低要求,您需要选择"B1ms"选项,该选项配备 2GB 内存。虽然"B1s"广告宣称拥有 1GB 内存,但在操作系统层面您只能获得约 800MB 内存,剩余空间不足以流畅运行 Discourse。“B1ms”的月费为 17.11 美元。

接下来填写 Linux 用户名,并上传您的 SSH 公钥。或者,您也可以配置基于密码的登录方式,但推荐使用基于 SSH 密钥的登录方式。

现在,我们需要确保可以通过 Web 和 SSH 访问该机器。请选择“允许选定端口”单选按钮,并从“选择入站端口”下拉菜单中选择 HTTP、HTTPS 和 SSH。设置完成后,建议将 SSH 访问权限限制为仅允许您的 IP 地址。

选择“检查 + 创建”。在摘要页面上确认一切无误后,点击“创建”。虚拟机创建过程将需要几分钟时间。

4) 通过 SSH 连接到虚拟机

我们需要命令行访问权限来设置交换空间并安装 Discourse。虚拟机创建完成后,您应该可以在 Azure 门户中选择该虚拟机,并在“概述”屏幕上查看其公共 IP 地址。打开您的终端,使用本指南第 3 步中指定的用户名通过 SSH 连接到虚拟机。

如果您不确定如何通过 SSH 连接到虚拟机,也可以改用 Azure 门户内的“串行控制台”。方法是选择该虚拟机,然后在左侧导航栏底部选择“串行控制台”。

这将打开一个 Shell,您可以在其中输入创建虚拟机之前指定的用户名和密码。如果您不确定密码是什么,可以使用“重置密码”选项。

现在您应该已经处于可以输入命令的终端中:

5) 设置交换空间

每个 Azure 虚拟机都配备一个与操作系统磁盘分离的临时磁盘,通常挂载在 /dev/sdb1。请确保将交换空间设置在此临时磁盘上,而不是操作系统磁盘上,原因如下:

此临时存储驱动器位于托管您虚拟机的物理机器上,因此与数据磁盘等持久性存储相比,它具有更高的 IOPS 和更低的延迟。 - 了解 Azure 虚拟机上的临时驱动器

编辑 /etc/waagent.conf 文件并更新以下行:

ResourceDisk.Format=y
ResourceDisk.EnableSwap=y
ResourceDisk.SwapSizeMB=2048

注意:如果您已经在操作系统驱动器上设置了交换空间(可能是 ./discourse-setup 为您配置的),您可以通过注释掉 /etc/fstab 中的 /swapfile 行来关闭它。

如果您不确定如何使用 vim 等命令行编辑器编辑 /etc/waagent.conf 文件,可以直接将以下命令复制并粘贴到您的终端中,然后按回车键:

sudo sed -i '/ResourceDisk.Format=n/c\\ResourceDisk.Format=y' /etc/waagent.conf && sudo sed -i '/ResourceDisk.EnableSwap=n/c\\ResourceDisk.EnableSwap=y' /etc/waagent.conf && sudo sed -i '/ResourceDisk.SwapSizeMB=0/c\\ResourceDisk.SwapSizeMB=2048' /etc/waagent.conf

如果是首次运行 sudo 命令,系统可能会要求您输入密码。

然后使用 sudo shutdown -r now 重启您的虚拟机。

要验证交换空间是否正常工作,请重新登录您的虚拟机并输入 swapon --show,您应该会看到类似以下内容:

root@azure:~# swapon --show
NAME          TYPE SIZE USED PRIO
/mnt/swapfile file   2G 0B   -2

请注意,交换文件位于 /mnt 内,这是好事,因为这是我们临时驱动器的位置。

您还可以输入 free -h 并查看类似以下内容:

root@azure:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        174M        1.5G        3.0M        172M        1.5G
Swap:          2.0G          0B        2.0G

如果“总计”列中有数值,则表示交换空间已设置成功。

6) 安装 Discourse

现在我们的 Linux 虚拟机已在 Azure 上创建,并且已配置了交换分区,接下来请按照 官方云安装指南 进行操作。

7) 安装 Azure Blob 存储插件(可选)

Discourse 安装完成后,您可以按照 Azure Blob 存储插件 主题中的安装说明进行操作。安装并启用此插件后,用户上传的图片将存储在 Blob 存储中,而不是您的 Linux 虚拟机上。这有助于提升性能,同时防止您的操作系统磁盘被填满。

33 个赞

元讨论帖 在 Azure 上安装的 Discourse 无法访问 与本文结合使用,对我也有很大帮助。

3 个赞

是否可以在 Azure 上以无服务器安装的方式运行 Discourse?首先是 Docker,不使用底层虚拟机?

它不支持或文档不完善,但应该可行。

使用 launcher 来构建和引导一个镜像,并将其推送到仓库。然后使用 launcher 查看它启动的环境。然后利用该信息来启动它。我以前为 AWS 做过这件事。

甚至更不为人知的是 launcher2,我认为它存在于 discourse_docker 仓库中,但我从未在 GitHub 的评论之外看到过它被讨论过。

如果您需要帮助并且有预算,请联系我或在 Marketplace 发布。

我确实有一个想投资的预算,但那是利用我的内部资源和人才。

如果我们将其作为 PoC 运行,能否获得 Discourse 团队的一些支持?