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

by Anton Chernousov aka GITA-DEV


Опубликовано: 18 Авг 2018 (последние правки 1 месяц, 2 недели)


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

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

Отключаем встроенный 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 (пошаговое руководство)

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

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


Установка Nexus Repository Manager (NXRM) 3

Установка Nexus Repository Manager (NXRM) 3

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


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

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

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


Установка и обновление SSL-сертификатов Let's encrypt в Centos 7

Установка и обновление SSL-сертификатов Let's encrypt в Centos 7

Представляю вашему вниманию самый простой способ получить Let's encrypt сертификат в Centos 7. Более сложные методы мы рассмотрим в дальнейшем, а сейчас я продемонстрирую как установить certbot в Centos и получить Let's encrypt сертификат при помощи плагина webroot.


RhodeCode интеграция с Active Directory

RhodeCode интеграция с Active Directory

При работе с множеством внутренних корпоративных сервисов всегда возникает желание как-то унифицировать логины и пароли пользователей и упростить создание новых пользователей. Не сказать, что у нас большая текучка, но болшьшое число внутренних сервисов создает некоторые проблемы с заведением новых пользователей, так как даже следуя плану предоставления доступа можно что-то забыть. Я предпочитаю привязывать все сервисы в ActiveDirectory компании и повозможности интегрировать пользователей и группы различных сервисов с пользователями и группами в ActiveDirectory.


Установка Hg/Git/Svn хранилища репозитария Rhodecode

Установка Hg/Git/Svn хранилища репозитария Rhodecode

И хотя стандартном де-факто для построения внутренних GIT-хранилищ на данный момент является GitLab есть компании где еше не все мигрировали на Git и требуется поддержка нескольких типов репозитариев. Сегодня мы рассмотрим один из проектов корпоративных хранилищ исходных кодов с поддержкой нескольких типов репозитариев, а речь пойдет о RhodeCode. И в первом обзоре мы рассмотрим как установить, хранилище репозитариев.


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .

Блог это некоммерческий проект! Если вам понравился мой блог и то что я пишу помогло вам на практике, то можете сказать спасибо материально.