Theo mặc định, Jenkins đi kèm với máy chủ web Winstone tích hợp sẵn của riêng nó đang lắng nghe 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ẽ thiết lập cấu hình Nginx làm proxy ngược để chuyển các yêu cầu của máy khách tới Jenkins.
Để bắt đầu, bạn sẽ cần những thứ sau:
Trong hướng dẫn điều kiện tiên quyết Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 20.04, bạn đã thiết lập 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 proxy ngược 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 thiết lập 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 tới Jenkins, 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 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 cung cấp bởi Nginx 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 yêu cầu máy khách và địa chỉ IP của máy khách, được giữ lại và có sẵn trong các tệp nhật ký.proxy_pass
: Cái này đặt giao thức và địa chỉ của máy chủ được ủy quyền, 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ừ giá trị mặc định 60 giây của Nginx lên giá trị 90 giây do 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ủ thích hợp.Đảm bảo thay thế tên miền được bảo mật SSL của bạn, ví dụ: 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ẽ ngừng khởi động lại Nginx cho đến khi chúng tôi thiết lập 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 bất kỳ lỗi nào được báo cáo cho đến khi vượt qua thử nghiệm.
Lưu ý: Nếu bạn thiết lập sai cấu hình 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 Cấu hình Jenkins 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
của bạn trong cấu hình Nginx.
Để Jenkins hoạt động với Nginx, bạn cần cập nhật cấu hình Jenkins để máy chủ Jenkins chỉ lắng nghe 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 các đ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.
Để 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ẽ tự động được chuyển hướng đến HTTPS và trang Jenkins sẽ được phục vụ 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, hãy nhập http://example.com
, thay thế tên miền của bạn bằng 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 rằng kết nối được bảo mật.
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 20.04 vào trường User và mật khẩu mà 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 mật khẩu 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 ở phía bên trái của trang:
Điều 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 đã thiết lập cấu hình Nginx làm proxy ngược 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. Bây giờ 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 chưa 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.