Настройка GitLab Container Registry

Sergey Petrushin
2 min readJun 22, 2018

На начало 2021 года статья утратила актуальность в связи с тем, что поддержка Package Registry есть и работает из коробки в свежих версиях GitLab.

Задача: настроить и опубликовать GitLab Container Registry для доступа через reverse-proxy

Вводные данные:

  1. У нас уже есть установленный с помощью omnibus пакета GitLab
  2. ОС у нас Ubuntu
  3. Реестр будет находиться по адресу registry.domain.com

Решение:

  1. Получаем LE сертификат (предполагаем что у нас уже стоит certbot):
sudo certbot certonly - webroot - email sysadmins@domain.com -w /var/www/letsencrypt - expand -d registry.domain.com

2. Создаем конфигурацию для NGINX registry.domain.conf в /etc/nginx/conf.d (GitLab берет отсюда любые конфигурации и добавляет их к встроенному NGINX:

server {
listen 80;
server_name registry.domain.com;
access_log logs/registry.domain.access.log;
location / {
return 301 https://registry.domain.com$request_uri;
}
location ^~ /.well-known {
root /var/www/letsencrypt;
}
}
server {
listen 443 ssl;
server_name registry.domain.com;
root /var/www;
ssl on;
ssl_certificate /etc/letsencrypt/live/registry.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/registry.domain.com/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:E$
client_max_body_size 0;
chunked_transfer_encoding on;
add_header Strict-Transport-Security "max- age=31536000;includeSubDomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $http_host; # required for docker client's sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
proxy_buffering on;
}
}

3. Редактируем следующие параметры в конфигурации GitLab:

  • Внешний URL
registry_external_url 'https://registry.domain.com'
  • Настройки реестра (в моем случае реестр работает не на стандартном порту 5000 внутри сервера)
gitlab_rails['registry_enabled'] = false
gitlab_rails['registry_host'] = "registry.domain.com"
gitlab_rails['registry_path'] = "/var/big-data/gitlab-registry"
gitlab_rails['registry_api_url'] = "http://localhost:5050"
registry['enable'] = true
registry['registry_http_addr'] = "localhost:5050"
registry['debug_addr'] = "localhost:5051"
  • Настройка проксирования реестра (NGINX использует порт 8081 для доступа к реестру)
registry_nginx['enable'] = true
registry_nginx['listen_port'] = 8081
registry_nginx['listen_https'] = false
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"
}
  • Запускаем перенастройку GitLab:
sudo gitlab-ctl reconfigure

4. Проверяем что в свойствах проекта появилась вкладка Registry:

5. Проверяем что мы можем залогиниться и залить наш образ:

docker login registry.domain.comdocker build -t registry.domain.com/test/test-1 .
docker push registry.domain.com/test/test-1

--

--