如何在 CentOS 7 上使用 Nginx 安装 Discourse Forum
在此页
- 第 1 步 - 在 CentOS 7 上安装 Docker
- 第 2 步 - 安装和配置 Discourse Forum 软件
- 第 3 步 - 在 CentOS 7 上生成 SSL Letsencrypt
- 第 4 步 - 安装 Nginx 并将其配置为 Discourse 的反向代理
- 第 5 步 - Discourse Web 安装程序
- 第 6 步 - 话语附加配置
- 参考资料
Discourse 是一个免费的开源软件,用于创建 Internet 论坛社区和邮件列表。它创建于 2013 年,使用 Ruby 和 Javascript 编程语言编写。 Discourse 论坛软件已被许多组织使用,包括 Codeacademy、Udacity、Twitter Developers、Docker Community Forum 等。
在本教程中,我们将逐步向您展示如何在 CentOS 7 服务器下使用 Nginx Web 服务器安装和配置 Discourse Forum。具体来说,我们将向您展示如何安装 Discourse Forum 软件,将 Nginx 配置为 Discourse 应用程序的反向代理,以及使用 Letsencrypt 提供的免费 SSL 保护 Discourse 论坛软件。
我们将要做什么
- 在 CentOS 7 上安装 Docker
- 安装和配置 Discourse 论坛软件
- 在 CentOS 7 上生成 SSL Letsencrypt
- 安装和配置 Nginx 作为 Discourse 的反向代理
- Discourse Web 安装程序
- 话语附加配置
先决条件
- CentOS 7
- 根权限
- SMTP 帐户 - 例如来自 Mailgun、SendGrid 或 Mailjet
第 1 步 - 在 CentOS 7 上安装 Docker
discourse forum 将安装在 Docker 容器下。所以我们必须做的第一步是在我们的 CentOS 7 服务器上安装 Docker。
使用以下命令在 CentOS 7 上安装 Docker。
wget -qO- https://get.docker.com/ | sh
如果您没有 wget 命令,请从存储库安装它。
yum -y install wget
如果安装完成,启动 Docker 服务并使用以下 systemctl 命令使其在启动时启动。
systemctl start docker
systemctl enable docker
Docker引擎已经安装并运行在CentOS 7服务器上。使用以下命令检查服务状态。
systemctl status docker
Docker 服务处于活动状态并正在运行。

第 2 步 - 安装和配置 Discourse 论坛软件
在此步骤中,我们将安装和配置 Discourse 软件。我们将下载 discourse docker-compose 脚本,根据需要进行配置,然后为 discourse 论坛软件创建一个新的 Docker 容器。
在下载discourse之前,我们需要先安装git命令到服务器。
yum -y install git
现在创建一个新目录 /var/discourse 并使用 git 命令下载/克隆 discourse docker 脚本。
mkdir -p /var/discourse
git clone https://github.com/discourse/discourse_docker.git /var/discourse
转到 discourse 目录并将 docker-compose 脚本 standalone.yml 的示例复制到 /var/discourse/containers/ 目录,名称为 app.yml。
cd /var/discourse
cp samples/standalone.yml containers/app.yml

现在使用 vim 编辑 app.yml 文件。
vim containers/app.yml
- 码头工人端口映射
默认情况下,所有 HTTP 和 HTTPS 请求都将由 Docker 代理处理。对于本指南,我们将为此目的使用 Nginx - 所有 HTTP 和 HTTPS 都将由 Nginx Web 服务器处理。
所以我们需要更改docker端口映射配置。 Discourse 容器将只有 HTTP 连接,主机将打开新端口 2045 并映射到容器端口 80。
取消注释 HTTPS 行并使用新端口 2045 更改 HTTP 行,如下所示。
expose:
- "2045:80" # http
# - "443:443" # https
- Discourse域名配置
如下所示,在 DISCOURSE_HOSTNAME 行中为安装的话语输入您自己的域名。
DISCOURSE_HOSTNAME: 'discourse.hakase-labs.co'
并在 DISCOURSE_DEVELOPER_EMAIL 行中输入您的电子邮件地址。
DISCOURSE_DEVELOPER_EMAILS: ''
- SMTP 配置
SMTP Configuration 是 Discourse Software 最重要的配置。确保您拥有用于安装 Discourse 的 SMTP 帐户 - 您可以从 Mailgun、Mailjet 或 SendGrid 购买或试用免费级 SMTP 帐户。
对于本教程,我们将使用来自 Mailgun 的免费层级 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 命令检查它。
docker ps -a
使用 netstat 检查主机开放端口,并确保端口为 2045 的新服务 docker-proxy 在列表中。
netstat -plntu

