如何在 Ubuntu 16.04 上使用 Nginx 安装 Discourse Forum
Discourse 是一个免费的开源软件,用于创建 Internet 论坛社区和邮件列表。它创建于 2013 年,使用 Ruby 和 Javascript 编程语言编写。 Discourse 论坛软件已被许多组织使用,包括 Codeacademy、Udacity、Twitter Developers 和 Docker Community Forum。
在本教程中,我们将逐步向您展示如何在 Ubuntu 16.04 上使用 Nginx Web 服务器安装和配置 Discourse Forum。具体来说,我们将向您展示如何安装 Discourse 论坛软件,将 Nginx 配置为 Discourse 应用程序的反向代理,以及使用来自 Letsencrypt 的免费 SSL 保护 Discourse 论坛软件。
我们将要做什么
- 在 Ubuntu 16.04 上安装 Docker
- 安装和配置 Discourse Forum 软件
- 在 Ubuntu 16.04 上生成 SSL Letsencrypt
- 安装和配置 Nginx 作为 Discourse 的反向代理
- Discourse Web 安装程序
- 话语附加配置
先决条件
- Ubuntu 16.04
- 根权限
- SMTP 帐户 - Mailgun、SendGrid、Mailjet 等。
第 1 步 - 在 Ubuntu 16.04 上安装 Docker
Discourse 软件是用 Ruby 和 Javascript 编写的,使用 PostgreSQL 作为主数据库,使用 Redis 作为缓存和临时数据。我们将在 Docker 容器下安装 Discourse。
安装过程将在 Ubuntu 16.04 上进行。因此,首先,使用以下命令安装 Docker。
wget -qO- https://get.docker.com/ | sh

安装完成后,检查docker服务,确保其已经在系统上运行。
systemctl status docker
还要确保 Docker 在启动引导应用程序上。
systemctl is-enabled docker

第 2 步 - 安装和配置 Discourse Forum
在此步骤中,我们将安装和配置 Discourse 软件。我们将下载 discourse docker-compose 脚本,根据我们的要求进行配置,然后为 discourse 论坛软件创建新的 Docker 容器。
创建新的 /var/discourse 目录并克隆安装程序脚本。
mkdir -p /var/discourse
git clone https://github.com/discourse/discourse_docker.git /var/discourse
现在转到 discourse 目录并复制 docker-compose 文件的示例。
cd /var/discourse
cp samples/standalone.yml containers/app.yml
使用 vim 编辑器编辑 app.yml 文件。
vim containers/app.yml
配置 Docker 端口映射
默认情况下,所有 HTTP 和 HTTPS 请求都将由 Docker 代理处理。对于本指南,我们将为此目的使用 Nginx - 所有 HTTP 和 HTTPS 都将由 Nginx Web 服务器处理。
所以我们需要更改docker端口映射配置。 Discourse 容器将只有 HTTP 连接,主机将打开新端口 2045 并映射到容器端口 80。
取消注释 HTTPS 行并将 HTTP 行更改为新端口 2045。
expose:
- "2045:80" # http
# - "443:443" # https
话语域名配置
为安装在 DISCOURSE_HOSTNAME 行中的话语输入您自己的域名,如下所示。
DISCOURSE_HOSTNAME: 'discourse.hakase-labs.me'
并在 DISCOURSE_DEVELOPER_EMAIL 行中输入您的电子邮件地址。
DISCOURSE_DEVELOPER_EMAILS: ''
SMTP 配置
这是 Discourse Software 最重要的配置。确保您拥有用于安装 Discourse 的 SMTP 帐户 - 您可以从 Mailgun、Mailjet 或 SendGrid 购买或试用免费级 SMTP 帐户。
在本教程中,我们将使用 Mailgun 的免费层级 SMTP 帐户。取消注释 SMTP 配置并键入您的帐户,如下所示。
DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME:
DISCOURSE_SMTP_PASSWORD: mypassword
保存并退出。
接下来,根据 app.yml 模板配置构建新的 Discourse Docker 镜像。
sudo ./launcher bootstrap app

之后,使用下面的命令启动/初始化新的 Discourse 容器。
sudo ./launcher start app

Discourse 容器应该启动并运行 - 使用 docker 命令检查它。
docker ps -a
使用 netstat 检查主机开放端口,并确保新的 docker-proxy 端口 2045 在列表中。
netstat -plntu

