Thứ tư, 17/05/2017 | 00:00 GMT+7

Cách cấu hình Buildbot với SSL bằng Nginx Reverse Proxy

Lưu ý : Hướng dẫn này bao gồm version Buildbot cũ hơn, do đó, hướng dẫn có thể không hoạt động trên các version hiện tại. Cho đến khi bài viết này được cập nhật, bạn có thể sử dụng thêm tài liệu cấu hình Reverse Proxy Buildbot chính thức .


Buildbot là một hệ thống tích hợp liên tục dựa trên Python để tự động hóa các quy trình xây dựng, kiểm tra và phát hành phần mềm. Trong các hướng dẫn trước, ta đã cài đặt Buildbottạo các file Đơn vị systemd để cho phép hệ thống init của server quản lý các quy trình. Buildbot đi kèm với web server tích hợp của riêng nó lắng nghe trên cổng 8010 và để bảo mật giao diện web với SSL, ta cần cấu hình Reverse Proxy .

Trong hướng dẫn này, ta sẽ trình bày cách cấu hình Nginx làm Reverse Proxy để hướng các yêu cầu trình duyệt được bảo mật SSL tới giao diện web của Buildbot.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

Ngoài ra, bạn cần hoàn thành các hướng dẫn sau trên server :

Khi bạn đã hoàn thành các yêu cầu này, bạn đã sẵn sàng để bắt đầu.

Bước 1— Cấu hình Nginx

Trong hướng dẫn yêu cầu , Cách bảo mật Nginx với Let's Encrypt trên Ubuntu 16.04 , ta đã cấu hình Nginx để sử dụng SSL trong file /etc/nginx/sites-available/default . Trước khi bắt đầu, ta sẽ tạo một bản backup file cấu hình hoạt động của bạn :

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

Tiếp theo, ta sẽ mở default và thêm cài đặt Reverse Proxy của ta .

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

Trước tiên, ta sẽ thêm các bản ghi lỗi và truy cập cụ thể vào khối server SSL.

/ 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; . . .          

Tiếp theo, ta sẽ cấu hình cài đặt proxy.

Vì ta đang gửi tất cả các yêu cầu tới Buildbot, ta cần xóa hoặc comment dòng try_files mặc định, như đã viết, sẽ trả về lỗi 404 trước khi yêu cầu đến được Buildbot.

Lưu ý: Không giống như hầu hết các ứng dụng, Buildbot sẽ trả lại 200 phản hồi cho một yêu cầu tới root tài liệu với cài đặt try_files được bật. Nếu nội dung được trình duyệt lưu vào bộ nhớ cache, Buildbot có thể đang hoạt động. Nếu không có nội dung được lưu trong bộ nhớ cache, nó sẽ trả về một trang trống.

Sau đó, ta sẽ thêm cấu hình Reverse Proxy . Dòng đầu tiên bao gồm proxy_params Nginx cung cấp đảm bảo thông tin như tên server , giao thức của yêu cầu client và địa chỉ IP client sẽ có sẵn trong file log của ta . proxy_pass đặt giao thức và địa chỉ của server được ủy quyền, trong trường hợp của ta là server Buildbot được truy cập trên localhost trên cổng 8010.

/ 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;              } . . .   

Ngay sau khổ thơ này, ta sẽ cấu hình hai vị trí bổ sung, /sse/ws :

  • Cài đặt sự kiện do server gửi (SSE) Sự kiện đã gửi của server là một giao thức đơn giản hơn, tuân theo REST hơn so với WebSockets cho phép client đăng ký sự kiện. Điểm cuối Buildbot SSE yêu cầu cài đặt proxy_pass riêng và hưởng lợi từ việc tắt proxy_buffering .

  • Cài đặt WebSocket WebSocket là một giao thức để nhắn tin giữa web server và trình duyệt web. Giống như giao thức SSE, nó yêu cầu cài đặt proxy_pass riêng. Cấu hình bổ sung cũng được yêu cầu để chuyển thông tin tiêu đề. Bạn có thể tìm hiểu thêm các cài đặt này từ tài liệu proxy 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;         }  . . . 

