序章

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

このチュートリアルでは、Discourseを構成し、Nginxを使用してリバースプロキシの背後に移動し、 Let’sEncryptを使用してSSL証明書を構成する手順について説明します。 リザーブプロキシの背後にあるDiscourseを移動すると、Dropletで他のWebサイトを実行する柔軟性が得られます。

前提条件

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

  • Ubuntu 14.04ドロップレット(1 GB以上)
  • sudo権限を持つroot以外のユーザー( Ubuntu 14.04 を使用した初期サーバーセットアップでは、これをセットアップする方法について説明しています。)
  • このチュートリアルを使用してインストールされた談話
  • 完全に登録されたドメイン。 Namecheap で購入するか、Freenomで無料で入手できます。
  • ドロップレットを指すようにドメイン名が構成されていることを確認してください。 ヘルプが必要な場合は、このチュートリアルを確認してください。

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

ステップ1—談話の構成

Discourseをインストールしたので、Nginxの背後で機能するようにDiscourseを構成する必要があります。

警告:これにより、Nginxを構成するまで、Discourseフォーラムでダウンタイムが発生します。 これがDiscourseの新規インストールであることを確認するか、構成が完了するまでバックアップサーバーを用意してください。

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

  1. cd /var/discourse

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

  1. sudo nano containers/app.yml

矢印キーを使用して、exposeセクション(上部にあるはずです)まで下にスクロールし、次の行の最初のポート番号を変更します。

/var/discourse/containers/app.yml
...
## which TCP/IP ports should this container expose?
expose:
  - "25654:80"   # fwd host port 80   to container port 80 (http)
...

この番号はランダムにすることができ、他の人と共有しないでください。 必要に応じて、iptablesファイアウォールルールを使用してへの不正アクセスをブロックすることもできます。

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

次のコマンドを実行して、構成の変更を有効にします。

  1. sudo ./launcher rebuild app

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

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

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

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

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

  1. sudo apt-get install nginx

http://discourse.example.comで古い談話URLを参照すると、デフォルトのNginxWebページが表示されます。

Default Nginx landing page

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

  1. sudo service nginx stop

次に、このデフォルトのWebページ構成を削除します—必要ありません。

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

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

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

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

/ etc / nginx / sites-enabled / discourse
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;
        }
}

この構成の機能は次のとおりです。

  • 最初のサーバーブロックは、ポート80のdiscourse.example.comドメインでリッスンしており、すべての要求をポート443のSSLにリダイレクトします。 これはオプションですが、すべてのユーザーに対してWebサイトでSSLを強制します。
  • 2番目のサーバーブロックはポート443にあり、ポート25654(この場合はDiscourse)で実行されているWebサーバーに要求を渡します。 これは基本的にリバースプロキシを使用してDiscourseページをユーザーに送信し、SSLを介して送り返します。

/etc/letsencryptでいくつかの証明書を参照していることに気付いたかもしれません。 次のステップでは、Nginxを再起動する前にそれらを生成します。

ステップ3—SSL証明書の生成

SSL証明書を生成するには、最初にLet’sEncryptのACMEクライアントをインストールします。 このソフトウェアを使用すると、SSL証明書を生成できます。

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

次に、letsencryptディレクトリに移動します。

  1. cd /opt/letsencrypt/

Let’sEncryptに必要なパッケージを初めてインストールします。

  1. ./letsencrypt-auto --help

これで、次のコマンドを実行して証明書を生成できます(メールアドレスとドメイン名に置き換えてください)。

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

注: Let’s Encryptは、ドメイン名の証明書のみを発行します。 IPアドレスを使用しようとすると、エラーが発生します。 ドメイン名が必要な場合は、「前提条件」セクションのリンクを確認してください。

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

出力を暗号化しましょう
IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to [email protected].
 - 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構成が有効になったことを意味します。 また、有効期限がそれほど遠くないことに気付くでしょう。 これは、Let’sEncrypt証明書では正常です。 更新するために必要なのは、まったく同じコマンドを再度実行することだけですが、90日ごとにログインするのは楽しいことではないため、次のステップで自動化します。

ステップ4—Let’sEncrypt証明書の更新を自動化する

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

証明書を自動的に更新するcronジョブの設定の詳細については、 Ubuntu14.04でLet’sEncryptを使用してNginxを保護する方法の自動更新の設定の手順を参照してください。

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

ステップ5—Nginxを再起動する

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

  1. sudo service nginx restart

これで、https://discourse.example.com/を参照すると、Webサイトがオンラインになり、Let’s Encryptで保護されているはずです。これは、ほとんどのブラウザーで緑色のロックとして表示されます。

結論

それでおしまい! これで、Nginxの背後にDiscourseフォーラムが設定され、Let’sEncryptを使用して最新のSSL標準で保護されました。