:このチュートリアルは古いバージョンのBuildbotを対象としているため、現在のバージョンでは手順が機能しない場合があります。 この記事が更新されるまで、公式のBuildbotリバースプロキシ構成ドキュメントを追加で使用できます。

序章

Buildbotは、ソフトウェアのビルド、テスト、リリースのプロセスを自動化するためのPythonベースの継続的インテグレーションシステムです。 前のチュートリアルでは、 Buildbot をインストールし、 systemdユニットファイルを作成して、サーバーのinitシステムがプロセスを管理できるようにしました。 Buildbotには、ポート8010でリッスンする独自の組み込みWebサーバーが付属しており、SSLを使用してWebインターフェイスを保護するには、リバースプロキシを構成する必要があります。

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

前提条件

このチュートリアルに従うには、次のものが必要です。

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

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

ステップ1-Nginxを構成する

前提条件のチュートリアルUbuntu16.04でLet’sEncryptを使用してNginxを保護する方法では、SSLを使用するようにNginxを構成しました。 /etc/nginx/sites-available/default ファイル。 始める前に、作業構成ファイルのバックアップを作成します。

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

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

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

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

/ etc / nginx / sites-available / default
. . . 
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サーバーです。

/ 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)設定 サーバー送信イベントは、クライアントがイベントをサブスクライブできるようにするWebSocketよりもシンプルでREST準拠のプロトコルです。 BuildbotSSEエンドポイントには独自のエンドポイントが必要です proxy_pass 設定とオフにすることのメリット proxy_buffering.

  • WebSocket設定WebSocket は、WebサーバーとWebブラウザー間のメッセージング用のプロトコルです。 SSEプロトコルと同様に、独自のプロトコルが必要です proxy_pass 設定。 ヘッダー情報を渡すには、追加の構成も必要です。 これらの設定の詳細については、NginxWebSocketプロキシドキュメントをご覧ください。

/ 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時間)に変更します。

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

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

/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を再起動しませんが、間違いがあった場合に備えて、構成をテストします。

  1. sudo nginx -t

すべてが順調である場合、コマンドは次を返します。

Output
nginx: 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 リンクが正しく機能するようにします。

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

を見つけます buildbotURL 設定、変更 httphttps 、および変更 localhost あなたのドメインに。 ポート仕様を削除します(:8010)Nginxは、従来のWebポートに対して行われたリクエストをプロキシするためです。 重要:プロトコルは次のようにする必要があります https 定義には末尾のスラッシュが含まれている必要があります。

/home/buildbot/master/master.cfg
 . . .
 c['buildbotURL'] = "https://your.ssl.domain.name/"
 . . .

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

/home/buildbot/master/master.cfg
. . .
c['protocols'] = {"pb": {"port": "tcp:9989:interface=127.0.0.1"}}
. . .

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

HTTPSとドメイン名を使用しているので、 service_identityモジュールをインストールします。これは、証明書が意図した目的に対して有効であるかどうかを判断するためのツールを提供します。

  1. sudo -H pip install service_identity

この手順をスキップした場合でも、Buildbotは再起動しますが、systemdの出力に表示される「service_identityモジュールのインストールが機能していません」というUserWarningを発行します。 status 指図。

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

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

  1. sudo systemctl restart nginx

以来 systemctl 出力を提供しません、私たちはそれを使用します status Nginxが実行されていることを確認するコマンド。

  1. sudo systemctl status nginx

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

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

次に、を使用してビルドマスターとワーカーを再起動します systemctl前のチュートリアルで構成しました。

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

  1. sudo buildbot checkconfig /home/buildbot/master/
Output
Config file is good!

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

  1. sudo systemctl restart buildbot-master
  2. sudo systemctl status buildbot-master

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

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

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

  1. sudo systemctl restart buildbot-worker
  2. sudo systemctl status buildbot-worker

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

Output
May 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への外部トラフィックを許可するルールを削除します。

  1. sudo ufw delete allow 8010
Output
Rule updated Rule updated (v6)

これで、Nginxをリバースプロキシとして構成し、ユーザーがを使用してBuildbotにアクセスできないようにしました。 HTTP.

結論

このチュートリアルでは、Webインターフェイスを介して送信される資格情報やその他の情報を保護するために、Buildbotの組み込みWebサーバーへのリバースプロキシとしてNginxを構成しました。 Buildbotを初めて使用する場合は、Buildbotプロジェクトのクイックツアーガイドを参照することをお勧めします。 完全な継続的インテグレーションプロセスをセットアップする方法を学ぶ準備ができたら、 Ubuntu16.04でBuildbotとの継続的インテグレーションをセットアップする方法ガイドを確認してください。