Khi bạn đã thực hiện những thay đổi này, hãy lưu và thoát khỏi file .

Cuối cùng, ta sẽ chỉnh sửa ssl_params.conf và tăng ssl_session_timeout lên cài đặt đề xuất của dự án là 1440 phút (24 giờ) để phù hợp với các bản dựng dài hơn:

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

Ở cuối file , thêm dòng sau:

/etc/nginx/snippets/ssl-params.conf
 . . .  ssl_session_timeout 1440m; 

Khi bạn hoàn tất, hãy lưu và thoát khỏi file .

Lưu ý: Tệp Nginx mẫu của tài liệu Buildbot bao gồm một dòng cài đặt kích thước ssl_session_cache thành 1.440 megabyte, cho phép hơn 5 triệu kết nối. Ta đã chọn giữ lại cài đặt ít tốn bộ nhớ hơn là 10 megabyte. Mỗi megabyte có thể lưu trữ khoảng 4000 phiên, vì vậy điều này sẽ lưu trữ khoảng 40.000 phiên, đủ cho hầu hết các trường hợp sử dụng.

Ta sẽ không khởi động lại Nginx cho đến khi ta đã cấu hình Buildbot, nhưng ta sẽ kiểm tra cấu hình của bạn ngay bây giờ trong trường hợp ta mắc phải bất kỳ lỗi nào:

  • sudo nginx -t

Nếu tất cả đều ổn, lệnh sẽ trả về:

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

Nếu không, hãy sửa các lỗi được báo cáo cho đến khi kiểm tra vượt qua.

Bước 2 - Cấu hình Buildbot

Buildbot sử dụng các liên kết tương đối root trong giao diện web của nó và cần xác định URL cơ sở trong master.cfg để các liên kết hoạt động bình thường.

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

Tìm cài đặt buildbotURL , thay đổi http thành https và thay đổi server localhost thành domain của bạn. Loại bỏ thông số kỹ thuật cổng ( :8010 ) vì Nginx sẽ yêu cầu proxy được thực hiện cho các cổng web thông thường. Quan trọng: Giao thức phải là https và định nghĩa phải chứa dấu gạch chéo.

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

Ta cũng sẽ đảm bảo server sẽ không chấp nhận các kết nối trực tiếp từ các server chạy trên server khác bằng cách liên kết với giao diện loopback local . Comment hoặc thay thế dòng giao thức hiện có, c['protocols'] = {'pb': {'port': 9989}} , bằng dòng sau:

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

Khi bạn hoàn tất, hãy lưu và thoát khỏi file .

Bây giờ ta đang sử dụng HTTPS và một domain , ta sẽ cài đặt mô-đun service_identity , mô-đun này cung cấp các công cụ để xác định certificate có hợp lệ cho mục đích đã định.

  • sudo -H pip install service_identity

Nếu ta bỏ qua bước này, Buildbot sẽ vẫn khởi động lại, nhưng sẽ đưa ra Cảnh báo user “Bạn không có cài đặt hoạt động của module service_identity” sẽ hiển thị trong kết quả của lệnh status của systemd.

Bước 3 - Khởi động lại dịch vụ

Bây giờ ta đã sẵn sàng khởi động lại Nginx:

  • sudo systemctl restart nginx

systemctl không cung cấp kết quả , ta sẽ sử dụng lệnh status của nó đảm bảo Nginx đang chạy.

  • sudo systemctl status nginx

Đầu ra sẽ đánh dấu “Active: active (đang chạy) và kết thúc bằng thông tin như :

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

Tiếp theo, ta sẽ khởi động lại buildmaster và worker bằng systemctl mà ta đã cấu hình trong hướng dẫn trước .

Trước tiên, hãy kiểm tra file cấu hình để tìm lỗi cú pháp:

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

