如何在 Ubuntu 18.04 LTS 上安装 Discourse Forum
本教程适用于这些操作系统版本
- Ubuntu 20.04(Focal Fossa)
- Ubuntu 18.04(仿生海狸)
在此页
- 要求
- 开始
- 安装和配置 PostgreSQL
- 安装红宝石
- 安装和配置 Discourse
- 为 Discourse 配置 Nginx
- 访问 Discourse Web 界面
Discourse 是一个免费的开源讨论论坛应用程序,可以用作邮件列表和聊天室。它是一个非常强大和灵活的平台,允许用户使用单点登录进行登录。它可以与 WordPress、Google Analytics、Zendesk、Patreon、Slack 等集成。它支持电子邮件通知、电子邮件回复和各种身份验证方法,例如社交网络和单点登录。它简单、易于使用、扁平,并带有内置的移动布局。
在本教程中,我们将学习如何在 Ubuntu 18.04 服务器上安装和配置 Discourse 论坛。
要求
- 一台运行 Ubuntu 18.04 的服务器。
- 在您的服务器上设置了静态 IP 地址 192.168.0.101。
- 已为您的服务器设置根密码。
入门
首先,您需要使用最新版本更新您的服务器。您可以使用以下命令执行此操作:
apt-get update -y
apt-get upgrade -y
服务器更新后,重新启动系统以应用所有更改
接下来,您需要在您的服务器上设置 FQDN。您可以使用以下命令执行此操作:
hostnamectl set-hostname test.example.com
接下来,打开 /etc/hosts 文件并添加以下行:
nano /etc/hosts
添加以下行:
192.168.0.101 test.example.com test
完成后保存并关闭文件。然后,运行以下命令以应用所有更改:
hostname -f
接下来,您需要将一些必需的软件包安装到您的系统中。您可以使用以下命令安装它们:
apt-get install nginx curl git wget unzip nano -y
完成后,您可以继续下一步。
安装和配置 PostgreSQL
首先,您需要在系统中安装 PostgreSQL。您可以通过运行以下命令来安装它:
apt-get install postgresql -y
安装 PostgreSQL 后,使用以下命令登录到 PostgreSQL 控制台:
sudo -u postgres psql
接下来,使用以下命令为 Discourse 创建数据库和用户:
postgres=#CREATE DATABASE discoursedb;
postgres=#CREATE USER discourseuser;
postgres=#ALTER USER discourseuser WITH ENCRYPTED PASSWORD 'password';
postgres=#ALTER DATABASE discoursedb OWNER TO discourseuser;
接下来,连接到 discoursedb 并使用以下命令创建 hstore 和 pg_trgm 扩展:
postgres=#\c discoursedb;
postgres=#CREATE EXTENSION hstore;
postgres=#CREATE EXTENSION pg_trgm;
最后,使用以下命令退出 PostgreSQL:
postgres=#\q
安装红宝石
接下来,您需要在系统中安装最新版本的 Ruby。您可以使用 RVM 安装 Ruby。
首先,使用以下命令安装 GNU privacy guard:
apt-get install gnupg2 -y
接下来,使用以下命令导入 Ruby 版本管理器的公共:
gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
您应该看到以下输出:
gpg: keybox '/root/.gnupg/pubring.kbx' created
gpg: key 105BD0E739499BDB: 6 signatures not checked due to missing keys
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 105BD0E739499BDB: public key "Piotr Kuczynski <>" imported
gpg: key 3804BB82D39DC0E3: 103 signatures not checked due to missing keys
gpg: key 3804BB82D39DC0E3: public key "Michal Papis (RVM signing) <>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 2
gpg: imported: 2
接下来,使用以下命令安装带有默认 Ruby 和 Rails 的 RVM:
curl -sSL https://get.rvm.io | bash -s stable --rails
安装 Ruby 和 Rails 后,您需要获取 RVM 脚本的源代码。您可以使用以下命令执行此操作:
source /usr/local/rvm/scripts/rvm
您现在可以使用以下命令查看 Ruby 版本:
rvm list
您应该看到以下输出:
=* ruby-2.6.3 [ x86_64 ]
# => - current
# =* - current && default
# * - default
安装和配置 Discourse
首先,您需要从 Git 存储库下载最新版本的 Discourse。您可以使用以下命令下载它:
cd /var/www/
git clone https://github.com/discourse/discourse.git
输出:
Cloning into 'discourse'...
remote: Enumerating objects: 57, done.
remote: Counting objects: 100% (57/57), done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 403387 (delta 26), reused 34 (delta 20), pack-reused 403330
Receiving objects: 100% (403387/403387), 267.39 MiB | 235.00 KiB/s, done.
Resolving deltas: 100% (252384/252384), done.
Checking out files: 100% (27055/27055), done.
接下来,使用以下命令检查 Discourse 的最新稳定版本:
cd discourse
git checkout v2.2.4
接下来,使用以下命令安装 Ruby 依赖项管理器:
/usr/local/rvm/src/ruby-2.6.3/bin/gem install bundler -v '1.17.3'
您应该看到以下输出:
Fetching bundler-1.17.3.gem
Successfully installed bundler-1.17.3
Parsing documentation for bundler-1.17.3
Installing ri documentation for bundler-1.17.3
Done installing documentation for bundler after 15 seconds
1 gem installed
接下来,您需要安装一些额外的包来编译源代码。您可以使用以下命令安装所有这些:
apt-get install gcc ruby-dev libxslt-dev libxml2-dev zlib1g-dev libpq-dev imagemagick redis-server optipng pngquant jhead jpegoptim gifsicle -y
接下来,使用以下命令安装 Discourse 所需的所有依赖项:
RAILS_ENV=production bundle install --path vendor/bundle/
接下来,使用以下命令重命名 Discourse 默认配置文件:
mv config/discourse_defaults.conf config/discourse.conf
接下来,打开 discourse.conf 文件并定义您的数据库设置:
nano config/discourse.conf
更改以下行:
db_host = localhost
db_port = 5432
db_name = discoursedb
db_username = discourseuser
db_password = password
hostname = "test.example.com"
保存并关闭文件。然后,使用以下命令编辑生产环境配置文件:
nano /var/www/discourse/config/environments/production.rb
添加以下行作为第三行
require 'uglifier'
然后,找到以下行:
config.assets.js_compressor = :uglifier
并将其替换为以下内容:
config.assets.js_compressor = Uglifier.new(harmony: true)
完成后保存并关闭文件。然后,使用以下命令为生产准备 Discourse:
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake assets:precompile
接下来,使用以下命令打开 puma.rb 文件:
nano /var/www/discourse/config/puma.rb
找到以下行:
APP_ROOT = '/home/discourse/discourse'
将其替换为以下行:
APP_ROOT = '/var/www/discourse'
完成后保存并关闭文件。然后,使用以下命令创建套接字和进程 ID 目录:
mkdir /var/www/discourse/tmp/sockets/
mkdir /var/www/discourse/tmp/pids/
最后,通过运行以下命令启动 Discourse:
RAILS_ENV=production bundle exec puma -C /var/www/discourse/config/puma.rb
您应该看到以下输出:
[29834] Puma starting in cluster mode...
[29834] * Version 3.11.4 (ruby 2.6.3-p62), codename: Love Song
[29834] * Min threads: 8, max threads: 32
[29834] * Environment: development
[29834] * Process workers: 4
[29834] * Preloading application
[29834] * Listening on unix:///var/www/discourse/tmp/sockets/puma.sock
[29834] ! WARNING: Detected 3 Thread(s) started in app boot:
[29834] ! #<Thread:/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus.rb:667 sleep> - /var/www/html/discourse/vendor/bundle/ruby/2.6.0/gems/hiredis-0.6.1/lib/hiredis/ext/connection.rb:19:in `read'
[29834] ! #<Thread:/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus/timer_thread.rb:38 sleep> - /var/www/html/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus/timer_thread.rb:123:in `sleep'
[29834] ! #<Thread:/var/www/discourse/lib/discourse.rb:584 sleep> - /var/www/discourse/lib/discourse.rb:587:in `sleep'
[29834] * Daemonizing...
接下来,使用以下命令创建一个管理员帐户以访问 Discourse Web 界面:
cd /var/www/discourse
RAILS_ENV=production bundle exec rake admin:create
提供您的电子邮件和密码,如下所示:
Email:
Password:
Repeat password:
Ensuring account is active!
Account created successfully with username example
Do you want to grant Admin privileges to this account? (Y/n) Y
Your account now has Admin privileges!
接下来,使用以下命令重新启动 Discourse 服务:
RAILS_ENV=production bundle exec pumactl -P /var/www/discourse/tmp/pids/puma.pid restart
为 Discourse 配置 Nginx
接下来,您需要将 Nginx 配置为反向代理以访问端口 80 上的 Discourse Web 界面。
首先,使用以下命令复制示例 Nginx 虚拟主机配置文件:
cp /var/www/discourse/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf
接下来,使用以下命令打开 discourse.conf 文件:
nano /etc/nginx/conf.d/discourse.conf
进行以下更改:
#upstream discourse {
# server unix:/var/www/discourse/tmp/sockets/thin.0.sock;
# server unix:/var/www/discourse/tmp/sockets/thin.1.sock;
# server unix:/var/www/discourse/tmp/sockets/thin.2.sock;
# server unix:/var/www/discourse/tmp/sockets/thin.3.sock;
#}
upstream discourse {
server unix:/var/www/discourse/tmp/sockets/puma.sock;
}
server_name test.example.com;
完成后保存并关闭文件。然后,使用以下命令创建缓存目录:
mkdir -p /var/nginx/cache/
接下来,使用以下命令检查 Nginx 是否存在任何语法错误:
nginx -t
输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
接下来,重新启动 Nginx 以应用所有更改:
systemctl restart nginx
您还可以使用以下命令检查 Nginx 的状态:
systemctl status nginx
输出:
? nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2019-05-26 04:19:12 UTC; 29min ago
Docs: man:nginx(8)
Process: 1052 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 848 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 1065 (nginx)
Tasks: 3 (limit: 1114)
CGroup: /system.slice/nginx.service
??1065 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
??1066 nginx: worker process
??1067 nginx: cache manager process
May 26 04:19:04 ubuntu1804 systemd[1]: Starting A high performance web server and a reverse proxy server...
May 26 04:19:12 ubuntu1804 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
May 26 04:19:12 ubuntu1804 systemd[1]: Started A high performance web server and a reverse proxy server.
如果访问 Discourse web inetrface 出现任何错误,还需要复制以下 JS 文件:
cp /var/www/discourse/public/assets/_vendor-3eae3eec8fba033cb1b5af6c103a5b8781caa69cf97fe7773ba89ba68980b263.js /var/www/discourse/public/assets/vendor-3eae3eec8fba033cb1b5af6c103a5b8781caa69cf97fe7773ba89ba68980b263.js
访问 Discourse Web 界面
Discourse 现已安装和配置,是时候访问 Discourse Web 界面了。
打开 Web 浏览器并输入 URL http://test.example.com。您将被重定向到以下页面:

