介绍
Discourse是专为现代网络建立了一个开源社区讨论平台。
本教程将引导您完成配置Discourse,与Nginx的移动背后都有一个反向代理,并为其配置与SSL证书的步骤, 让我们加密 。 在预留代理后移动Discourse使您能够灵活地在您的Droplet上运行其他网站。
先决条件
在开始之前,请确保您拥有以下内容:
- Ubuntu 14.04 Droplet(1 GB或更大)
- 使用sudo特权的非root用户( 与Ubuntu 14.04初始服务器设置介绍了如何设置起来。)
- 使用安装Discourse本教程
- 完全注册域名。 你可以购买一个Namecheap或得到一个免费Freenom 。
- 确保您的域名配置为指向您的Droplet。 看看这个教程 ,如果你需要帮助。
本教程中的所有命令都应以非root用户身份运行。 如果需要该命令的root访问权限,它会在前面加sudo
。
第1步 - 配置Discourse
现在你已经安装了Discourse,我们需要配置它在Nginx后面工作。
警告 :这会产生宕机你的Discourse论坛,直到我们配置Nginx的。 确保这是一个全新安装的Discourse或有备份服务器,直到配置完成。
只有一个设置,我们需要改变到Discourse,所以我们可以移动它在Nginx后面。 切换到包含配置文件的目录:
cd /var/discourse
然后,打开我们需要更改的配置文件:
sudo nano containers/app.yml
使用箭头键,向下滚动到expose
部分(应该是靠近顶部),并改变该行的第一个端口号:
...
## which TCP/IP ports should this container expose?
expose:
- "25654:80" # fwd host port 80 to container port 80 (http)
...
此号码可以是随机的,不应与其他人共享。 你甚至可以阻止它未经授权的访问与iptables防火墙规则 ,如果你愿意的话。
现在保存并退出文本编辑器。
通过运行以下命令启用配置更改:
sudo ./launcher rebuild app
此步骤可能需要一段时间,请耐心等待。
您可以访问您的网站来验证一切正常。 您的域名Discourse(如http:// discourse.example.com
)将不再加载在Web浏览器界面,但如果你只使用配置的Discourse如端口应该是访问http:/// discourse.example.com : 25654
(与您的域名和25654与你刚才在这个步骤中使用的端口替换discourse.example.com)。
第2步 - 安装和配置Nginx
现在,Discourse安装和配置工作在Nginx后面,是时候安装Nginx。
要在Ubuntu上安装Nginx,只需输入此命令,安装将开始:
sudo apt-get install nginx
浏览到您的旧网址的Discourse在http:// discourse.example.com
会显示默认的网页Nginx的:
这可以。 我们会将此更改为您的论坛。 首先,让我们停止Nginx:
sudo service nginx stop
然后,删除此默认网页配置 - 我们不需要它:
sudo rm /etc/nginx/sites-enabled/default
接下来,我们将让我们的Discourse服务器,我们将其命名为新的配置文件discourse
。
sudo nano /etc/nginx/sites-enabled/discourse
在以下配置中复制并粘贴。 替换discourse.example.com
与您的域名和25654
与你刚才在上一步中使用的端口:
server {
listen 80;
server_name discourse.example.com;
return 301 https://discourse.example.com$request_uri;
}
server {
listen 443 ssl spdy;
server_name discourse.example.com;
ssl_certificate /etc/letsencrypt/live/discourse.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/discourse.example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://discourse.example.com:25654/;
proxy_read_timeout 90;
proxy_redirect http://discourse.example.com:25654/ https://discourse.example.com;
}
}
这里是这个配置:
- 第一台服务器块被监听的
discourse.example.com
端口80上的域,并重定向端口443上的所有请求SSL这是可选的,但它迫使您的网站上所有用户的SSL。 - 第二服务器块是在端口443上,并传递请求在端口运行的Web服务器
25654
(在此情况下,Discourse)。 这本质上使用反向代理向您的用户发送Discourse页面并通过SSL回传。
您可能已经注意到我们在引用一些证书/etc/letsencrypt
。 在下一步中,我们将在重新启动Nginx之前生成它们。
第3步 - 生成SSL证书
为了生成SSL证书,我们将首先安装Let's Encrypt的ACME客户端。 这个软件允许我们生成SSL证书。
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
然后去letsencrypt
目录:
cd /opt/letsencrypt/
安装Let's Encrypt第一次需要的包:
./letsencrypt-auto --help
现在,我们可以通过运行生成您的证书(替换您的电子邮件地址和域名):
./letsencrypt-auto certonly --standalone --email sammy@example.com --agree-tos -d discourse.example.com
备注:咱们加密只会对域名发放证书。 如果您尝试使用IP地址,您将收到错误。 如果您需要域名,请查看先决条件部分中的链接。
你应该得到一个相当快的反应,类似于:
IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to sammy@example.com.
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/discourse.example.com/fullchain.pem. Your
cert will expire on 2016-04-26. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.
你会注意到它说你的证书被保存在/etc/letsencrypt/live/ discourse.example.com
。 这意味着我们的Nginx配置现在有效。 你也会注意到,过期日期不会太远。 这是正常的让我们加密证书。 所有你需要做的更新是再次运行完全相同的命令,但每90天登录是没有乐趣,所以我们将在下一步自动化。
第4步 - 自动化让我们加密证书续订
现在我们第一次设置了我们的证书,我们应该确保他们自动续订。 让我们加密证书的有效期为90天,之后它们将过期,并在浏览器中向您网站的所有访问者显示警告。 在写入时,自动更新不会内置到客户端,但我们可以设置一个脚本来手动更新它们。
请参阅设置自动更新的步骤如何使用让我们在Ubuntu 14.04加密安全Nginx的有关设置cron作业来自动更新您的证书的详细信息。
通过这个命令生成的任何输出将达到/var/log/certificate-renewal.log
进行故障排除。
第5步 - 重新启动Nginx
最后,我们的配置应该是完整的。 通过运行以下命令重新启动Nginx:
sudo service nginx restart
现在,如果你浏览到https:// discourse.example.com /
你的网站应该是在线和咱们加密,显示为大多数的浏览器一个绿色的锁保护。
结论
而已! 你现在有一个Discourse论坛设置在Nginx后面,使用Let's Encrypt的最新SSL标准。