Discourse是Stackoverflow的联合创始人Jeff Atwood推出的在线论坛工具,跟传统的论坛相比,更具有Web2.0的味道。Discourse的口号是“Civilized Disscussion”,也就是“文明地讨论”的意思。最近Discourse越来越火,成为许多人搭建论坛的首选方案。本文介绍了如何在主机平台Vultr上搭建Discourse论坛的过程和遇到的问题。

首先为啥要选Vultr作为主机平台呢?因为Vultr提供的5美元套餐(单核CPU、1G内存)是Discourse推荐的最低配置。另一家很火的主机平台是Digital Ocean(DO),他们的5美元套餐少了一半内存(只有512MB),而且存储也要略少(20G SSD对比Vultr的25G SSD)。

小广告插入:

这两家推荐奖励的差别是,DO会给新注册者10美元奖励,Vultr不会。

一些准备工作

第一个问题是域名,如果没有域名的话需要申请一个。因为我搭建Discourse只是为了试验,没有打算在国内备案,所以域名是在Aamazon AWS上买的。AWS的域名服务叫Route53,一个.com域名12美元一年,还带隐私保护功能,别人dig你的域名的时候看不到所有人的信息。这个价格不能算全网最低,但还是比较低了,跟把域名和隐私功能分来来卖的Godaddy比起来简直就是良心商家。

第二个问题是SMTP邮件服务。Discourse的管理员账号是通过SMTP发送注册确认邮件的,没有SMTP,Discourse就没办法用。Discourse的文档推荐了几家云邮件服务提供商,我选的是Mailgun。到Mailgun注册一个账户,把之前注册的域名添加到Mailgun账户,然后根据提示到AWS Route53上配置一下DNS信息,就可以了。

AWS Route53和Mailgun都是英文的文档居多,所以对英文不好的朋友,说声抱歉咯。

安装Discourse

注册完Vultr,用信用卡或者Paypal往里面充钱,完了就可以开始安装工作了。

这里又一个坑,Vultr有2.5美元的主机,你充完值之后想购买的话,会告诉你已经卖完了,坑爹!不过我们不会用2.5美元主机,这里只是告诉大家这个坑爹的地方。

Vultr提供了安装Discourse的英文教程。英文不好的同学可以参考这个中文的版本(是在DO上搭建,不过大同小异)

简要的步骤总结如下:

  1. 创建一个64位的Ubuntu 16.04LTS操作系统的虚拟机,创建完了之后会给个IP地址,假设是123.456.7.8。(为了在国内访问快一点,可以选日本或者新加坡的主机)
  2. 进入https://my.vultr.com可以看到创建好的虚拟机实例,点进去后会看到有Password一栏,这就是登录密码。
  3. ssh root@123.456.7.8,然后输入上一步中的密码来登陆到主机。
  4. 无脑依次输入下面一系列命令:

# 创建交换分区(怕1G内存不够用)
sudo install -o root -g root -m 0600 /dev/null /swapfile
swapfile: dd if=/dev/zero of=/swapfile bs=1k count=1024k
mkswap /swapfile
swapon /swapfile
echo "/swapfile swap swap auto 0 0" | sudo tee -a /etc/fstab
sudo sysctl -w vm.swappiness=10

# 获取 docker
wget -qO- https://get.docker.io/ | sh

# 把discourse安装在/var下面
mkdir /var/discourse
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
cp samples/standalone.yml containers/app.yml

以上Discourse就安装好了,接下来是配置过程。

配置Discourse

用nano编辑器打开配置文件:

cd /var/discourse
nano containers/app.yml

有些配置项是被其前面的#号注释掉的了,把#去掉就行了。

必选配置项

  • DISCOURSE_DEVELOPER_EMAILS,设为你的邮件地址
  • DISCOURSE_HOSTNAME,设为你为discourse配置的访问地址,例如,discourse.example.com
  • DISCOURSE_SMTP_ADDRESS,因为我用的是mailgun的邮件服务,所以设为它的SMTP服务器地址smtp.mailgun.org
  • DISCOURSE_SMTP_USERNAME,我的mailgun SMTP用户名
  • DISCOURSE_SMTP_PASSWORD,我的mailgun SMTP密码

备选配置项(为降低内存消耗)

  • UNICORN_WORKERS,从3改到2
  • db_shared_buffers,从256MB改成128MB

备选配置项(https访问)

Let’s Encrypt提供免费的SSL服务,如果想让你的网站以https方式运行,可以按照这个帖子的说明做配置,下面会介绍。

确保templates看起来像这样:

templates:
  - "templates/web.template.yml"
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

在env下面,添加一栏Let’s Encrypt用的邮件地址(可以填成与DISCOURSE_DEVELOPER_EMAILS一样):

env:
  LETSENCRYPT_ACCOUNT_EMAIL: 'you@example.com'

保存配置并运行实例

在Nano编辑器里面敲打 CTRL-X然后选Y来保存配置。

使用./launcher bootstrap app来执行docker的构建工作,这一步需要等一段时间。最后使用./launcher start app来启动Discourse。

如果一切顺利,你现在可以通过DISCOURSE_HOSTNAME所配置的网址来在浏览器里面访问Discourse了。

一个关于Vultr的坑

Vultr默认把SMTP使用的端口25给封了,解决的办法是到https://my.vultr.com/support/页面Open一个Ticket,Ticket范文如下:

标题:Please deblock port 25 for my instance

内容: I’ve set up a discourse on my VPS. It requires SMTP to make it fully functional. As I can check on the page https://www.vultr.com/docs/what-ports-are-blocked, SMTP port (25) has been blocked by default. That’s why I raise this ticket to ask for opening of port 25.

开启ubuntu的自动安全更新

强烈建议大家开启Ubuntu的自动安全更新

dpkg-reconfigure -plow unattended-upgrades

祝大家一切顺利,结尾小广告:

这两家推荐奖励的差别是,DO会给新注册者10美元奖励,Vultr不会。