Подключение letsencrypt для gitlab

Подключение letsencrypt для gitlab с нуля или при переходе с платного сертификата на letsencrypt.

Для начала на всякий случай определить версию gitlab. В некоторых версиях надо включать в конфигах возможность использования letsencrypt или настройки могут отличаться. Я работал с версией 11.2.3

cat /opt/gitlab/version-manifest.txt | grep gitlab-ce

Создаётся каталог для процесса получения сертификата.

mkdir -p /var/www/letsencrypt

В конфигурацию /etc/gitlab/gitlab.rb надо добавить следующую строку(nano /etc/gitlab/gitlab.rb):

nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"

И перечитать конфигурацию:

gitlab-ctl reconfigure

После этого можно начать процесс получения сертификата:

certbot certonly --webroot --webroot-path=/var/www/letsencrypt -d hostname.com

Если не прокатывает (Connection refused, например, при работе программы acme), то проверить строку external_url ‘https: — должно быть пока что http (без «s») (файл — /etc/gitlab/gitlab.rb).

Или попробовать вот такой вариант (я не проверял его):

nginx['redirect_http_to_https'] = false
nginx['custom_nginx_config'] = 'include /etc/gitlab/nginx-https-redirects.conf;'
server {
listen 0.0.0.0:80;
listen [::]:80;
server_name git.example.com mattermost.example.com gitlabci.example.com registry.example.com;
server_tokens off;
access_log /var/log/gitlab/nginx/gitlab_registry_access.log gitlab_access;
error_log /var/log/gitlab/nginx/gitlab_registry_error.log;
location /.well-known/acme-challenge/ {
alias /var/run/acme/acme-challenge/;
}
location / {
return 301 https://$http_host:$request_uri;
}
}

https://gitlab.com/gitlab-org/omnibus-gitlab/issues/1096

После успешного создания сертификата, надо отредактировать файл /etc/gitlab/gitlab.rb, чтобы блок # GitLab Nginx # содержал следующие строки :

nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"
nginx['redirect_http_to_https'] = true

nginx['ssl_certificate'] = "/etc/letsencrypt/live/hostname.com/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/hostname.com/privkey.pem"

А так же строка external_url должна содержать https перед именем хоста.

Пути к сертификату будут отличаться лишь названием хоста. После этого снова перечитать конфигурацию.

gitlab-ctl reconfigure

После этого сертификат должен заработать. Реконфигурация должна прописать верные пути к файлам сертификата в конфиге nginx:

nano /var/opt/gitlab/nginx/conf/gitlab-http.conf

В моём случае gitlab использовал платный сертификат и после описанных выше действий более ничего не потребовалось.

Автоматическое обновление сертификата в cron:

0 0 */2 * * /usr/bin/letsencrypt renew >> /var/log/le-renew.log
5 0 */2 * * /usr/bin/gitlab-ctl restart nginx

Использовал материал:

https://community.vscale.io/hc/ru/community/posts/115003739805-%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-HTTPS-%D0%B2-GitLab-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-Let-s-Encrypt

https://www.8host.com/blog/sozdanie-sertifikata-lets-encrypt-dlya-gitlab-v-ubuntu-16-04/

https://www.digitalocean.com/community/tutorials/how-to-secure-gitlab-with-let-s-encrypt-on-ubuntu-16-04

https://docs.gitlab.com/omnibus/settings/ssl.html#renewing

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *