Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

Cách thiết lập cấu hình Jenkins với SSL bằng Proxy ngược Nginx trên Ubuntu 20.04

Ngày đăng: 14 tháng 3 năm 2023

Ubuntu

Giới thiệu

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.

Điều kiện tiên quyết

Để bắt đầu, bạn sẽ cần những thứ sau:

  • Một máy chủ Ubuntu 20.04 được thiết lập cấu hình với tường lửa và non-root user có hỗ trợ sudo, theo hướng dẫn thiết lập máy chủ ban đầu Ubuntu 20.04.
  • Đã cài đặt Jenkins, làm theo các bước trong Cách cài đặt Jenkins trên Ubuntu 20.04
  • Đã cài đặt Nginx, làm theo các bước trong Cách cài đặt Nginx trên Ubuntu 20.04
  • Chứng chỉ SSL cho miền do Let's Encrypt cung cấp. Làm theo Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 20.04 để lấy chứng chỉ này. Lưu ý rằng bạn sẽ cần một tên miền đã đăng ký mà bạn sở hữu hoặc kiểm soát. Hướng dẫn này sẽ sử dụng tên miền example.com xuyên suốt.

Bước 1 - Thiết lập cấu hình Nginx

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:

  1. 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:

/etc/nginx/sites-available/example.com
. . . 
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:

/etc/nginx/sites-available/example.com
. . .
           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:

/etc/nginx/sites-available/example.com
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ờ:

  1. 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 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.

description image

Nếu bạn thấy lỗi này, hãy kiểm tra kỹ cài đặt proxy_passproxy_redirect của bạn trong cấu hình Nginx.

Bước 2 - Thiết lập cấu hình Jenkins

Để 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:

  1. 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ó:

/etc/default/jenkins
. . .
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:

  1. sudo systemctl restart jenkins

systemctl không hiển thị đầu ra, hãy kiểm tra trạng thái:

  1. 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:

  1. sudo systemctl restart nginx

Kiểm tra trạng thái:

  1. 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ước 3 — Kiểm tra cấu hình

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:

description image

Đ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:

description image

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.

Kết luậ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.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời