Вопрос: Как я могу разместить Jenkins за обратным прокси-сервером Nginx и SSL-сертификатом Let Encrypt ?
Jenkins – это мощный сервер автоматизации с открытым исходным кодом, созданный для автоматизации повторяющихся задач и ускорения непрерывной интеграции и доставки приложений.
В этом кратком руководстве будет рассказано, как настроить Nginx для работы в качестве обратного прокси-сервера для сервера Jenkins.
Предполагается, что у вас есть работающий сервер Jenkins, но наши руководства могут помочь в настройке Jenkins Server.
- Как установить Jenkins Сервер с Apache на Ubuntu 18.04
- Как управлять пользователями и ролями в Jenkins
Шаг 1: Установите Nginx
Вам нужно начать с установки веб-сервера Nginx на свой дистрибутив Linux.
Вот команды для установки Nginx в распространенных дистрибутивах Linux.
# CentOS / RHEL $ sudo yum -y install nginx vim # Fedora $ sudo dnf -y install nginx vim # Ubuntu / Debian $ sudo apt-get -y install nginx vim
Шаг 2: Установите инструмент Cerbot
Далее идет установка инструмента Certbot, который используется для получения SSL-сертификата Let Encrypt.
Загрузите и установите средство командной строки certbot-auto.
curl -sL https://dl.eff.org/certbot-auto | sudo tee /usr/local/bin/certbot-auto
Дайте скрипту бит выполнения.
sudo chmod +x /usr/local/bin/certbot-auto
Проверьте, работает ли:
$ certbot-auto --version certbot 0.33.1
Когда вас попросят подтвердить установку зависимостей, ответьте «yes».
Dependencies Resolved
===========================================================================
Package Arch Version Repository Size
===========================================================================
Installing:
augeas-libs x86_64 1.4.0-6.el7_6.1 updates 355 k
libffi-devel x86_64 3.0.13-18.el7 base 23 k
mod_ssl x86_64 1:2.4.6-88.el7.centos base 112 k
python-devel x86_64 2.7.5-76.el7 base 398 k
python-tools x86_64 2.7.5-76.el7 base 856 k
python-virtualenv noarch 15.1.0-2.el7 base 1.7 M
python2-pip noarch 8.1.2-8.el7 epel 1.7 M
redhat-rpm-config noarch 9.1.0-87.el7.centos base 81 k
Installing for dependencies:
dwz x86_64 0.11-3.el7 base 99 k
libXft x86_64 2.3.2-2.el7 base 58 k
libXrender x86_64 0.9.10-1.el7 base 26 k
perl-srpm-macros noarch 1-8.el7 base 4.6 k
tcl x86_64 1:8.5.13-8.el7 base 1.9 M
tix x86_64 1:8.4.3-12.el7 base 254 k
tk x86_64 1:8.5.13-6.el7 base 1.4 M
tkinter x86_64 2.7.5-76.el7 base 326 k
zip x86_64 3.0-11.el7 base 260 k
Transaction Summary
===========================================================================
Install 8 Packages (+9 Dependent packages)
Total download size: 9.5 M
Installed size: 26 M
Is this ok [y/d/N]: y
Шаг 4: Запрос SSL-сертификата Let’s Encrypt
Вам нужен работающий DNS для домена или субдомена, используемого сервером Jenkins. В своей демонстрации я использую jenkins.itsecforu.ru
Вам также нужно открыть порт 80, чтобы получить сертификат, но только если у вас есть активный брандмауэр.
# CentOS 7 $ sudo firewall-cmd --add-service={http,https} --permanent $ sudo firewall-cmd --reload # Ubuntu / Debian $ sudo ufw allow proto tcp from any to any port 80,443 $ sudo ufw status
Как только это будет сделано, получите сертификат Let Encrypt:
export DOMAIN="jenkins.example.com" export ALERTS_EMAIL="webmaster@example.com" sudo systemctl stop nginx sudo /usr/local/bin/certbot-auto certonly --standalone -d $DOMAIN --preferred-challenges http --agree-tos -n -m $ALERTS_EMAIL --keep-until-expiring
Пример вывода:
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Obtaining a new certificate Performing the following challenges: http-01 challenge for jenkins.itsecforu.ru Waiting for verification… Cleaning up challenges IMPORTANT NOTES: Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/jenkins.itsecforu.ru/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/jenkins.itsecforu.ru/privkey.pem Your cert will expire on 2019-07-08. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew all of your certificates, run "certbot-auto renew" Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Шаг 5: Настройте Nginx
Создайте файл конфигурации Nginx для Jenkins.
sudo vim /etc/nginx/conf.d/jenkins.conf
Вставьте содержимое ниже в файл.
################################################
# Jenkins Proxy configuration with SSL
#################################################
upstream jenkins {
server 127.0.0.1:8080 fail_timeout=0;
}
server {
listen 80;
server_name jenkins.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name jenkins.example.com;
ssl_certificate /etc/letsencrypt/live/jenkins.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jenkins.example.com/privkey.pem;
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_redirect http:// https://;
proxy_pass http://jenkins;
# 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
# workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651
add_header 'X-SSH-Endpoint' 'jenkins.example.com:50022' always;
}
}
Замените все example.com своим правильным доменным именем. Когда закончите, проверьте конфигурацию nginx.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Если конфигурация выглядит нормально, запустите nginx и установите его для запуска при загрузке.
sudo systemctl restart nginx sudo systemctl enable nginx
Шаг 6: Доступ к веб-интерфейсу Jenkins
Получите доступ к веб-интерфейсу Jenkins по адресу http://jenkins.example.com.
Панель управления Jenkins должна отображаться после входа в систему.