В данной статье не будет рассмотрена тонкая настройка параметров gitlab или его настройка за отдельным reverse proxy. Будет рассмотрена установка из linux пакетов и настройка gitlab registry в простом режиме, http + ip адрес и в более сложном варианте, с DNS и https. Данная инструкция именно для локальных игрищ, ну или первого старта.
Установка gitlab-ci
Я буду все делать внутри VM. Vagrant файл.
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:
vagrant up
Устанавливаем нужные пакеты.
sudo apt update && sudo apt install install ca-certificates curl openssh-server postfix tzdata perl -y
Скачиваем установочный скрипт и запускаем.
cd /tmp && curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
bash script.deb.sh
Ставим сам gitlab-ce.
sudo apt install gitlab-ce
Настройки без HTTPS и DNS
Нужно отредактировать файл /etc/gitlab/gitlab.rb
external_url 'http://192.168.10.202'
registry_external_url 'http://192.168.10.202:5050'
gitlab_rails['registry_enabled'] = true
Выполняем переконфигурацию.
gitlab-ctl reconfigure
Gitlab будет доступен по адресу, указанному в параметре external_url.
Нужно также добавить не защищенный registry в настройки докер демона.
$ cat /etc/docker/daemon.json
{
"insecure-registries" : [ "192.168.10.202:5050" ]
}
systemctl restart docker
root пароль от gitlab можно получить тут
cat /etc/gitlab/initial_root_password |grep Password
Я его сразу поменял в UI. Создал тестовый репозиторий repo_1 и пробую подключиться к registry.
docker login 192.168.10.202:5050
Далее тегируем рандомно скачанный из интернета образ и заливаем в наш registry.
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 дописываем нужный адрес и имя.
#/etc/dnsmasq.conf
address=/gitlab.dev.local/192.168.10.202
address=/gitreg.dev.local/192.168.10.202
Будет два отдельных домена для самого gitlab и для registry, это рекомендованный для настройки путь.
Далее просто добавляем в /etc/resolv.conf адрес этого днс сервера и выключаем системный резолвер.
systemctl stop systemd-resolved
Ну либо настраиваем его, мне проще и быстрее поправить resolv.conf.
Далее нам нужно сгенерировать SSL сертификаты для этих доменов. Тут важно учесть, чтобы в них было наличие SANs, иначе могут быть в дальшейшем проблем с x509 ошибкой, даже если сертификаты установлены в системные. Дело в том, что многие утилиты, библиотеки и так далее проверяют не только CN, но и SANs.
На машине с gitlab выполняем:
mkdir /etc/gitlab/ssl
Далее создаим конфигурацию из которой будет генерировать сертификаты для gitlab и для registry:
[ 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.
Далее создаем сертификаты:
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:
openssl x509 -in /etc/gitlab/ssl/gitreg.crt -text -noout | grep -A1 "Subject Alternative Name"
Выставляем нужные права на сертификаты:
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
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.
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.
gitlab-ctl reconfigure
Добавляем данный домен в незащищенные для docker демона.
$ cat /etc/docker/daemon.json
{
"insecure-registries" : [ "gitreg.dev.local" ]
}
Перезапускаем docker daemon.
systemctl restart docker
Тегируем образ и пробуем залить.
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