Есть вопросы?
Закажите звонок специалиста!
Есть вопросы?
Закажите звонок специалиста!
Gitlab обрел большую популярность в последние годы, т.к. является коробочным решением, позволяющим не только использовать функционал системы хранения версий кода, но и хранить образы во встроенном registry, настраивать пайплайны для сборок, тестирования и доставки кода и множество других функций. Так же gitlab возможно установить непосредственно в контур предприятия, что является важной и удобной возможностью с точки зрения безопасности и ускорения процессов внутри компании.
Рассмотрим этапы установки локальной копии сервера gitlab с доступным для хранения образов registry и настроенным раннером для выполнения пайплайнов на базе gitlab-ci.
yum install curl policycoreutils-python postfix curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash EXTERNAL_URL="https://gitlab.testefsol.space" yum install gitlab-ee
letsencrypt['enable'] = false external_url 'https://gitlab.testefsol.space' letsencrypt['contact_emails'] = ['[email protected]'] registry_external_url 'https://registry.testefsol.space' 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'] = 80 registry_nginx['listen_https'] = false
concurrent = 1 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] pre_build_script = "export DOCKER_HOST=tcp://docker:2375" environment = ["DOCKER_DRIVER=overlay2", "DOCKER_TLS_CERTDIR="] name = "docker" url = "https://gitlab.testefsol.space" token = "KhvKzR7jJcrqoyy9Q9Pa" executor = "docker" [runners.custom_build_dir] [runners.cache] [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure] [runners.docker] tls_cert_path = "" tls_verify = false image = "docker:latest" privileged = true disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache"] shm_size = 0
Настраиваем второй сервер с nginx, который будет проксировать на наш gitlab трафик. В качестве операционной системы так же используем centos7, выделяемые ресурсы минимальны, 2 ядра и 512 МБ ОЗУ.
yum install nginx systemctl enable nginx
yum install certbot certbot certonly
# renew_before_expiry = 30 days version = 1.10.1 archive_dir = /etc/letsencrypt/archive/registry.testefsol.space cert = /etc/letsencrypt/live/registry.testefsol.space/cert.pem privkey = /etc/letsencrypt/live/registry.testefsol.space/privkey.pem chain = /etc/letsencrypt/live/registry.testefsol.space/chain.pem fullchain = /etc/letsencrypt/live/registry.testefsol.space/fullchain.pem # Options used in the renewal process [renewalparams] account = e7fdf98672819c725adb9ebffd6d144e authenticator = webroot installer = None post_hook = nginx -s reload [[webroot_map]] www.registry.testefsol.space = /web/site/registry.testefsol.space/www registry.testefsol.space = /web/sites/registry.testefsol.space/www
И
# renew_before_expiry = 30 days version = 1.10.1 archive_dir = /etc/letsencrypt/archive/gitlab.testefsol.space cert = /etc/letsencrypt/live/gitlab.testefsol.space/cert.pem privkey = /etc/letsencrypt/live/gitlab.testefsol.space/privkey.pem chain = /etc/letsencrypt/live/gitlab.testefsol.space/chain.pem fullchain = /etc/letsencrypt/live/gitlab.testefsol.space/fullchain.pem # Options used in the renewal process [renewalparams] #authenticator = standalone account = e7fdf98672819c725adb9ebffd6d144e #manual_public_ip_logging_ok = None #server = https://acme-v02.api.letsencrypt.org/directory authenticator = webroot installer = None #account = e9c86e6aa57b45f9614bc7c0015927a5 post_hook = nginx -s reload [[webroot_map]] www.gitlab.testefsol.space = /web/site/gitlab.testefsol.space/www gitlab.testefsol.space = /web/sites/gitlab.testefsol.space/www
# Cert Renewal 30 2 * * * root /usr/bin/certbot renew --post-hook "nginx -s reload" >> /var/log/le-renew.log
Рисунок 1 - Конфигурация nginx
server { listen 443 ssl http2; server_name gitlab.testefsol.space; access_log /var/log/nginx/gitlab.testefsol.space-access.log; error_log /var/log/nginx/gitlab.testefsol.space-error.log; ssl on; ssl_certificate /etc/letsencrypt/live/gitlab.testefsol.space/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/gitlab.testefsol.space/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; location /.well-known { root /tmp; } location / { proxy_pass https://172.28.7.112; proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off; proxy_set_header X-Forwarded-Proto $scheme; 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-Frame-Options SAMEORIGIN; }
И
server { listen 443 http2 ssl; server_name registry.testefsol.space; access_log /var/log/nginx/registry.testefsol.space-access.log; error_log /var/log/nginx/registry.testefsol.space-error.log; ssl_certificate /etc/letsencrypt/live/registry.testefsol.space/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/registry.testefsol.space/privkey.pem; # limit_conn perip 50; location /.well-known { root /tmp; } location / { proxy_pass http://172.28.7.112:80; 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.testefsol.space; return 301 https://registry.testefsol.space$request_uri; }
systemctl start nginx
Проверяем доступ к нашему gitlab с помощью браузера ( для доступа по доменному имени из локальной сети дополнительно требуется настройка так называемого hairpin nat на сетевом оборудовании, данная задача выходит за рамки данной инструкции):
Рисунок 2 - Проверка доступности веб-интерфейса сервера gitlab
Таким образом, получили готовую к использованию инсталляцию сервера gitlab с репозиторием для докер образов, раннером для выполнения CI/CD пайплайнов.
Есть DevOps-задачи? Мы можем предложить решение любых вопросов нашими специалистами DevOps-аутсорсинга.