如何在 Ubuntu 14.04 上的 Nginx 后面安装 Discourse

介绍

Discourse是为现代网络构建的开源社区讨论平台。

本教程将引导您通过配置 Discourse 的步骤,通过 Nginx 将其移动到反向代理程序后面,并通过 Let's Encrypt为其配置 SSL 证书。

前提条件

在我们开始之前,请确保您有以下内容:

本教程中的所有命令都应该作为非根用户运行,如果命令需要 root 访问,则将被sudo提前。

步骤 1 - 配置演讲

现在你已经安装了 Discourse,我们需要将其配置为在 Nginx 后面工作。

<$>[warning] ** Warning** :在我们配置 Nginx 之前,您的 Discourse 论坛会出现停机时间,请确保这是一个新的 Discourse 安装或备份服务器,直到配置完成。

只有一個設定,我們需要改變為Discourse,以便我們可以將它移到 Nginx 後面。

1cd /var/discourse

然后,打开我们需要更改的配置文件:

1sudo nano containers/app.yml

使用箭头键,向下滚动到曝光部分(它应该靠近顶部),并更改此行上的第一个端口号:

1[label /var/discourse/containers/app.yml]
2...
3## which TCP/IP ports should this container expose?
4expose:
5  - "25654:80"   # fwd host port 80 to container port 80 (http)
6...

这个数字可以是随机的,不应该与他人共享,如果你愿意,你甚至可以阻止未经授权的访问 使用 iptables 防火墙规则

现在保存并退出文本编辑器。

通过运行启用配置更改:

1sudo ./launcher rebuild app

这一步可能需要一段时间,所以请耐心。

您的Discourse域名(如http://discourse.example.com)将不再在网页浏览器中加载接口,但如果您使用仅为Discourse配置的端口,如http:///discourse.example.com:25654(用您的域名替换discourse.example.com和25654以您在这个步骤中刚刚使用的端口)。

步骤 2:安装和配置 Nginx

现在,Discourse 已安装并配置为在 Nginx 后面工作,是时候安装 Nginx 了。

要在 Ubuntu 上安装 Nginx,只需输入这个命令,安装将开始:

1sudo apt-get install nginx

浏览到您的旧语音URL在http://discourse.example.com`将显示默认的Nginx网页:

Default Nginx landing page

这是好事,我们现在将更改你的论坛,首先,让我们停止 Nginx:

1sudo service nginx stop

然后,删除此默认网页配置 - 我们不需要它:

1sudo rm /etc/nginx/sites-enabled/default

接下来,我们将为我们的Discourse服务器创建一个新的配置文件,我们将其命名为Discourse

1sudo nano /etc/nginx/sites-enabled/discourse

在以下配置中复制并粘贴. 用您的域名替换discourse.example.com25654以您在上一步中刚刚使用的端口:

 1[label /etc/nginx/sites-enabled/discourse]
 2server {
 3        listen 80;
 4        server_name discourse.example.com;
 5        return 301 https://discourse.example.com$request_uri;
 6}
 7server {
 8        listen 443 ssl spdy; 
 9        server_name discourse.example.com;
10        ssl_certificate /etc/letsencrypt/live/discourse.example.com/fullchain.pem;
11        ssl_certificate_key /etc/letsencrypt/live/discourse.example.com/privkey.pem;
12        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
13        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';
14        ssl_prefer_server_ciphers on;
15        location / {
16                proxy_pass http://discourse.example.com:25654/;
17                proxy_read_timeout 90;
18                proxy_redirect http://discourse.example.com:25654/ https://discourse.example.com;
19        }
20}

这是这个 config 所做的事情:

*第一个服务器块在端口80上的discourse.example.com域上收听,并将所有请求重定向到SSL在端口443上,这是可选的,但它强迫所有用户在您的网站上使用SSL。 *第二个服务器块在端口443上,并将请求转移到运行在端口25654上的Web服务器(在这种情况下,Discourse)。

您可能已经注意到我们正在引用某些证书在 `/etc/letsencrypt. 在下一步,我们将在重新启动 Nginx 之前生成这些证书。

步骤三:生成SSL证书

要生成SSL证书,我们首先会安装Let's Encrypt的ACME客户端,这款软件允许我们生成SSL证书。

1sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

然后进入letsencrypt目录:

1cd /opt/letsencrypt/

首次安装 Let's Encrypt 所需的软件包:

1./letsencrypt-auto --help

现在我们可以通过运行生成您的证书(用您的电子邮件地址和域名替换):

1./letsencrypt-auto certonly --standalone --email [email protected] --agree-tos -d discourse.example.com

<$>[注] 注: Let's Encrypt 只会为域名发行证书. 如果您尝试使用 IP 地址,您将收到错误消息。

你应该得到一个相当快的答案,类似于这个:

 1[label Let's Encrypt Output]
 2IMPORTANT NOTES:
 3 - If you lose your account credentials, you can recover through
 4   e-mails sent to [email protected].
 5 - Congratulations! Your certificate and chain have been saved at
 6   /etc/letsencrypt/live/discourse.example.com/fullchain.pem. Your
 7   cert will expire on 2016-04-26. To obtain a new version of the
 8   certificate in the future, simply run Let's Encrypt again.
 9 - Your account credentials have been saved in your Let's Encrypt
10   configuration directory at /etc/letsencrypt. You should make a
11   secure backup of this folder now. This configuration directory will
12   also contain certificates and private keys obtained by Let's
13   Encrypt so making regular backups of this folder is ideal.

你会注意到它说你的证书被保存到 /etc/letsencrypt/live/discourse.example.com. 这意味着我们的 Nginx 配置现在是有效的. 你还会注意到截止日期并不太远。这在 Let's Encrypt 证书中是正常的。你只需要更新的是再次运行相同的命令,但每隔 90 天登录并非有趣,所以我们将在下一步自动化。

步骤 4 – 自动更新 Let’s Encrypt 证书

现在我们第一次设置了我们的证书,我们应该确保它们自动更新。让我们加密证书仅有效90天,之后它们将到期,并在浏览器中向您的网站的所有访问者显示警告。

请参阅 How To Secure Nginx with Let's Encrypt on Ubuntu 14.04设置自动更新步骤,以获取有关如何自动更新证书的详细信息。

任何由此命令创建的输出都将在/var/log/certificate-renewal.log进行故障排除。

第5步:重新启动 Nginx

最后,我们的配置应该是完整的。通过运行此命令重新启动 Nginx:

1sudo service nginx restart

现在,如果您浏览到 https://discourse.example.com/ 您的网站应该在线,并使用 Let's Encrypt 加密,在大多数浏览器中显示为绿色锁。

结论

你现在有一个讨论论坛设置在 Nginx 后面,通过 Let's Encrypt 以最新的 SSL 标准保护。

Published At
Categories with 技术
Tagged with
comments powered by Disqus