Cấu hình Jenkins với Nginx Reverse Proxy – Cuongquach.com | Thông thường khi bạn cài đặt Jenkins làm hệ thống CI/CD ban đầu thì Jenkins sẽ chỉ hỗ trợ bạn truy cập qua port dịch vụ lắng nghe trên IP chứ không hỗ trợ bạn truy cập qua tên miền hoặc tên miền sub url giúp bạn thuận tiện trong việc quản lý. Vì vậy để giải quyết bài toán này thường chúng ta sẽ cài đặt thêm 1 dịch vụ như Nginx đứng phía trước làm reverse proxy giúp bạn truy cập dịch vụ Jenkins qua tên miền được.
Có thể bạn quan tâm chủ đề khác
– Tổng quan giao diện quản lý Jenkins
– Bảo trì tắt mở dịch vụ Jenkins
– Backup/restore dữ liệu Jenkins
– Quản lý cài đặt Jenkins cơ bản
Contents
1. Cấu hình Jenkins
Jenkins mặc định khi cài xong thì đã listen trên port 8080 và listen trên toàn bộ cổng interface private/public/loopback . Vì lý do an toàn bảo mật cho hệ thống Jenkins chúng ta nên cấu hình Jenkins listen trên 127.0.0.1 port 8080 và chỉ dùng Nginx reverse proxy xuống truy cập Jenkins.
Bạn khai báo biến ‘HTTP_HOST‘ và thêm option ‘–httpListenAddress=$HTTP_HOST‘ vào biến ‘JENKINS_ARGS‘ trong file định nghĩa biến môi trường hoạt động của Jenkins.
File biến môi trường Jenkins khác nhau ở mỗi OS Linux:
- Ubuntu 16.04 + : /etc/sysconfig/jenkins
- CentOS 7+ : /etc/sysconfig/jenkins
# vi /etc/sysconfig/jenkins HTTP_HOST=127.0.0.1 JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=$HTTP_HOST"
Khởi động lại dịch vụ Jenkins.
# systemctl restart jenkins
Kiểm tra xem Jenkins đã lắng nghe trên 127.0.0.1 chưa nhé.
# netstat -antlp | grep java tcp6 0 0 127.0.0.1:8080 :::* LISTEN 13040/java
2. Cài đặt Nginx
Việc cài đặt Nginx khá đơn giản các bạn có thể tham khảo bài viết này:
– Hướng dẫn cài đặt Nginx trên CentOS
– Hướng dẫn cài đặt Nginx trên Ubuntu
+ CentOS
# yum install epel-release -y # yum install nginx -y
+ Ubuntu
# apt install nginx -y
3. Cấu hình Nginx Reverse Proxy cho Jenkins
Chúng ta sẽ có hai hình thức cấu hình Nginx làm reverse proxy:
- Reverse proxy theo tên miền hoặc tên miền phụ. Ví dụ : http://jenkins.cuongquachlab.com hoặc http://cuongquachlab.com
- Reverse proxy theo sub URL của tên miền. Ví dụ : cuongquachlab.com/jenkins/
3.1 Nginx reverse proxy theo tên miền
Chúng ta sẽ khai báo một VirtualHost dành riêng cho dịch vụ Jenkins. Ví dụ vhost của mình có domain là : jenkins.cuongquachlab.com
Giả sử cấu hình Nginx mặc định sẽ bao gồm các file config trong thư mục ‘/etc/nginx/sites-enabled/‘ .
# cat /etc/nginx/nginx.conf .. .. http { ... ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
Tạo file config vhost dành cho Jenkins. Cấu hình block ‘location /‘ có thể áp dụng cho cả tên miền HTTP và HTTPS , nên cấu hình mẫu Nginx HTTP 80 ở bài này bạn có thể đem sang cho config của Nginx SSL 443.
# vi /etc/nginx/sites-enabled/jenkins.cuongquachlab.com.conf server { listen 80; server_name jenkins.cuongquachlab.com; location / { proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://127.0.0.1:8080; proxy_read_timeout 120; proxy_connect_timeout 120; proxy_send_timeout 120; proxy_redirect http://127.0.0.1:8080 https://jenkins.cuongquachlab.com; # Required for new HTTP-based CLI proxy_http_version 1.1; proxy_request_buffering off; sendfile off; # workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651 add_header 'X-SSH-Endpoint' 'jenkins.cuongquachlab.com:50022' always; } }
Ý nghĩa của các giá trị proxy_* bạn đọc thêm tài liệu của Nginx nhé, phần cấu hình Nginx Reverse Proxy mình sẽ không đi chi tiết ở bài này : LINK
Khởi động lại dịch vụ Nginx.
# systemctl restart nginx
Giờ bạn chỉ cần truy cập thử tên miền của bạn là sẽ thấy dịch vụ Jenkins đã có thể hoạt động qua tên miền rồi. Phần tên miền này bạn có thể trỏ DNS record A đến địa chỉ IP của máy chủ dịch vụ Jenkins của bạn (có thể public hoặc private tuỳ vào hệ thống của bạn) , còn muốn kiểm tra nhanh thì có thể chỉnh file ‘hosts’ trên laptop cho nhanh.
3.2 Nginx reverse proxy theo sub url tên miền
Bạn phải cấu hình cho dịch vụ Jenkins sẽ thay đổi cách thức xử lý request tương ứng với sub url của bạn. Ví dụ bạn muốn truy cập đường link url như sau :
cuongquachlab.com/jenkins/
Thay đổi prefix url mà Jenkins sẽ sử dụng để xử lý request.
# vi /etc/sysconfig/jenkins PREFIX=/$NAME JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=$HTTP_HOST --prefix=$PREFIX"
Khởi động lại dịch vụ Jenkins.
# systemctl restart jenkins
Tiếp đến cấu hình Nginx reverse proxy cho Jenkins sub-url.
# vi /etc/nginx/sites-enabled/cuongquachlab.com.conf server { listen 80; server_name cuongquachlab.com; location ^~ /jenkins/ { proxy_pass http://127.0.0.1:8080/jenkins/; sendfile off; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_max_temp_file_size 0; #this is the maximum upload size client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_temp_file_write_size 64k; # Required for new HTTP-based CLI proxy_http_version 1.1; proxy_request_buffering off; proxy_buffering off; # Required for HTTP-based CLI to work over SSL } }
Khởi động lại dịch vụ Nginx.
# systemctl restart nginx
Giờ thì thử truy cập đường dẫn sub url cho dịch vụ Jenkins của bạn nào.
Tổng kết
Vậy là khi bạn muốn cấu hình Nginx làm reverse proxy cho dịch vụ Jenkins CI/CD thì cực kì đơn giản để cấu hình với 2 cách thực hiện như trên. Chúc bạn thành công.
Nguồn: https://cuongquach.com/