HTTPS-защита подключений к GITLAB

Как я уже говорил в заметке про установку GITLAB, этот комбайн тащит за собой набор софта включающий в себя Nginx, Postgresql и т.п., а сегодня мы будет отключать использование встроенного в GITLAB Nginx и будем использовать наш центральный Front Nginx, что позволит установить параллельно с GITLAB на одном сервере еще ряд приложений. Одной из побочных задач такого решения служит настройка HTTPS-защиты подключений к нашему внутреннему GIT-репозитарию.

 
 
Логотип GITA-DEV

Автор: Черноусов Антон aka Gita-Dev
Опубликовано: 18 Авг 2018 (последние правки 1 месяц)

apt-get git gitlab install letsencrypt live nginx postgres ssl tar прокси

Отключаем встроенный web-сервер Nginx, для чего в файле /etc/gitlab/gitlab.rb устанавливаем значение:

nginx['enable'] = false

Просто так поменять параметры конфигурации GITLAB ничего не даст, вам потребуется запустить дополнительный скрипт реконфигурации, а уже потом перезапустить службу:

# gitlab-ctl reconfigure
# systemctl restart gitlab-runsvdir.service

Проверяем, что встроенный nginx более не использует порт 80, и для этого используем типовую утилиту netstat:

# netstat -tulpn | grep :80 
tcp       0     0 127.0.0.1:8080         0.0.0.0:*              LISTEN     5478/config.ru  
tcp       0     0 127.0.0.1:8082         0.0.0.0:*              LISTEN     5350/sidekiq 5.1.3

После того как мы остановили встроенный Nginx наше web-приложение будет доступно на порту 8080, но слушает оно только localhost, проверить работу мы можем следующим образом:

# curl -I http://127.0.0.1:8080

Следующим этапом, мы устанавливаем штатный nginx:

# apt-get install nginx

Если вы как и я решите использовать SOCKET для взаимодействия с GITLAB, то вам надо будет задать еще один параметр в глобальной конфигурации nginx:

web_server['external_users'] = ['www-data']

Выполняем реконфигурацию GITLAB и создаем конфигурационный файл который будет проксировать входящие подключения к определенному домену на GitLAB сервер и побочно защищать соединение при помощи Let's Encrypt (стандартный virtualhost для Nginx):

upstream gitlab-workhorse { 
 server unix:/var/opt/gitlab/gitlab-workhorse/socket; 
} 

server { 
  listen 80; 
  server_name git.solomonov.ru; 
  return 301 https://$host$request_uri; 
} 

server { 
 server_tokens off; 
 client_max_body_size 0; 

 listen 443 ssl; 
 server_name git.solomonov.ru; 
 ssl_certificate /etc/letsencrypt/live/git.solomonov.ru/fullchain.pem; 
 ssl_certificate_key /etc/letsencrypt/live/git.solomonov.ru/privkey.pem; 
 include /etc/letsencrypt/options-ssl-nginx.conf; 
 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 

 add_header Strict-Transport-Security "max-age=31536000"; 

 access_log /var/log/gitlab/nginx/gitlab_access.log combined; 
 error_log /var/log/gitlab/nginx/gitlab_error.log; 

 if ($http_host = "") { 
  set $http_host_with_default "git.solomonov.ru"; 
 } 

 if ($http_host != "") { 
  set $http_host_with_default $http_host; 
 } 

 gzip on; 
 gzip_static on; 
 gzip_comp_level 2; 
 gzip_http_version 1.1; 
 gzip_vary on; 
 gzip_disable "msie6"; 
 gzip_min_length 10240; 
 gzip_proxied no-cache no-store private expired auth; 
 gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/json application/xml application/rss+xml; 

 proxy_read_timeout   3600; 
 proxy_connect_timeout 300; 
 proxy_redirect     off; 
 proxy_http_version 1.1; 

 proxy_set_header Host $http_host_with_default; 
 proxy_set_header X-Real-IP $remote_addr; 
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
 proxy_set_header Upgrade $http_upgrade; 
 proxy_set_header X-Forwarded-Proto http; 

 location ~ (\.git/gitlab-lfs/objects|\.git/info/lfs/objects/batch$) { 
  proxy_cache off; 
  proxy_pass http://gitlab-workhorse; 
  proxy_request_buffering off; 
 } 

 location / { 
  proxy_cache off; 
  proxy_pass http://gitlab-workhorse; 
 } 

 location /assets { 
  proxy_pass http://gitlab-workhorse; 
 } 

 error_page 404 /404.html; 
 error_page 500 /500.html; 
 error_page 502 /502.html; 
 location ~ ^/(404|500|502)(-custom)?\.html$ { 
   root /opt/gitlab/embedded/service/gitlab-rails/public; 
   internal; 
 } 
}

За основу берем штатный конфигурационный файл /var/opt/gitlab/nginx/conf/gitlab-http.conf и если вы все сделали правильно, то ваш GITLAB будет доступен по HTTPS-протоколу на порту 443 с принудительным редиректом HTTP на HTTPS.

 

Похожие статьи

Установка GITLAB на ARM-платформу (BananaPI M2)

Установка GITLAB на ARM-платформу (BananaPI M2)

В процессе эксплуатации GIT-хранилища RhodeCode я пришел к мнению, что надо с него мигрировать и благо, что я на него не сильно пока залез. Главная причина по которой я решил с него мигрировать, это его прожорливость и если на одной из клиентских платформ с выделенным сервером он вполне себе прижился, то на моем небольшом VPS он потребляет катастрофически много ресурсов и периодически по этому поводу залезает в swap, после чего скорость его работы падает на столько, что остается только материться. Сегодня будем пробовать не менее прожорливого монстрика GITLAB, но устанавливать его будем на наше файловое хранилище которое как наверное помните по моим предыдущим заметкам построено на ARM-платформе BabanaPI M2.


Как установить GITLAB (пошаговое руководство)

Как установить GITLAB (пошаговое руководство)

И еще одна небольшая инструкция по установке web-приложения на Linux-сервер (точнее на Ubuntu Server 16.04). В рамках одного из текущих проектов мне потребовалось развернуть GITLAB на сервер заказчика и естественно мне на этот шаг работы (как в принципе и на весь проект) необходимо подготовить документацию, а так как инструкция по установке внутреннего git-репозитария GITLAB особой коммерческой тайны не представляет, я могу поделиться с вами этим пошаговым руководством.


GITLAB - перенос интегрированной базы Postgresql в штатную базу операционной системы

GITLAB - перенос интегрированной базы Postgresql в штатную базу операционной системы

GitLab, это отличный GIT-репозитарий для использования внутри компании с богатым функционалом и простой установкой, как его устанавливать я уже рассказывал и вы наверное обратили внимание, что этот продукт рекомендуется использовать на отдельном хосте и он поставляется полностью со своей инфраструктурой программ окружения. Как отвязать его от использования встроенного Nginx я вам уже рассказал и сегодня мы будем отвязывать его от встроенного сервера Postgresql.


GITLAB - резервное копирование и восстановление

GITLAB - резервное копирование и восстановление

На днях меня попросили посмотреть механизмы резервного копирования которые остались от уволившегося системного администратора в одной из компаний. Честно говоря я был немного удивлен подходом к резервному копированию который он применял, ведь как я говорю мало сделать резервную копию сервера или отдельного сервиса, надо потом с этой копии еще и восстановиться.


Отзывы и комментарии