Discourse Forum 软件已经安装在宿主机 CentOS 7 的 docker 容器下。
第 3 步 - 在 CentOS 7 上生成 SSL Letsencrypt
对于本教程,我们将在 Nginx Web 服务器下运行 Discourse 论坛,并且只接受 HTTPS 连接。为此,我们需要新的域名 SSL 证书,因此,我们将使用 Letsencrypt 提供的免费 SSL 证书。
按照以下方式使用 yum 命令安装 Letsencrypt 命令行工具。
yum -y install letsencrypt
安装后,将新的 HTTP 和 HTTPS 服务添加到 Firewalld 配置中。
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

现在使用下面的 letsencrypt 命令为 Discourse 论坛生成新的 SSL 证书。
letsencrypt certonly
您将看到来自 Letsencrypt 的两个验证。键入数字 1 以启动临时 Web 服务器以进行身份验证。
作为其中的一部分,输入您的电子邮件地址以更新通知,输入 A 以同意 letsencrypt TOS(服务条款)。
现在键入话语域名 discourse.hakase-labs.co。

该过程完成后,您将得到如下结果。

来自 letsencrypt 的新 SSL 证书已在 /etc/letsencrypt/live 目录中生成。
第 4 步 - 安装和配置 Nginx 作为 Discourse 的反向代理
在本教程中,我们将使用 Nginx Web 服务器作为在 Docker 容器下运行的 Discourse 的反向代理。 Nginx Web 服务器将在 HTTP 和 HTTPS 端口下运行,所有客户端请求都将由 Nginx 处理。
在安装 Nginx 网络服务器之前,我们需要在系统上安装 EPEL 存储库。
yum -y install epel-release
现在使用以下 yum 命令从 EPEL 存储库安装 nginx。
yum -y install nginx
全部安装完成后,进入nginx配置目录/etc/nginx.conf。
cd /etc/nginx/
并使用 vim 创建一个新的附加 SSL 配置 ssl.conf。
vim ssl.conf
将以下 SSL 配置粘贴到那里。
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;
保存更改并退出编辑器。
接下来,为 Discourse 创建一个新的 nginx 虚拟主机文件 discourse.conf。
vim conf.d/discourse.conf
将以下配置粘贴到那里。
server {
listen 80; listen [::]:80;
server_name discourse.hakase-labs.co;
# Automatic Redirect HTTP to HTTPS Nginx
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name discourse.hakase-labs.co;
# SSL Configuration
ssl_certificate /etc/letsencrypt/live/discourse.hakase-labs.co/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/discourse.hakase-labs.co/privkey.pem;
include /etc/nginx/ssl.conf;
# Reverse Proxy Configuration
location / {
proxy_pass http://discourse.hakase-labs.co: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.co:2045/ https://discourse.hakase-labs.co;
}
}
保存并退出。
现在测试 nginx 配置并确保没有错误。然后重启 Nginx 服务。
nginx -t
systemctl restart nginx

作为 Discourse 容器反向代理的 Nginx 安装和配置已经完成。
第 5 步 - Discourse Web 安装程序
打开您的网络浏览器并访问您的讨论 URL,我的是:
http://discourse.hakase-labs.co
您将被重定向到 HTTPS 连接。

单击注册按钮。
现在我们需要创建一个新的管理员帐户。

输入您的管理员用户名和密码,然后单击注册。
您将获得用于电子邮件确认的页面。检查您的电子邮件收件箱,并确保您从 Discourse 论坛获得电子邮件配置,如下所示。

点击链接。
您将获得 Discourse 欢迎页面。

单击按钮单击此处激活您的帐户。现在您应该进入以下页面。

单击“稍后再说”按钮。
Discourse Forum已经安装好了,我们得到默认的首页,如下图。

你可以去 Admin Dashboard,你会得到 Discourse Admin Dashboard。

Discourse Forum 软件已经在 CentOS 7 服务器上安装了 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://meta.discourse.org/