前書き

Buildbotは、ソフトウェアのビルド、テスト、およびリリースのプロセスを自動化するためのPythonベースの継続的統合システムです。 前のチュートリアルでは、https://www.digitalocean.com/community/tutorials/how-to-install-buildbot-on-ubuntu-16-04 [installed Buildbot]およびhttps://www.digitalocean.com/ community / tutorials / how-to-create-systemd-unit-files-for-buildbot [created systemd Unit files]は、サーバーの初期化システムがプロセスを管理できるようにします。 Buildbotには、ポート8010でリッスンする独自の組み込みWebサーバーが付属しています。SSLを使用してWebインターフェースを保護するには、リバースプロキシを構成する必要があります。

このチュートリアルでは、SSLで保護されたブラウザーリクエストをBuildbotのウェブインターフェースに送信するために、Nginxをリバースプロキシとして設定する方法を示します。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • 少なくとも1 GBのRAMを搭載した1つのUbuntu 16.04サーバー。https://www.digitalocean.com/community/tutorials/initial-server-setupに従って非ルートの「+ sudo +」ユーザーとファイアウォールを使用して設定-with-ubuntu-16-04 [Ubuntu 16.04初期サーバーセットアップガイド]

さらに、サーバーで次のチュートリアルを完了する必要があります。

これらの要件を完了したら、開始する準備が整いました。

ステップ1-Nginxの構成

前提条件のチュートリアルでは、https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04 [Let’s EncryptでNginxを保護する方法Ubuntu 16.04]では、 `+ / etc / nginx / sites-available / default +`ファイルでSSLを使用するようにNginxを設定しました。 開始する前に、作業用構成ファイルのバックアップを作成します。

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.ssl.bak

次に、 `+ default`を開き、リバースプロキシ設定を追加します。

sudo nano /etc/nginx/sites-available/default

最初に、特定のアクセスログとエラーログをSSL `+ server +`ブロックに追加します。

/ etc / nginx / sites-available / default

. . .
server {
       # SSL Configuration
       #
. . .
        # include snippets/snakeoil.conf;


. . .

次に、プロキシ設定を構成します。

すべてのリクエストをBuildbotに送信するため、デフォルトの `+ try_files +`行を削除またはコメントアウトする必要があります。これは、書かれているように、リクエストがBuildbotに到達する前に404エラーを返します。

次に、リバースプロキシ構成を追加します。 最初の行には、Nginxが提供する「+ proxy_params 」が含まれており、ホスト名、クライアントリクエストのプロトコル、クライアントIPアドレスなどの情報をログファイルで確認できます。 ` proxy_pass +`は、プロキシされたサーバーのプロトコルとアドレスを設定します。これは、ポート8010のローカルホストでアクセスされるBuildbotサーバーです。

/ etc / nginx / sites-available / default

. . .
       location / {
               # First attempt to serve request as file, then
               # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;

               # Reverse proxy settings
               include proxy_params;
               proxy_pass http://localhost:8010;
            }
. . .

このスタンザの直後に、2つの追加の場所、「+ / sse 」と「 / ws +」を設定します。

  • サーバー送信イベント(SSE)設定 http://docs.buildbot.net/current/developer/www-server.html#server-sent-events [サーバー送信イベント]は、WebSocketよりもシンプルでRESTに準拠したプロトコルです。クライアントがイベントをサブスクライブできるようにします。 Buildbot SSEエンドポイントには独自の `+ proxy_pass `設定が必要で、 ` proxy_buffering +`をオフにすることでメリットが得られます。

  • * WebSocketの設定* WebSocketは、WebサーバーとWebブラウザー間のメッセージングのためのプロトコルです。 SSEプロトコルと同様に、独自の `+ proxy_pass +`設定が必要です。 ヘッダー情報を渡すには、追加の構成も必要です。 これらの設定の詳細については、http://nginx.org/en/docs/http/websocket.html [Nginx WebSocketプロキシドキュメント]をご覧ください。

/ etc / nginx / sites-available / default

. . .
       # Server sent event (sse) settings
       location /sse {
               proxy_buffering off;
               proxy_pass http://localhost:8010;
       }

       # Websocket settings
       location /ws {
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
             proxy_pass http://localhost:8010;
             proxy_read_timeout 6000s;
       }
. . .

これらの変更を行ったら、ファイルを保存して終了します。

最後に、 `+ ssl_params.conf `を編集し、 ` ssl_session_timeout +`をプロジェクトの推奨設定である1440分(24時間)に増やして、より長いビルドに対応します。

sudo nano /etc/nginx/snippets/ssl-params.conf

ファイルの最後に、次の行を追加します。

/etc/nginx/snippets/ssl-params.conf

. . .

完了したら、ファイルを保存して終了します。

Buildbotを構成するまでNginxを再起動しませんが、間違いを犯した場合に備えて構成をテストします。

sudo nginx -t

すべてが正常であれば、コマンドは以下を返します。

Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

そうでない場合は、テストに合格するまで報告されたエラーを修正します。

ステップ2-Buildbotの構成

Buildbotは、Webインターフェースでルート相対リンクを使用し、リンクが適切に機能するためには、 `+ master.cfg +`でベースURLを定義する必要があります。

sudo nano /home/buildbot/master/master.cfg

+ buildbotURL +`設定を見つけ、 `+ http +`を `+ https +`に変更し、 `+ localhost +`をドメインに変更します。 Nginxは従来のWebポートへのリクエストをプロキシするため、ポートの指定( `+:8010 +)を削除します。 *重要:*プロトコルは「+ https +」でなければならず、定義には末尾のスラッシュが含まれている必要があります。

