如何在Ubuntu 16.04上使用Nginx安装语篇论坛
Discourse是一个免费的开源软件,用于创建互联网论坛社区和邮件列表。 它创建于2013年,用Ruby和Javascript编程语言编写。 Discourse论坛软件已被许多组织使用,包括Codeacademy,Udacity,Twitter开发者和Docker社区论坛。
在本教程中,我们将逐步向您展示如何在Ubuntu 16.04上使用Nginx Web服务器安装和配置Discourse Forum。 具体来说,我们将向您展示如何安装Discourse Forum Software,将Nginx配置为Discourse应用程序的反向代理,并使用Letsencrypt提供的免费SSL来保护Discourse论坛软件。
我们将要做什么
- 在Ubuntu 16.04上安装Docker
- 安装和配置Discourse论坛软件
- 在Ubuntu 16.04上生成SSL Letsencrypt
- 安装并配置Nginx作为Discourse的反向代理
- DiscourseWeb安装程序
- Discourse附加配置
先决条件
- 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论坛
在这一步中,我们将安装和配置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服务器处理。
所以我们需要改变码头端口映射配置。 Discourse容器只有HTTP连接,主机将打开新的端口“2045”并映射到容器端口80。
取消对HTTPS行的注释并使用新端口“2045”更改HTTP行。
expose:
- "2045:80" # http
# - "443:443" # https
Discourse域名配置
在“DISCOURSE_HOSTNAME”行中输入您自己的域名,以便安装在话题中,如下所示。
DISCOURSE_HOSTNAME: 'discourse.hakase-labs.me'
然后在“DISCOURSE_DEVELOPER_EMAIL”行中输入您的电子邮件地址。
DISCOURSE_DEVELOPER_EMAILS: 'hakase@hakase-labs.me'
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: postmaster@hakase-labs.me
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论坛软件已安装在主机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域名“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编辑器创建新的“Discourse”文件。
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网络安装程序
打开您的网络浏览器并访问DiscourseURL。
http://discourse.hakase-labs.me
你将被重定向到HTTP安全连接。 点击“注册”按钮创建一个新的管理员用户。
现在输入您的管理员用户名和密码,然后点击“注册”。
你会得到一个关于你的管理员用户激活的新电子邮件确认。
以下是Discourse帐户确认的示例电子邮件。 点击链接确认并激活管理员帐户。
你应该得到如下所示的Discourse页面。 点击“点击这里激活您的帐户”按钮。
现在你可以配置你自己的Discourse论坛。 点击“下一步”按钮,你需要配置13步的Discourse论坛。 或者稍后点击“也许稍后”进行配置。
下面显示的是在Nginx Web服务器上安装的Discourse Forum和Ubuntu 16.04上的HTTPS。
以下是我的Discourse Admin Dashboard。
Discourse论坛已经与Nginx一起安装在Ubuntu 16.04服务器上作为反向代理。
第6步 - Discourse附加配置
在安装Discourse的过程中,您可能会遇到一个问题,即您没有得到管理员用户激活的电子邮件确认。
要排序的问题,请确保您有配置app.yml上正确的SMTP帐户。 或者您可以从您的服务器手动激活管理员帐户。
要手动激活管理员帐户,请转至“/ var / discourse”目录。
cd /var/discourse
现在使用下面的命令访问Discourse容器。
./launcher enter app
并激活第一个管理员用户使用rails命令如下。
铁轨c
u = User.last
u.admin = true
u.activate
u.save
现在,您可以使用您的用户名和密码登录到Discourse论坛。