在 Ubuntu 上安装 Discourse 开发环境

:warning: 本指南只针对 Discourse 开发环境的配置,如果你需要在生产环境中安装 Discourse ,请访问页面:Install Discourse in production with the official, supported instructions 中的内容。

:information_source: 有关开发环境的设置英文原文,请参考:Set up a local Discourse Development Environment? 页面中的内容。


本文只针对在 Ubuntu 环境下的开发进行设置,因为 Discourse 是基于 Ruby 开发的,Ruby 的开发环境在 Ubuntu 下设置最为简便,所以 Discourse 的生产环境运行也是是官方建议在 Ubuntu 下运行的,虽然我们的社区是运行在 REHL 环境下也没有问题,因为使用了 Docker 的容器,但如果你想对 Discourse 进行开发的话,建议还是使用 Ubuntu 环境。

如果你使用的是 Windows 系统的话,你需要安装 WSL 环境。WSL 是 Windows 提供的一个基于 Ubuntu 的环境,主要用于解决 Windows 下开发Linux 应用的问题。

本文章假设你还没有在 Ubuntu 环境中安装 Ruby/Rails/Postgres/Redis 环境,让我们开始开发环境的配置吧!

尽管这个开发指南是假定你使用的是 Ubuntu 开发环境,但是任何基于 Debian 发行的 Linux 系统都是可以使用的。

本开发指南在 Ubuntu 18 上验证过不需要任何其他的步骤就可以完成开发环境设置。

:exclamation: 基于 Ubuntu/Debian 开发环境的使用不同,你可能在对 Ubuntu/Debian 进行开发的时候需要参考下下面的信息:

有关在 Ubuntu 20.04 及其后续版本上安装 Discourse 测试环境

在默认的 Ubuntu 20.04 及其后续版本上默认的将会安装 OpenSSL 3.0.2。有可能需要从早期的 OpenSSL 版本来进行编译后替换掉上面的这个版本(官方推荐使用的是 OpenSSL-1.1.1n)版本。同时你还需要检查下你安装的 Ruby 的版本,可以使用命令 ruby --version 来查看 Ruby 的版本,Discourse 当前还使用的是 Ruby 2 的版本,如果你使用的是 Ruby 3.x 或者后学版本,你需要把你的 Ruby 版本降级一下。官方是推荐使用 Ruby 的版本控制工具来进行降低版本。针对 Discourse 当前的运行环境,官方认为 Ruby 2.7.6 是当前最适合 Discourse 运行的。请参考: Notes about Installing Discourse on Ubuntu 20.04 - #2 by AlexDev 页面中的内容来获得更多的信息。

有关在 Ubuntu 低于 20.04版本上安装 Discourse 测试环境

下面的部分是 @pfaffman 22.05.16 添加的,这个有可能会有这个错误,但有可能你遇不到。

NOTE: 请参考:Failed to build ruby 2.7.5 on ubuntu 22.04 · Discussion #1940 · rbenv/ruby-build · GitHub 页面中的内容来获得相关的信息。

End of @pfaffman additions.

根据我们进行测试的经验来看,Ubuntu 22 的版本中可能有无法编译和包找不到的情况,我们还只在 20.04 上完成本地开发环境的设置。

安装 Discourse 依赖

作为一般的用户,可以在控制台中运行下面的命令: this script 。上面的命令将会帮助你在本地的开发环境中快速设置 Rails。

运行的命令为:

bash <(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/master/linux)

上面的命令将会在你的本地系统中安装下面的包:

如果在你的本地操作系统中已经安装了一些软件,或者你不希望安装所有的软件的话,请参考 script 中的内容,然后选择你不希望当前安装的软件。上面的安装脚本将会安装所有 Discourse 运行需要的软件,这些软件将会为 Discourse 的运行提供支持。

当你完成安装所有的 Discourse 依赖后,我们就可以对 Discourse 进行安装了。


上图显示的是在 Ubuntu 中安装的界面,整个软件安装的过程还是比较耗时的,可能需要5 分钟以上,与你使用的系统有关。

克隆(Clone)Discourse

克隆 Discourse 到 ~/discourse 文件夹中

git clone https://github.com/discourse/discourse.git ~/discourse

~ 定义的是当前的 Home 文件夹,这个意思是 Discourse 的程序将会复制到你的 home 文件夹下。

因为我们使用的是 WSL 子系统,因此我们实际上是把文件克隆到我的 D 盘下了。

设置(Setup) Database

创建一个 与你 ubuntu 系统用户名相同的用户

sudo -u postgres createuser -s "$USER"

如果你在运行上面的命令的时候提示错误:

createuser: error: could not connect to database template1: could not connect to server: No such file or directory

请参考页面:Discourse 开发环境安装 PGSQL 提示错误 - Discourse - OSSEZ 中的内容。

启动 Discourse

切换到你的 Discourse 克隆目录中:

cd ~/discourse

安装所需要的 gems

source ~/.bashrc
bundle install

同时安装所需要的 JS 依赖

yarn install

当到这一步为止,你已经安装好所有需要的 gems 和依赖,请尝试运行下面的命令:

bundle exec rake db:create 
bundle exec rake db:migrate
RAILS_ENV=test bundle exec rake db:create db:migrate

如果在运行的时候出现错误,请仓库: Discourse 开发环境安装运行 bundle exec rake db:create 错误 - Discourse - OSSEZ 中的内容。

尝试运行下面的命令:

bundle exec rake autospec

你的项目应该会通过所有的测试。

这个测试非常耗时,可以不做这个的,要不然估计几个小时就出去了。

运行下面的命令来启动服务器:

bundle exec rails server

当你完成上面的安装步骤后,你应该可以通过 http://localhost:3000 访问你本地安装的 Discourse。

从 Discourse 2.5+ 开始, 针对本地的开发环境 EmberCLI 变成必须的选项了。:

如果你直接通过界面访问 3000 端口的话,会得到下面的提示界面:


在你的控制台终端中,进入 (cd ~/discourse) 文件夹,然后运行:

bin/ember-cli

你应该可以通过访问t http://localhost:4200 地址来查看你的本地 Discourse 安装。

:warning: 需要注意的是这 2 个服务器都需要同时启动,ember-cli 是通过反向代理的方式访问 3000 的。

创建一个新的 Admin 账号

在对开发环境进行登录之前,需要创建一个管理员账号,运行下面的命令进行创建:

RAILS_ENV=development bundle exec rake admin:create

请按照命令行的提示来创建这个管理员账号。

需要输入的信息为电子邮件地址和密码。

配置邮件

运行 MailHog:

mailhog

当你完成上面的所有步骤后,你的 Discourse 本地开发环境就已经配置好了,你现在就可以以管理员账号来登录 Discourse 了。

如果你想对 Discourse 开发插件的话,请参考: Developing Discourse Plugins - Part 1 - Create a basic plugin 页面中的内容指南。