/home/buildbot/master/master.cfg

. . .
c['buildbotURL'] = "http:///"
. . .

また、ローカルループバックインターフェースにバインドすることにより、マスターが他のホストで実行されているワーカーからの直接接続を受け入れないようにします。 既存のプロトコル行、「+ c [‘protocols’] = {‘pb’:{‘port’:9989}} + `」をコメントアウトするか、次のものに置き換えます。

/home/buildbot/master/master.cfg

. . .
c['protocols'] = {"pb": {"port": "tcp:9989:interface=127.0.0.1"}}
. . .

完了したら、ファイルを保存して終了します。

HTTPSとドメイン名を使用しているので、https://service-identity.readthedocs.io/en/stable/ [`+ service_identity +`モジュール]をインストールします。これは、証明書が有効であるかどうかを判断するツールを提供します意図された目的。

sudo -H pip install service_identity

このステップをスキップした場合、Buildbotは引き続き再起動しますが、systemdの「+ status +」コマンドの出力に表示される「service_identityモジュールの正常なインストールがありません」というUserWarningを発行します。

ステップ3-サービスの再起動

これで、Nginxを再起動する準備ができました。

sudo systemctl restart nginx

`+ systemctl `は出力を提供しないので、 ` status +`コマンドを使用してNginxが実行されていることを確認します。

sudo systemctl status nginx

出力は「アクティブ:アクティブ(実行中)」を強調表示し、次のようなもので終了する必要があります。

OutputMay 08 18:07:52 buildbot-server systemd[1]:
Started A high performance web server and a reverse proxy server.

次に、https://www.digitalocean.com/community/tutorials/how-to-create-systemd-unit-files-for-buildbotで設定した `+ systemctl +`を使用してbuildmasterとworkerを再起動します[前のチュートリアル]。

まず、構成ファイルの構文エラーを確認します。

sudo buildbot checkconfig /home/buildbot/master/
OutputConfig file is good!

エラーが報告されない場合は、サービスを再起動します。

sudo systemctl restart buildbot-master
sudo systemctl status buildbot-master

出力は「アクティブ:アクティブ(実行中)」を強調表示し、次のようなもので終了する必要があります。

OutputMay 10 21:28:05 buildbot-server systemd[1]: Started BuildBot master service.

次に、ワーカーを再起動します。

sudo systemctl restart buildbot-worker
sudo systemctl status buildbot-worker

繰り返しますが、出力は「アクティブ:アクティブ(実行中)」を強調表示し、この場合は次のようなもので終了します。

OutputMay 10 21:28:05 buildbot-server systemd[1]: Started BuildBot worker service.

Nginx、ビルドマスター、ワーカーを再起動したので、リバースプロキシが期待どおりに機能していることを確認する準備ができました。 + https`経由でサイトにアクセスすると、 + https`にリダイレクトされ、Buildbotサイトに正常に到達するはずです。

Webブラウザーで「http://」と入力し、ドメインを「+ your.ssl.domain.name」に置き換えます。 Enterキーを押すと、URLは「+ https +」で始まり、ロケーションバーに接続が安全であることを示す必要があります。 + image:https://assets.digitalocean.com/articles/buildbot-nginx-ubuntu-1604/buildbot-secure.png [安全なURLを使用したBuildbotホームページのスクリーンショット]

次に、少し時間をかけて、Web SocketイベントとServer Sent Eventsが適切にプロキシされていることを確認します。

まず、 `+ / sse +`ディレクトリにアクセスします。 リダイレクトが適切に機能している場合、ブラウザは次のページを返します。 ページは引き続きロードを試行しますが、これは通常の動作です。

image:https://assets.digitalocean.com/articles/buildbot-nginx-ubuntu-1604/buildbot-sse-redirect.png [Buildbot SSE page]

次に、/ wsディレクトリにアクセスします。 プロキシリダイレクトが正しくない場合、「+ / ws 」ディレクトリにアクセスすると「+404 Not Found +」エラーが返されます。 すべてが正常であれば、ブラウザは次のページを返します。 image:https://assets.digitalocean.com/articles/buildbot-nginx-ubuntu-1604/buildbot-ws-redirect.png [Buildbot WebSocket page]

最後に、ビルトインWebサーバーはすべてのインターフェイスでリッスンするため、IPアドレスでサーバーにアクセスするときに暗号化されていない接続を防ぐために、ポート8010への外部トラフィックを許可するルールを削除します。

sudo ufw delete allow 8010
OutputRule updated
Rule updated (v6)

Nginxをリバースプロキシとして設定し、ユーザーが `+ HTTP +`を使用してBuildbotにアクセスできないようにしました。

結論

このチュートリアルでは、Webインターフェースを介して送信される資格情報やその他の情報を保護するために、Buildbotの組み込みWebサーバーへのリバースプロキシとしてNginxを構成しました。 Buildbotを初めて使用する場合は、http://docs.buildbot.net/current/tutorial/tour.html [Buildbotプロジェクトのクイックツアー]ガイドをご覧ください。 完全な継続的統合プロセスを設定する方法を学習する準備ができたら、https://www.digitalocean.com/community/tutorials/how-to-set-up-continuous-integration-with-buildbot-onをご覧ください-ubuntu-16-04 [Ubuntu 16.04でBuildbotとの継続的インテグレーションを設定する方法]ガイド。