Ubuntu 14.04でNginxの背後に談話をインストールする方法

前書き

http://www.discourse.org [Discourse]は、最新のWeb用に構築されたオープンソースのコミュニティディスカッションプラットフォームです。

このチュートリアルでは、Discourseを構成し、Nginxを使用してリバースプロキシの背後に移動し、https://letsencrypt.org/ [Let’s Encrypt]を使用してSSL証明書を構成する手順を説明します。 談話をリバースプロキシの背後に移動すると、ドロップレットで他のWebサイトを実行する柔軟性が得られます。

前提条件

始める前に、次のものがあることを確認してください。

  • Ubuntu 14.04ドロップレット(1 GB以上)

  • sudo特権を持つ非rootユーザー(https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[Ubuntu 14.04での初期サーバー設定]は、この設定方法を説明しています。 )

  • https://www.digitalocean.com/community/tutorials/how-to-install-discourse-on-ubuntu-14-04 [このチュートリアル]を使用してインストールされた談話

  • 完全に登録されたドメイン。 https://namecheap.com [Namecheap]で購入するか、http://www.freenom.com/en/index.html [Freenom]で無料で入手できます。

  • ドメイン名がドロップレットを指すように設定されていることを確認してください。 ヘルプが必要な場合は、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean [このチュートリアル]をご覧ください。

このチュートリアルのすべてのコマンドは、非rootユーザーとして実行する必要があります。 コマンドにルートアクセスが必要な場合は、先頭に「+ sudo +」が付きます。

ステップ1-談話の構成

Discourseがインストールされたので、Nginxの背後で動作するように設定する必要があります。

談話に変更する必要がある設定は1つだけなので、それをNginxの背後に移動できます。 構成ファイルを含むディレクトリに移動します。

cd /var/discourse

次に、変更する必要がある構成ファイルを開きます。

sudo nano containers/app.yml

矢印キーを使用して、 `+ expose +`セクションまでスクロールダウンし(上部近くにあります)、この行の最初のポート番号を変更します。

/var/discourse/containers/app.yml

...
## which TCP/IP ports should this container expose?
expose:
 - ":80"   # fwd host port 80   to container port 80 (http)
...

この番号はランダムにすることができ、他の人と共有しないでください。 不正アクセスをブロックすることもできますhttps://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-iptables-on-ubuntu-14-04[iptablesファイアウォールを使用ルール]必要に応じて。

テキストエディタを保存して終了します。

以下を実行して、構成の変更を有効にします。

sudo ./launcher rebuild app

この手順には時間がかかることがありますので、しばらくお待ちください。

Webサイトにアクセスすると、すべてが機能していることを確認できます。 Discourseのドメイン名( `+ http:// `など)はWebブラウザーのインターフェースをロードしなくなりますが、Discourseのように設定されたポート( ` http://など)を使用する場合はアクセス可能になります。 /:+ `(ドメイン名と、この手順で使用したポートに置き換えます)。

ステップ2-Nginxのインストールと構成

Disginがインストールされ、Nginxの背後で動作するように構成されたので、Nginxをインストールします。

UbuntuにNginxをインストールするには、次のコマンドを入力するだけでインストールが開始されます。

sudo apt-get install nginx

`+ http:// +`で古い談話URLを参照すると、デフォルトのNginx Webページが表示されます。

image:https://assets.digitalocean.com/articles/discouse_behind_nginx/default-webpage.png [デフォルトのNginxランディングページ]

これで結構です。 これをフォーラムに変更します。 まず、Nginxを停止しましょう。

sudo service nginx stop

次に、このデフォルトのWebページ設定を削除します-必要ありません:

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

次に、Discourseサーバーの新しい構成ファイルを作成します。このファイルには、「+ discourse +」という名前を付けます。

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

次の構成でコピーして貼り付けます。 「」をドメイン名に、「」を前の手順で使用したポートに置き換えます。

/ etc / nginx / sites-enabled / discourse

server {
       listen 80;
       server_name ;
       return 301 https://$request_uri;
}
server {
       listen 443 ssl spdy;
       server_name ;
       ssl_certificate /etc/letsencrypt/live//fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live//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://:/;
               proxy_read_timeout      90;
               proxy_redirect  http://:/ https://;
       }
}

この設定の機能は次のとおりです。

  • 最初のサーバーブロックはポート80で「++」ドメインをリッスンしており、すべてのリクエストをポート443でSSLにリダイレクトします。 これはオプションですが、すべてのユーザーのWebサイトでSSLを強制します。

  • 2番目のサーバーブロックはポート443にあり、ポート ++(この場合は談話)で実行されているWebサーバーにリクエストを渡します。 これは基本的にリバースプロキシを使用して、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  --agree-tos -d

次のように、かなり迅速に応答を取得する必要があります。

出力を暗号化しましょう

IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
  e-mails sent to .
- Congratulations! Your certificate and chain have been saved at
  /etc/letsencrypt/live//fullchain.pem. Your
  cert will expire on . 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 / +」に保存されていることがわかります。 これは、Nginxの構成が有効になったことを意味します。 また、有効期限がそれほど遠くないことにも気付くでしょう。 これは、Let’s Encrypt証明書では正常です。 更新するために必要なことは、まったく同じコマンドを再度実行することですが、90日ごとにログインするのは面白くないので、次のステップで自動化します。

ステップ4-Let’s Encrypt証明書の更新の自動化

証明書を初めて設定したので、証明書が自動的に更新されることを確認する必要があります。 Let’s Encrypt証明書は90日間のみ有効です。有効期限が切れると、ブラウザーでサイトへのすべての訪問者に警告が表示されます。 執筆時点では、自動更新はクライアントに組み込まれていませんが、スクリプトを設定して手動で更新することができます。

このコマンドで作成された出力は、トラブルシューティングのために `+ / var / log / certificate-renewal.log +`にあります。

ステップ5-Nginxの再起動

最後に、構成が完了しているはずです。 次のコマンドを実行して、Nginxを再起動します。

sudo service nginx restart

これで、「+ https:/// +」にアクセスすると、ウェブサイトがオンラインになり、Let’s Encryptで保護されます。これは、ほとんどのブラウザで緑色のロックとして表示されます。

結論

それでおしまい! これで、Nginxの背後に談話フォーラムが設定され、Let’s Encryptで最新のSSL標準で保護されました。

Related