GitLab CE (Community Edition) — это система управления репозиториями Git и совместной разработки проектов с открытым исходным кодом. В статье мы рассмотрим как установить Gitlab на сервер с ОС Debian, Ubuntu или CentOS.
Системные требования
Рекомендуется использовать не менее 8 ГБ оперативной памяти и процессор не менее 2-ух ядер. Более подробно о системных требованиях можно прочитать в документации GitLab.
GitLab может быть установлен в следующих дистрибутивах Linux:
- Ubuntu;
- Debian;
- CentOS;
- openSUSE;
- Red Hat Enterprise Linux (CentOS);
- Scientific Linux (CentOS);
- Oracle Linux (CentOS).
После установки операционной системы подключитесь к ней по SSH для выполнения действий на сервере, где будет работать GitLab CE.
Установка сервера Nginx с сертификатом Let’s Encrypt
Мы будем использовать установку GitLab CE, которая работает за сервером Nginx, который будет выполнять обратное проксирование и осуществлять обработку SSL-трафика. Для настройки базового сервера воспользуйтесь руководством из списка ниже, подходящим для вашей операционной системы.
Настройка балансирующего прокси Nginx с сертификатом Let’s Encrypt в CentOS 7.
Настройка балансирующего прокси Nginx с сертификатом Let’s Encrypt в Debian 9 Stretch.
Настройка балансирующего прокси Nginx с сертификатом Let’s Encrypt в Ubuntu 18.04 Bionic
На данный момент у вас должен быть развернут сервер с Nginx и сертификатом Let’s Encrypt. Теперь установим GitLab CE.
Подготовка к установке GitLab
Обновите индекс пакетов командой:
Debian/Ubuntu
apt-get update
CentOS
yum update
Выполните установку дополнительных компонентов:
Debian/Ubuntu
apt-get install ca-certificates curl postfix
CentOS
yum install curl policycoreutils postfix
Во время установки будет открыто диалоговое окно для настройки MTA Postfix (почтового сервера). Выберите пункт «Интернет-сайт».
В следующем окне введите реально существующее доменное имя. Доменное имя будет использоваться для отправки с него писем.
Вы можете ввести IP адрес сервера вместо доменного имени, но в таком случае доставка писем на внешние почтовые серверы не гарантируется.
Установка GitLab CE
Процесс установки занимает не так много времени. Воспользуйтесь скриптом для подготовки рабочей среды под GitLab. Будут установлены дополнительные программы и настроено подключение к репозиторию GitLab CE.
Выполните следующую команду для скачивания и выполнения скрипта:
Debian/Ubuntu
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
CentOS
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
Ознакомиться с кодом скрипта можно по ссылке https://packages.gitlab.com/gitlab/gitlab-ce/install
Для установки самого GitLab CE введите команду:
Debian/Ubuntu
apt-get install gitlab-ce
Centos
yum install gitlab-ce
Через некоторое время вы должны получить сообщение о том, что установка завершена:
Перед началом работы с веб-интерфейсом GitLab CE требуется отредактировать конфигурационный файл GitLab. Откройте конфигурационный файл в текстовом редакторе:
nano /etc/gitlab/gitlab.rb
Найдите строку, которая содержит указание на используемое доменное имя:
external_url 'http://example.com'
Укажите своё доменное имя и протокол:
# (пример) external_url 'http://website.com'
Измените следующие строки:
nginx['enable'] = false # выключение встроенного nginx web_server['external_users'] = ['www-data'] # пользователь, от имени которого работает веб-сервер gitlab_rails['trusted_proxies'] = [ '127.0.0.1', '<внешний IP адрес сервера>' ] # параметр для определения IP адресов проксируемого сервера gitlab_workhorse['listen_network'] = "unix" # протокол для работы с веб-сервером gitlab_workhorse['listen_addr'] = "/var/opt/gitlab/gitlab-workhorse/socket" # интерфейс и порт для прослушивания
В CentOS в строке
web_server['external_users'] = ['www-data']
вместо значенияwww-data
используйтеnginx
Сохраните и закройте файл. Примените изменения командой реконфигурации GitLab:
gitlab-ctl reconfigure
Мы столкнулись с проблемой в Debian 10, во время выполнения данной команды. В процессе исполнения сборки должна работать команда sysctl , но она не работала. В директории /bin/ не было sysctl . Решение оказалось простым, нужно создать симлинк командой:
ln -s /usr/sbin/sysctl /bin/sysctl
После этого запустите команду сборки GitLab повторно.
Настройка Nginx
Откройте ваш конфигурационный файл
CentOS
nano /etc/nginx/conf.d/${WEBSITE_NAME}.conf
Debian/Ubuntu
nano /etc/nginx/sites-available/$WEBSITE_NAME
Вместо WEBSITE_NAME напишите ваше доменное имя, если ранее вы не задавали команду export WEBSITE_NAME=mycooldomain.com или export WEBSITE_NAME=$(hostname —fqdn)
Код вашего файла должен соответствовать следующему:
# переадресация с HTTP на HTTPS # server { if ($host = website.com) { return 301 https://$host$request_uri; } listen 80; listen [::]:80; server_name website.com; } # upstream-серверы для балансировки # upstream dirlist { ip_hash; # липкая балансировка по IP-клиента server 127.0.0.1:8081; server 127.0.0.1:8082; } # обработка SSL и соединение с upstream-серверами # server { listen 443 ssl; listen [::]:443 ssl; server_name website.com; ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; access_log /var/log/nginx/website_access.log; error_log /var/log/nginx/website_error.log; # все запросы отправляем на upstream location / { proxy_pass http://dirlist/; } }
Вместо домена website.com должно быть указано ваше настоящее доменное имя. В инструкциях про установку LEMP была указана команда для осуществления замены website.com на ваше доменное имя
Добавьте в конфигурационный файл следующие строки:
upstream gitlab-workhorse { server unix:/var/opt/gitlab/gitlab-workhorse/socket fail_timeout=0; }
вместо
upstream dirlist { ip_hash; # липкая балансировка по IP-клиента server 127.0.0.1:8081; server 127.0.0.1:8082; }
Измените блок location /
, чтобы он выглядел как указано ниже:
location / { client_max_body_size 0; gzip off; proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://gitlab-workhorse; }
Добавьте строку в двух блоках (с 80-ым портом и с 443-им)
server_tokens off;
После
server_name website.com;
Замените строку
root /var/www/website.com;
На следующую
root /opt/gitlab/embedded/service/gitlab-rails/public;
Добавьте следующие строки:
ssl on; ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m;
Перед строками
ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; # managed by Certbot
В итоге код в конфигурационном файле должен быть таким:
server { if ($host = website.com) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name website.com; server_tokens off; } upstream gitlab-workhorse { server unix:/var/opt/gitlab/gitlab-workhorse/socket fail_timeout=0; } server { listen 443 ssl; listen [::]:443 ssl; server_name website.com; server_tokens off; root /opt/gitlab/embedded/service/gitlab-rails/public; ssl on; ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; # managed by Certbot location / { client_max_body_size 0; gzip off; proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://gitlab-workhorse; } }
Сохраните файл и перезагрузите nginx командой service nginx restart
или systemctl restart nginx.service
.
Настройка GitLab через веб-интерфейс
Введите в адресной строке браузера свой адрес:
https://website.com
На главной странице введите пароль для учетной записи администратора в поля «New Password» , «Confirm new password» и нажмите на кнопку «Change your password».
Введите логин root, свой пароль и нажмите на кнопку «Sign in»
Настройка профиля
После авторизации нажмите на профиль левой кнопкой мыши в правом верхнем углу и нажмите на пункт «Profile».
Нажмите на кнопку «Edit profile» справа вверху.
Введите ваши данные (email, контакты, имя пользователя, аватар) и нажмите на кнопку «Update profile settings» , чтобы сохранить данные.
Изменение логина
Нажмите слева на ссылку «Account» .
Измените имя вашего аккаунта (логин) на любое другое (по желанию) и нажмите на кнопку «Update username».
Ограничение или блокировка открытой регистрации
На данный момент любой человек может зарегистрироваться в вашем проекте и участвовать в разработке. Вы можете ограничить доступ к проекту или отключить регистрацию совсем.
Нажмите на значок гаечного ключа сверху.
В разделе администратора нажмите на ссылку «Settings» слева
Вас могут заинтересовать следующие категории
В разделе «Sign-up restrictions» уберите отметку с пункта «Sign-up enabled» и сохраните изменения, чтобы убрать возможность регистрации.
Ограничение регистрации по домену
GitLab поддерживает ограничение по домену почты. Установите отметку в пункте » Send confirmation email on sign-up», введите доверенный домен в поле «Whitelisted domains for sign-ups» и нажмите на кнопку «Save changes», чтобы сохранить изменения.
Можно указать один домен или домен вместе с алиасами (субдоменами) : *.domain.ru (как на картинке)
Лимиты по созданию проектов (ограничение)
По умолчанию в GitLab любой пользователь может создать 100000 проектов. Откройте раздел «Account and limit» и измените значение в строке «Default projects limit» на 0 , нажмите на кнопку «Save changes». Значение «0» необходимо, когда нужно запретить пользователям создание проектов.
Добавление SSH ключа
Для работы с Git и GitLab можно указать публичный SSH ключ, чтобы не приходилось каждый раз вводить пароль вашей учетной записи.
Введите команду (если у вас уже существует ключ):
cat ~/.ssh/id_rsa.pub
Команда вернет следующий результат:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5onOVtATUjVkqk91lq+v0g5TzOZTMBp4avWLEZO/97jQa1PL7y4zx4iOmUDOdlux/gC+QSW0knti/yJrtzPJibDOedRJ9KkPPGpyD1JPqRGiy3eEY2gs755McfopX6U99aYjUVBgtcfX5AXp1+5Dd9jJEFhhEDDD/WEVfYERP1ZjybaRWy6vykkPa5W2YloXRIJq/kJk9ubtd5iGnRJfDZrkza2Q97ruNGWbeEty4rgDVNwb/Znz84qt9DzzI9rvlZTfB/9EApmB0Y7eu6vR3AG5T3gBZIAYGdurdqbIj/dI8nUduE9AImzlGxeACKs0iOi/037u5gvB gitlab@netpoint-dc.ml
Это пример ключа. У вас будут свои данные
Скопируйте публичный ключ полностью, перейдите в настройки профиля и нажмите на ссылку «SSH Keys» слева. Вставьте ключ в большое поле и напишите его название в поле Title. Для сохранения (добавления) ключа нажмите на кнопку «Add key».
Если публичного ключа у вас нет, вы получите примерно следующий ответ от команды:
cat: /home/gitlab/.ssh/id_rsa.pub: No such file or directory
Для генерации связки приватного и публичного ключа введите команду:
ssh-keygen -t rsa
У вас должно получиться примерно следующее:
На все вопросы в процессе генерации можно нажимать клавишу «Enter» или ввести подходящую вам директорию.
Снова введите команду для просмотра содержимого публичного ключа
cat ~/.ssh/id_rsa.pub
Скопируйте ключ и введите его в свойствах профиля.