Nếu không có lỗi nào được báo cáo, hãy khởi động lại dịch vụ:

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

Đầu ra sẽ đánh dấu "Active: active (đang chạy) và kết thúc bằng thông tin như :

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

Tiếp theo, ta sẽ khởi động lại worker:

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

, kết quả sẽ đánh dấu "Active: hoạt động (đang chạy) và trong trường hợp này kết thúc bằng thông tin như :

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

Bây giờ ta đã khởi động lại Nginx, administrator xây dựng và nhân viên, ta đã sẵn sàng xác minh Reverse Proxy đang hoạt động như mong đợi. Khi ta truy cập trang web qua http ta sẽ được chuyển hướng đến https và truy cập thành công trang Buildbot của ta .

Trong trình duyệt web , hãy nhập "http: // your.ssl.domain.name ", thay thế domain của bạn cho your.ssl.domain.name . Sau khi bạn nhấn enter, URL sẽ bắt đầu bằng https và thanh vị trí sẽ cho biết kết nối an toàn.
Ảnh chụp màn hình trang chủ Buildbot với URL an toàn

Tiếp theo, ta sẽ dành một chút thời gian và thấy rằng Ổ cắm web và Sự kiện do server gửi đang được ủy quyền đúng cách.

Đầu tiên, hãy truy cập folder /sse . Nếu chuyển hướng hoạt động bình thường, trình duyệt sẽ trả về trang sau. Lưu ý trang sẽ tiếp tục tải và đây là hành vi bình thường:

Trang Buildbot SSE

Tiếp theo, hãy truy cập folder / ws. Nếu chuyển hướng proxy không đúng, việc truy cập folder /ws sẽ trả về lỗi 404 Not Found . Nếu tất cả đều ổn, trình duyệt sẽ trả về trang sau:
Trang Buildbot WebSocket

Cuối cùng, vì web server tích hợp lắng nghe trên tất cả các giao diện, ta sẽ xóa luật cho phép lưu lượng truy cập bên ngoài vào cổng 8010 để ngăn các kết nối không được mã hóa khi truy cập server bằng địa chỉ IP:

  • sudo ufw delete allow 8010
Output
Rule updated Rule updated (v6)

Hiện ta đã cấu hình Nginx làm Reverse Proxy và ngăn user truy cập Buildbot bằng HTTP .

Kết luận

Trong hướng dẫn này, ta đã cấu hình Nginx làm Reverse Proxy cho web server tích hợp sẵn của Buildbot để bảo mật thông tin đăng nhập của ta và thông tin khác được truyền qua giao diện Web. Nếu bạn chưa quen với Buildbot, bạn có thể cần khám phá Hướng dẫn tham quan nhanh của dự án Buildbot . Khi đã sẵn sàng tìm hiểu cách cài đặt quy trình tích hợp liên tục hoàn chỉnh, hãy xem hướng dẫn Cách cài đặt tích hợp liên tục với Buildbot trên Ubuntu 16.04 của ta .


Tags:

Các tin liên quan

Cách cấu hình Jenkins với SSL bằng cách sử dụng Nginx Reverse Proxy
2017-05-02
Cách tạo chứng chỉ SSL tự ký cho Nginx trên CentOS 7
2017-01-09
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Debian 8
2016-12-22
Cách tạo chứng chỉ SSL tự ký cho Nginx trên Debian 8
2016-12-20
Cách bảo mật Nginx bằng Let's Encrypt trên Debian 8
2016-12-19
Cách cung cấp các ứng dụng Django với uWSGI và Nginx trên Debian 8
2016-12-19
Cách tạo chuyển hướng tạm thời và vĩnh viễn với Nginx
2016-12-19
Cách thêm module gzip vào Nginx trên Ubuntu 16.04
2016-12-02
Cơ sở hạ tầng SaltStack: Tạo Salt State cho web server Nginx
2016-11-07
Cách thêm module log vào Nginx trên Ubuntu 16.04
2016-10-31