В этой статье мы рассмотрим, как настроить реестр образов GitLab Container Registry, находящийся за обратным прокси сервером NGINX. Предполагается, что у вас уже установлен GitLab с помощью пакета Omnibus. Согласно документации, Container Registry можно настроить на том же домене, на котором работает сам GitLab, но в случае работы GitLab за прокси сервером, необходимо завести отдельный домен для реестра образов, чтобы избежать конфликта доменных имен при настройке виртуальных хостов в GitLab Nginx.
Получаем валидный сертификат от Let’s Encrypt с помощью плагина webroot:
certbot certonly -a webroot -w /usr/share/nginx/html -d registry.example.com
Реестр образов будет доступен по адресу: registry.example.com. Добавляем А запись для домена реестра в DNS. Приводим конфиг виртуального хоста на сервере обратного прокси к следующему виду:
server {
listen 443 http2 ssl;
server_name registry.devopz.tech;
access_log /var/log/nginx/registry.access;
error_log /var/log/nginx/registry.error;
ssl_certificate /etc/letsencrypt/live/devopz.tech/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/devopz.tech/privkey.pem;
client_max_body_size 2000M;
location /.well-known {
root /tmp;
}
location / {
proxy_pass http://192.168.24.1;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_cache off;
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
}
}
server {
listen 80;
server_name registry.devopz.tech;
return 301 https://registry.devopz.tech$request_uri;
}
Проверяем и перечитываем конфиг nginx:
nginx -t
nginx -s reload
Теперь вносим изменения в конфигурацию сервера GitLab. По умолчанию подсистема "GitLab Container Registry" отключена. Она активируется, полностью автоматически настраиваясь оркестратором "Omnibus", при обнаружении в конфигурационном файле параметра "registry_external_url".
registry_external_url 'https://registry.example.com'
gitlab_rails['registry_enabled'] = true
registry['enable'] = true
registry_nginx['enable'] = true
registry_nginx['proxy_set_headers'] = {
"Host" => "$http_host",
"X-Real-IP" => "$remote_addr",
"X-Forwarded-For" => "$proxy_add_x_forwarded_for",
"X-Forwarded-Proto" => "https",
"X-Forwarded-Ssl" => "on"
}
registry_nginx['listen_port'] = 5050
registry_nginx['listen_https'] = false
Запускаем перенастройку GitLab: gitlab-ctl reconfigure
Проверяем на клиенте аутентификацию и заливку образа:
docker login registry.example.com
docker build -t registry.example.com/test/test-1 .
docker push registry.example.com/test/test-1