现在,单击“登录”按钮。您应该会看到以下页面:

现在,提供您的用户名和密码。然后,单击“登录”按钮。您应该会看到以下页面:

您现在可以在 Web 浏览器上使用 URL http://test.example.com/wizard 启动设置向导。您应该在以下页面中看到欢迎屏幕:

现在,选择您的语言并单击“下一步”按钮。您应该会看到以下页面:

在这里,输入您的主题,然后单击“下一步”按钮。您应该会看到以下页面:

在这里,选择 Public 并单击 Next 按钮。您应该会看到以下页面:

在这里,提供您的电子邮件和联系页面。然后,单击“下一步”按钮。您应该会看到以下页面:

在这里,提供您的公司名称和地址。然后,单击“下一步”按钮。您应该会看到以下页面:

现在,选择您的主题并单击“下一步”按钮。您应该会看到以下页面:

现在,上传您的徽标并单击“下一步”按钮。您应该会看到以下页面:

现在,选择图标并单击下一步按钮。您应该会看到以下页面:

现在,选择您的主页并单击“下一步”按钮。您应该会看到以下页面:

现在,根据需要选择表情符号,然后单击下一步按钮。您应该会看到以下页面:

现在,邀请您的员工加入此论坛并单击“下一步”按钮。安装完成后,您应该会看到以下页面:

现在,单击“完成”按钮。您将被重定向到以下页面中显示的 Discourse 仪表板:

恭喜!您已在 Ubuntu 18.04 服务器上成功安装和配置 Discourse 论坛。