Ngày đăng: 19 tháng 10 năm 2023
Theo mặc định, Jenkins đi kèm với máy chủ web Winstone tích hợp sẵn listen trên cổng 8080
, thuận tiện cho việc bắt đầu. Tuy nhiên, bạn cũng nên bảo mật Jenkins bằng SSL để bảo vệ mật khẩu và dữ liệu nhạy cảm được truyền qua giao diện web.
Trong hướng dẫn này, bạn sẽ định cấu hình Nginx làm reverse proxy để chuyển các yêu cầu của khách hàng đến Jenkins.
Để bắt đầu, bạn sẽ cần những thứ sau:
Trong hướng dẫn tiên quyết Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 18.04, bạn đã định cấu hình Nginx để sử dụng SSL trong tệp /etc/nginx/sites-available/example.com
. Mở tệp này để thêm cài đặt reverse proxy của bạn:
- sudo nano /etc/nginx/sites-available/example.com
Trong khối server
có cài đặt cấu hình SSL, hãy thêm nhật ký lỗi và quyền truy cập dành riêng cho Jenkins:
. . .
server {
. . .
# SSL Configuration
#
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
access_log /var/log/nginx/jenkins.access.log;
error_log /var/log/nginx/jenkins.error.log;
. . .
}
Tiếp theo, hãy định cấu hình cài đặt proxy. Vì chúng tôi đang gửi tất cả các yêu cầu đến Jenkins nên chúng tôi sẽ nhận xét dòng try_files
mặc định, nếu không sẽ trả về lỗi 404 trước khi yêu cầu đến được Jenkins:
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404; }
. . .
Bây giờ hãy thêm cài đặt proxy, bao gồm:
proxy_params
: Tệp /etc/nginx/proxy_params
được Nginx cung cấp và đảm bảo rằng thông tin quan trọng, bao gồm tên máy chủ, giao thức của request máy khách và địa chỉ IP của máy khách, được giữ lại và có sẵn trong tệp nhật ký.proxy_pass
: Điều này đặt giao thức và địa chỉ của máy chủ proxy, trong trường hợp này sẽ là máy chủ Jenkins được truy cập qua localhost
trên cổng 8080
.proxy_read_timeout
: Điều này cho phép tăng từ mặc định 60 giây của Nginx lên giá trị 90 giây được Jenkins đề xuất.proxy_redirect
: Điều này đảm bảo rằng các phản hồi được viết lại chính xác để bao gồm tên máy chủ phù hợp.Hãy nhớ thay thế tên miền được bảo mật SSL của bạn cho example.com
trong dòng proxy_redirect
bên dưới:
Location /
. . .
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include /etc/nginx/proxy_params;
proxy_pass http://localhost:8080;
proxy_read_timeout 90s;
# Fix potential "It appears that your reverse proxy setup is broken" error.
proxy_redirect http://localhost:8080 https://example.com;
Khi bạn đã thực hiện những thay đổi này, hãy lưu tệp và thoát khỏi trình chỉnh sửa. Chúng tôi sẽ tạm dừng khởi động lại Nginx cho đến khi chúng tôi đã định cấu hình Jenkins, nhưng chúng tôi có thể kiểm tra cấu hình của mình ngay bây giờ:
- sudo nginx -t
Nếu tất cả đều ổn, lệnh sẽ trả về:
Outputnginx: 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 mọi lỗi được báo cáo cho đến khi bài kiểm tra vượt qua.
Lưu ý: Nếu bạn định cấu hình sai proxy_pass
(ví dụ: bằng cách thêm dấu gạch chéo ở cuối), bạn sẽ nhận được nội dung tương tự như sau trong trang Jenkins Configuration của mình.
Nếu bạn thấy lỗi này, hãy kiểm tra kỹ cài đặt proxy_pass
và proxy_redirect
trong cấu hình Nginx.
Để Jenkins hoạt động với Nginx, bạn sẽ cần cập nhật cấu hình Jenkins để máy chủ Jenkins chỉ listen trên giao diện localhost
chứ không phải trên tất cả các giao diện (0.0.0.0
). Nếu Jenkins lắng nghe trên tất cả các giao diện thì nó có khả năng truy cập được trên cổng ban đầu, không được mã hóa (8080
).
Hãy sửa đổi tệp cấu hình /etc/default/jenkins
để thực hiện những điều chỉnh sau:
- sudo nano /etc/default/jenkins
Xác định vị trí dòng JENKINS_ARGS
và thêm --httpListenAddress=127.0.0.1
vào các đối số hiện có:
. . .
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"
Lưu và thoát tập tin.
Để sử dụng cài đặt cấu hình mới, hãy khởi động lại Jenkins:
- sudo systemctl restart jenkins
Vì systemctl
không hiển thị đầu ra, hãy kiểm tra trạng thái:
- sudo systemctl status jenkins
Bạn sẽ thấy trạng thái active (exited)
trong dòng Active
:
Output● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Mon 2018-07-09 20:26:25 UTC; 11s ago
Docs: man:systemd-sysv-generator(8)
Process: 29766 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)
Process: 29812 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)
Khởi động lại Nginx:
- sudo systemctl restart nginx
Kiểm tra trạng thái:
- sudo systemctl status nginx
Output● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2018-07-09 20:27:23 UTC; 31s ago
Docs: man:nginx(8)
Process: 29951 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
Process: 29963 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 29952 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 29967 (nginx)
Khi cả hai máy chủ được khởi động lại, bạn sẽ có thể truy cập miền bằng HTTP hoặc HTTPS. Các yêu cầu HTTP sẽ được tự động chuyển hướng đến HTTPS và trang web Jenkins sẽ được cung cấp một cách an toàn.
Bây giờ bạn đã kích hoạt mã hóa, bạn có thể kiểm tra cấu hình bằng cách đặt lại mật khẩu quản trị. Hãy bắt đầu bằng cách truy cập trang web qua HTTP để xác minh rằng bạn có thể truy cập Jenkins và được chuyển hướng đến HTTPS.
Trong trình duyệt web của bạn, nhập http://example.com
, thay thế tên miền của bạn cho example.com
. 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 này an toàn.
Bạn có thể nhập tên người dùng quản trị mà bạn đã tạo trong Cách cài đặt Jenkins trên Ubuntu 18.04 vào trường User và mật khẩu bạn đã chọn trong trường Password.
Sau khi đăng nhập, bạn có thể thay đổi mật khẩu để đảm bảo an toàn.
Nhấp vào tên người dùng của bạn ở góc trên bên phải màn hình. Trên trang hồ sơ chính, chọn Configure từ danh sách ở bên trái trang:
Thao tác này sẽ đưa bạn đến một trang mới, nơi bạn có thể nhập và xác nhận mật khẩu mới:
Xác nhận mật khẩu mới bằng cách nhấp vào Save. Bây giờ bạn có thể sử dụng giao diện web Jenkins một cách an toàn.
Trong hướng dẫn này, bạn đã định cấu hình Nginx làm reverse proxy cho máy chủ web tích hợp của Jenkins để bảo mật thông tin đăng nhập của bạn và các thông tin khác được truyền qua giao diện web. Giờ đây, Jenkins đã được bảo mật, bạn có thể tìm hiểu cách thiết lập quy trình tích hợp liên tục để tự động kiểm tra các thay đổi mã. Các tài nguyên khác cần xem xét nếu bạn là người mới làm quen với Jenkins là hướng dẫn “Tạo Pipeline đầu tiên của bạn” của dự án Jenkins hoặc thư viện các plugin do cộng đồng đóng góp.