Nginxリバースプロキシを使用してSSLでBuildbotを構成する方法
注:このチュートリアルは古いバージョンのBuildbotを対象としているため、現在のバージョンでは手順が機能しない場合があります。 この記事が更新されるまで、公式のBuildbotリバースプロキシ構成ドキュメントを追加で使用できます。
序章
Buildbotは、ソフトウェアのビルド、テスト、リリースのプロセスを自動化するためのPythonベースの継続的インテグレーションシステムです。 前のチュートリアルでは、 Buildbot をインストールし、 systemdユニットファイルを作成して、サーバーのinitシステムがプロセスを管理できるようにしました。 Buildbotには、ポート8010でリッスンする独自の組み込みWebサーバーが付属しており、SSLを使用してWebインターフェイスを保護するには、リバースプロキシを構成する必要があります。
このチュートリアルでは、SSLで保護されたブラウザリクエストをBuildbotのウェブインターフェースに送信するために、Nginxをリバースプロキシとして設定する方法を示します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- 少なくとも1GBのRAMを搭載した1台のUbuntu16.04サーバー、非ルートで構成
sudo
Ubuntu16.04初期サーバーセットアップガイドに従ってユーザーとファイアウォール
さらに、サーバーで次のチュートリアルを完了する必要があります。
- Ubuntu16.04にBuildbotをインストールする方法
- BuildbotのSystemdユニットファイルを作成する方法
- Ubuntu16.04にNginxをインストールする方法
- Ubuntu16.04でLet’sEncryptを使用してNginxを保護する方法。
これらの要件を完了すると、開始する準備が整います。
ステップ1-Nginxを構成する
前提条件のチュートリアルUbuntu16.04でLet’sEncryptを使用してNginxを保護する方法では、SSLを使用するようにNginxを構成しました。 /etc/nginx/sites-available/default
ファイル。 始める前に、作業構成ファイルのバックアップを作成します。
- sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.ssl.bak
次に、開きます default
リバースプロキシ設定を追加します。
- sudo nano /etc/nginx/sites-available/default
まず、SSLに特定のアクセスログとエラーログを追加します server
ブロック。
. . .
server {
# SSL Configuration
#
. . .
# include snippets/snakeoil.conf;
access_log /var/log/nginx/buildbot.access.log;
error_log /var/log/nginx/buildbot.error.log;
. . .
次に、プロキシ設定を構成します。
すべてのリクエストをBuildbotに送信するため、デフォルトを削除またはコメントアウトする必要があります try_files
書かれているように、リクエストがBuildbotに到達する前に404エラーを返す行。
注:ほとんどのアプリケーションとは異なり、Buildbotは、ドキュメントルートへのリクエストに対して200の応答を返します。 try_files
設定が有効になっています。 アセットがブラウザによってキャッシュされている場合、Buildbotが機能しているように見えることがあります。 キャッシュされたアセットがないと、空白のページが返されます。
次に、リバースプロキシ構成を追加します。 最初の行には、Nginxが提供するものが含まれています proxy_params
ホスト名、クライアントリクエストのプロトコル、クライアントIPアドレスなどの情報がログファイルで利用できるようにするため。 The proxy_pass
プロキシサーバーのプロトコルとアドレスを設定します。この場合は、ポート8010のローカルホストでアクセスされるBuildbotサーバーです。
. . .
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)設定 サーバー送信イベントは、クライアントがイベントをサブスクライブできるようにするWebSocketよりもシンプルでREST準拠のプロトコルです。 BuildbotSSEエンドポイントには独自のエンドポイントが必要です
proxy_pass
設定とオフにすることのメリットproxy_buffering
. -
WebSocket設定WebSocket は、WebサーバーとWebブラウザー間のメッセージング用のプロトコルです。 SSEプロトコルと同様に、独自のプロトコルが必要です
proxy_pass
設定。 ヘッダー情報を渡すには、追加の構成も必要です。 これらの設定の詳細については、NginxWebSocketプロキシドキュメントをご覧ください。
. . .
# 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
ファイルの最後に、次の行を追加します。
. . .
ssl_session_timeout 1440m;
完了したら、ファイルを保存して終了します。
注: BuildbotドキュメントのサンプルNginxファイルには、 ssl_session_cache
サイズは1,440メガバイトで、500万を超える接続が可能です。 メモリをあまり消費しない10メガバイトの設定を維持することを選択しました。 1メガバイトあたり約4000セッションを保存できるため、これは約40,000セッションを保存します。これは、ほとんどのユースケースに十分です。
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インターフェイスでルート相対リンクを使用し、ベースURLをで定義する必要があります。 master.cfg
リンクが正しく機能するようにします。
- sudo nano /home/buildbot/master/master.cfg
を見つけます buildbotURL
設定、変更 http
に https
、および変更 localhost
あなたのドメインに。 ポート仕様を削除します(:8010
)Nginxは、従来のWebポートに対して行われたリクエストをプロキシするためです。 重要:プロトコルは次のようにする必要があります https
定義には末尾のスラッシュが含まれている必要があります。
. . .
c['buildbotURL'] = "https://your.ssl.domain.name/"
. . .
また、ローカルループバックインターフェイスにバインドすることにより、マスターが他のホストで実行されているワーカーからの直接接続を受け入れないようにします。 コメントアウトするか、既存のプロトコル行を置き換えます。 c['protocols'] = {'pb': {'port': 9989}}
、次のように:
. . .
c['protocols'] = {"pb": {"port": "tcp:9989:interface=127.0.0.1"}}
. . .
完了したら、ファイルを保存して終了します。
HTTPSとドメイン名を使用しているので、 service_identityモジュールをインストールします。これは、証明書が意図した目的に対して有効であるかどうかを判断するためのツールを提供します。
- sudo -H pip install service_identity
この手順をスキップした場合でも、Buildbotは再起動しますが、systemdの出力に表示される「service_identityモジュールのインストールが機能していません」というUserWarningを発行します。 status
指図。
ステップ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.
次に、を使用してビルドマスターとワーカーを再起動します systemctl
、前のチュートリアルで構成しました。
まず、構成ファイルで構文エラーを確認します。
- 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、ビルドマスター、およびワーカーを再起動したので、リバースプロキシが期待どおりに機能していることを確認する準備が整いました。 経由でサイトにアクセスすると http
にリダイレクトする必要があります https
Buildbotサイトに正常にアクセスできます。
ウェブブラウザで「http:// your.ssl.domain.name 」と入力し、ドメインを次のように置き換えます your.ssl.domain.name
. Enterキーを押すと、URLは次のようになります。 https
ロケーションバーは、接続が安全であることを示している必要があります。
次に、少し時間を取って、Webソケットとサーバー送信イベントが適切にプロキシされていることを確認します。
まず、 /sse
ディレクトリ。 リダイレクトが正しく機能している場合、ブラウザは次のページを返す必要があります。 ページは引き続きロードを試みますが、これは正常な動作であることに注意してください。
次に、/wsディレクトリにアクセスします。 プロキシリダイレクトが正しくない場合は、 /ws
ディレクトリは 404 Not Found
エラー。 すべてが順調であれば、ブラウザは次のページを返すはずです。
最後に、組み込みのWebサーバーはすべてのインターフェイスをリッスンするため、IPアドレスでサーバーにアクセスするときに暗号化されていない接続を防ぐために、ポート8010への外部トラフィックを許可するルールを削除します。
- sudo ufw delete allow 8010
OutputRule updated
Rule updated (v6)
これで、Nginxをリバースプロキシとして構成し、ユーザーがを使用してBuildbotにアクセスできないようにしました。 HTTP
.
結論
このチュートリアルでは、Webインターフェイスを介して送信される資格情報やその他の情報を保護するために、Buildbotの組み込みWebサーバーへのリバースプロキシとしてNginxを構成しました。 Buildbotを初めて使用する場合は、Buildbotプロジェクトのクイックツアーガイドを参照することをお勧めします。 完全な継続的インテグレーションプロセスをセットアップする方法を学ぶ準備ができたら、 Ubuntu16.04でBuildbotとの継続的インテグレーションをセットアップする方法ガイドを確認してください。