Discourse Forum 软件已安装在主机 Ubuntu 16.04 上的 docker 容器下。
第 3 步 - 在 Ubuntu 16.04 上生成 SSL Letsencrypt
Discourse 论坛将在 HTTP 安全连接下运行,并由 Nginx Web 服务器处理。我们将在本指南中使用 Letsencrypt 提供的免费 SSL,我们需要在服务器上安装 letsencrypt 客户端。
使用下面的 apt 命令安装 letsencrypt。
sudo apt install letsencrypt -y
现在使用 letsencrypt 命令生成新的 SSL 证书。
letsencrypt certonly
键入用于更新通知的电子邮件地址,然后选择“确定”。

对于 Letsencrypt TOS(服务条款),选择同意。

现在输入您的话语域名 discourse.hakase-labs.me。

完成后,您将得到如下结果

/etc/letsencrypt/live 目录中已生成来自 letsencrypt 的新 SSL 证书。
第 4 步 - 安装和配置 Nginx 作为 Discourse 容器的反向代理
在此步骤中,我们将安装 Nginx Web 服务器并将其配置为在端口 2045 上运行的 Discourse 容器的反向代理。
使用下面的 apt 命令安装 Nginx。
sudo apt install nginx -y
现在启动 Nginx 并使用 systemctl 命令使其在启动时启动。
systemctl start nginx
systemctl enable nginx

Nginx 已安装并在 HTTP 端口 80 上运行。您可以使用 netstat 进行检查。
netstat -plntu
Nginx Web 服务器已安装到 Ubuntu 16.04 服务器。

接下来,我们需要为 Discourse 容器创建一个新的虚拟主机文件。转到 nginx 配置目录并使用 vim 编辑器创建新的讨论文件。
cd /etc/nginx/
vim sites-available/discourse
现在,粘贴以下 Discourse nginx 虚拟主机配置。
server {
listen 80; listen [::]:80;
server_name discourse.hakase-labs.me;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name discourse.hakase-labs.me;
ssl_certificate /etc/letsencrypt/live/discourse.hakase-labs.me/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/discourse.hakase-labs.me/privkey.pem;
include /etc/nginx/snippets/ssl.conf;
location / {
proxy_pass http://discourse.hakase-labs.me:2045/;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect http://discourse.hakase-labs.me:2045/ https://discourse.hakase-labs.me;
}
}
保存并退出。
注意:
- 所有 HTTP 请求都将自动重定向到 HTTPS 连接。
- 使用您自己的路径目录更改 SSL 配置。
- 还有一个额外的 SSL 配置。
现在创建新的附加 ssl 配置文件 ssl.conf。
vim snippets/ssl.conf
将以下配置粘贴到文件中。
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
保存并退出。
现在使用 ln -s 命令激活 discourse 虚拟主机,如下所示。
ln -s /etc/nginx/sites-available/discourse /etc/nginx/sites-enabled/
测试配置并确保没有错误,然后重新启动服务。
nginx -t
systemctl restart nginx
作为 Discourse 容器反向代理的 Nginx 安装和配置已经完成。

第 5 步 - Discourse Web 安装程序
打开您的网络浏览器并访问讨论 URL。
http://discourse.hakase-labs.me
您将被重定向到 HTTP 安全连接。单击注册按钮创建一个新的管理员用户。

现在键入您的管理员用户和密码,然后单击注册。

您将收到一封关于您的管理员用户激活的新电子邮件确认。

以下是 Discourse 帐户确认的示例电子邮件。单击链接以确认并激活管理员帐户。

你应该得到如下所示的话语页面。单击单击此处激活您的帐户按钮。

现在您可以配置自己的 Discourse 论坛。单击下一步按钮,您需要使用 13 步配置 Discourse Forum。或者您可以稍后通过单击可能以后配置它。

下面显示的是安装在 Nginx Web 服务器上的 Discourse Forum 和 Ubuntu 16.04 上的 HTTPS。

以下是我的 Discourse 管理仪表板。

Discourse Forum 已经在 Ubuntu 16.04 服务器上安装了 Nginx 作为反向代理。
第 6 步 - Discourse 附加配置
安装 Discourse 时,您可能会遇到一个问题,即您没有收到管理员用户激活的电子邮件确认。
要对问题进行排序,请确保您在配置 app.yml 上拥有正确的 SMTP 帐户。或者您可以从您的服务器手动激活管理员帐户。
要手动激活您的管理员帐户,请转到 /var/discourse 目录。
cd /var/discourse
现在使用以下命令访问话语容器。
./launcher enter app
并使用 rails 命令激活第一个管理员用户,如下所示。
rails c
u=User.last
u.admin=true
u.activate
u.save
现在您可以使用您的用户名和密码登录 Discourse 论坛。
参考
- <李>
- https://github.com/discourse/discourse/tree/master/docs