Установка gitlab-ci

5
(1)

В данной статье не будет рассмотрена тонкая настройка параметров gitlab или его настройка за отдельным reverse proxy. Будет рассмотрена установка из linux пакетов и настройка gitlab registry в простом режиме, http + ip адрес и в более сложном варианте, с DNS и https. Данная инструкция именно для локальных игрищ, ну или первого старта.

Установка gitlab-ci

Я буду все делать внутри VM. Vagrant файл.

Ruby
 Vagrant.configure("2") do |config|
    config.vm.provider "virtualbox" do |vb|
      vb.gui = false
      vb.memory = 3096
      vb.cpus = 2
      vb.check_guest_additions = false
      config.vm.box_check_update = false
      config.vm.box = "bento/ubuntu-22.04"
    end
  
    config.vm.define "gitlab" do |node|
      node.vm.hostname = "gitlab"
      node.vm.network "public_network", ip: "192.168.10.202", bridge: "wlo1"
    end
  end

Поднимаем VM:

Bash
vagrant up

Устанавливаем нужные пакеты.

Bash
sudo apt update && sudo apt install install ca-certificates curl openssh-server postfix tzdata perl -y

Скачиваем установочный скрипт и запускаем.

Bash
cd /tmp && curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
bash script.deb.sh

Ставим сам gitlab-ce.

Bash
sudo apt install gitlab-ce

Настройки без HTTPS и DNS

Нужно отредактировать файл /etc/gitlab/gitlab.rb

Ruby
external_url 'http://192.168.10.202'
registry_external_url 'http://192.168.10.202:5050'
gitlab_rails['registry_enabled'] = true

Выполняем переконфигурацию.

Bash
gitlab-ctl reconfigure

Gitlab будет доступен по адресу, указанному в параметре external_url.

Нужно также добавить не защищенный registry в настройки докер демона.

Bash
 $ cat /etc/docker/daemon.json 
{
  "insecure-registries" : [ "192.168.10.202:5050" ]
}
systemctl restart docker

root пароль от gitlab можно получить тут

Bash
cat /etc/gitlab/initial_root_password |grep Password

Я его сразу поменял в UI. Создал тестовый репозиторий repo_1 и пробую подключиться к registry.

Bash
docker login 192.168.10.202:5050

Далее тегируем рандомно скачанный из интернета образ и заливаем в наш registry.

Bash
docker tag postgres:14.1-alpine 192.168.10.202:5050/root/repo_1/postgres:14.1-alpine
docker push 192.168.10.202:5050/root/repo_1/postgres:14.1-alpine

Вариант с HTTPS и DNS

Для развертывания своего локального DNS сервера можно воспользоваться вот этой моей статьей.

В dnsmasq дописываем нужный адрес и имя.

Bash
#/etc/dnsmasq.conf

address=/gitlab.dev.local/192.168.10.202
address=/gitreg.dev.local/192.168.10.202

Будет два отдельных домена для самого gitlab и для registry, это рекомендованный для настройки путь.

Далее просто добавляем в /etc/resolv.conf адрес этого днс сервера и выключаем системный резолвер.

Bash
systemctl stop systemd-resolved

Ну либо настраиваем его, мне проще и быстрее поправить resolv.conf.

Далее нам нужно сгенерировать SSL сертификаты для этих доменов. Тут важно учесть, чтобы в них было наличие SANs, иначе могут быть в дальшейшем проблем с x509 ошибкой, даже если сертификаты установлены в системные. Дело в том, что многие утилиты, библиотеки и так далее проверяют не только CN, но и SANs.

На машине с gitlab выполняем:

Bash
mkdir /etc/gitlab/ssl

Далее создаим конфигурацию из которой будет генерировать сертификаты для gitlab и для registry:

INI
[ req ]
default_bits       = 2048
prompt             = no
default_md         = sha256
distinguished_name = dn
req_extensions     = req_ext

[ dn ]
C  = RU
ST = Some-State
L  = Some-City
O  = Your Organization
CN = gitlab.dev.local

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = gitlab.dev.local

Тоже самое будет для регистри, только домен gitreg.

Далее создаем сертификаты:

Bash
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/gitlab/ssl/gitlab.key \
    -x509 -days 365 -out /etc/gitlab/ssl/gitlab.crt \
    -config /etc/gitlab/ssl/gitlab_cert.conf \
    -extensions req_ext
    
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/gitlab/ssl/gitreg.key \
    -x509 -days 365 -out /etc/gitlab/ssl/gitreg.crt \
    -config /etc/gitlab/ssl/gitreg_cert.conf \
    -extensions req_ext

Проверяем наличие поля SANs:

Bash
openssl x509 -in /etc/gitlab/ssl/gitreg.crt -text -noout | grep -A1 "Subject Alternative Name"

Выставляем нужные права на сертификаты:

Bash
sudo chmod 700 /etc/gitlab/ssl
sudo chmod 600 /etc/gitlab/ssl/git*.key
sudo chmod 644 /etc/gitlab/ssl/git*.crt

Далее вносим правки в /etc/gitlab/gitlab.rb

Bash
external_url 'https://gitlab.dev.local'
nginx['enable'] = true
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.key"

Этого достаточно для настроек самого gitlab. Теперь его можно открыть по доменному имени, в моем случае это gitlab.dev.local.

Переходим к настройке registry.

Bash
registry_external_url 'https://gitreg.dev.local'
registry_nginx['enable'] = true
registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitreg.crt"
registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitreg.key"

Выполняем переконфигурирование gitlab.

Bash
gitlab-ctl reconfigure

Добавляем данный домен в незащищенные для docker демона.

Bash
 $ cat /etc/docker/daemon.json 
{
  "insecure-registries" : [ "gitreg.dev.local" ]
}

Перезапускаем docker daemon.

Bash
systemctl restart docker

Тегируем образ и пробуем залить.

Bash
docker tag postgres:14.1-alpine gitreg.dev.local/root/repo_1/postgres:15.1-alpine-domain-test
docker push gitreg.dev.local/root/repo_1/postgres:15.1-alpine-domain-test

Насколько статья полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

Оставить комментарий