Содержание
GitLab
Добавление репозитория:
wget --quiet https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey -O - | sudo apt-key add - echo deb https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ xenial main | sudo tee /etc/apt/sources.list.d/gitlab.list sudo apt update
Установка:
sudo EXTERNAL_URL="http://git.domain.com" apt-get install gitlab-ce
Nginx
Сбросить пароль
Заходим в консоль Ruby on Rails:
sudo gitlab-rails console production
Задаём пользователя и пароль к нему (пример для root):
user = User.where(id: 1).first user.password = 'secret_pass' user.password_confirmation = 'secret_pass' user.save!
https://docs.gitlab.com/ee/security/reset_root_password.html
Настройка
Загрузка внешнего конфигурационного файла
Пример загрузки конфигурационного файла /home/admin/external_gitlab.rb:
В /etc/gitlab/gitlab.rb добавить:
from_file "/home/admin/external_gitlab.rb"
Интеграция с LDAP
Конфигурацию приводим к виду (пример для AD):
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main: # 'main' is the GitLab 'provider ID' of this LDAP server
label: 'LDAP'
host: 'domain.com'
port: 389
uid: 'sAMAccountName'
bind_dn: 'CN=gitlab,OU=SERVICE,DC=domain,DC=com'
password: 'пароль_bind_dn'
encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
verify_certificates: false
active_directory: true
allow_username_or_email_login: false
block_auto_created_users: true
base: 'OU=IT,OU=AE Staff,OU=Staff,DC=domain,DC=com'
user_filter: '(&(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'
attributes:
username: ['uid', 'userid', 'sAMAccountName']
email: ['mail', 'email', 'userPrincipalName']
name: 'cn'
first_name: 'givenName'
last_name: 'sn'
EOS
Обновляем конфигурацию:
sudo gitlab-ctl reconfigure
Проверка подключения:
sudo gitlab-rake gitlab:ldap:check
https://docs.gitlab.com/ce/administration/auth/how_to_configure_ldap_gitlab_ce/index.html
Rack attack. Защита от перебора
Пример для блокировки IP на час, которые сделали 10 попыток входа в течении 1 минуты («127.0.0.1»,«192.168.0.0/16» при этом не учитываются):
В /etc/gitlab/gitlab.rb редактируем:
gitlab_rails['rack_attack_git_basic_auth'] = {
'enabled' => true,
'ip_whitelist' => ["127.0.0.1","192.168.0.0/16"],
'maxretry' => 10,
'findtime' => 60,
'bantime' => 3600
}
Обновляем конфигурацию:
sudo gitlab-ctl reconfigure
Значения:
- enabled: По умолчанию установленно в true. Для отключения Rack Attaсk устанавливаем disable .
- ip_whitelist: Белый список IP адресов (запретить блокирование).
- maxretry: Максимальное количество попыток в указанное время.
- findtime: Период времени в котором будут считаться попытки.
- bantime: Время в секундах на которое заблокируется IP.
SSH keys
- Создать пару ключей:
ssh-keygen -t rsa -b 4096 -C "gitlab@domain.com" -P "" -q -f ~/.ssh/gitlab_rsa
- Копировать в буфер публичный ключ ~/.ssh/gitlab_rsa.pub:
xclip -sel clip < ~/.ssh/gitlab_rsa.pub
- Добавить пользователю публичный ключ (http://git.domain.com/profile/keys)
- При подключении использовать имя пользователя git. Проверить:
ssh -T -o IdentitiesOnly=yes -i ~/.ssh/gitlab_rsa -F /dev/null git@git.domian.com -p2222
Для постоянного подключения по ключу создать ~/.ssh/config:
Host git.domain.com User git Hostname git.domain.com Port 2222 PreferredAuthentications publickey IdentityFile ~/.ssh/gitlab_rsa TCPKeepAlive yes IdentitiesOnly yes
Проверить:
ssh -T git.domain.com
Пример строки для подключения в CI: ssh://git.domain.com:2222/project/patient-account.git
Чтение секретов Vault
Пример использования API Vault для GitLab
https://docs.gitlab.com/ce/ci/examples/authenticating-with-hashicorp-vault/index.html
Опции
gitlab_rails['username_changing_enabled'] = false - отключить изменение логина пользователем
gitlab_rails['gitlab_default_can_create_group'] = false - запретить новым пользователям создавать группы
Admin area → Setting → General → Sign-up restrictions: Sign-up enabled - отключить/включить регистрацию на странице входа
Container Registry
Для включения встроенного сервиса Docker Registry, добавить в gitlab.rb:
registry_external_url 'http://registry.git.domain.com:5005' gitlab_rails['registry_enabled'] = true
после переконфигурации Registry доступен в insecure режиме.
Очистить Registry от удалённых тэгов:
gitlab-ctl registry-garbage-collect -m
https://docs.gitlab.com/ce/administration/packages/container_registry.html
https://docs.gitlab.com/omnibus/maintenance/#container-registry-garbage-collection
Container Registry API
API для просмотра списков контейнеров их детализации и удаления
https://docs.gitlab.com/ce/api/container_registry.html
Показать id и имя всех проектов:
curl --header "PRIVATE-TOKEN: 41Mdoaejw2SvJnjDrp53" "http://git.domain.com/api/v4/projects" | jq '.[]|.id,.name'
Показать список тегов в registry проекта:
curl -k --header "PRIVATE-TOKEN: 41Mdoaejw2SvJnjDrp53" "https://git.domain.com/api/v4/projects/5/registry/repositories/5/tags" | jq
Удалить тэги в registry старше 30 дней по шаблону '.*' исключая шаблон 'stable.*' и оставляя не менее 3-х тэгов:
curl -k --request DELETE --data 'name_regex=.*' --data 'name_regex_keep=stable.*' --data 'keep_n=3' --data 'older_than=30d' --header "PRIVATE-TOKEN: VywyTf4oc6-2JyasiQjv" "https://git.domain.com/api/v4/projects/5/registry/repositories/5/tags"
Docker
GitLab
Пример запуска GitLab:
docker run --detach --restart always \ --hostname git.domain.com \ --publish 443:443 --publish 80:80 --publish 2222:22 --publish 5005:5005 \ --volume /data/docker/gitlab/etc_gitlab:/etc/gitlab \ --volume /data/docker/gitlab/var_log_gitlab:/var/log/gitlab \ --volume /data/docker/gitlab/var_opt_gitlab:/var/opt/gitlab \ --volume /data/docker/registry/certs:/certs \ --volume /data/docker/registry/var_lib_registry:/registry\ --name gitlab gitlab/gitlab-ce:latest
Backup/Restore
Резервное копирование:
docker exec -t gitlab gitlab-backup create
Для полного резервного копирования необходимо дополнительно скопировать файлы:
- /etc/gitlab/gitlab-secrets.json
- /etc/gitlab/gitlab.rb
Версии gitlab должны совпадать с той версией с которой делалась резервная копия и на которую идёт восстановление.
Восстановление:
- Скопировать файл бэкапа (пример 1580399970_2020_01_30_12.7.2_gitlab_backup.tar) с которого будет восcтановлен gitlab в /var/opt/gitlab/backups/ и назначить ему права:
sudo cp 1580399970_2020_01_30_12.7.2_gitlab_backup.tar /data/docker/gitlab/var_opt_gitlab/backups/ docker exec gitlab chown git.git /var/opt/gitlab/backups/1580399970_2020_01_30_12.7.2_gitlab_backup.tar
- Остановить службы подключаемые к базе и проверить:
docker exec gitlab gitlab-ctl stop unicorn docker exec gitlab gitlab-ctl stop puma docker exec gitlab gitlab-ctl stop sidekiq docker exec gitlab gitlab-ctl status
- Восстановить
docker exec -it gitlab gitlab-backup restore
- Восстановить gitlab-secrets.json и gitlab.rb
- Перегрузить конфигурацию, gitlab и проверить
docker exec gitlab gitlab-ctl reconfigure docker exec gitlab gitlab-ctl restart docker exec gitlab gitlab-rake gitlab:check SANITIZE=true
gitlab-runner
Регистрация Runner'а:
docker run --rm -t -i -v /data/docker/gitlab-runner/etc_gitlab-runner:/etc/gitlab-runner gitlab/gitlab-runner:alpine register
Во время регистрации вводим URL, token со страницы GiTLab → Admin Area → Overview → Runners
Далее вводим description, tags, executor (shell, docker-ssh+machine, docker, parallels, ssh, virtualbox, docker+machine, kubernetes, custom, docker-ssh)
Для executor docker указать образ по умолчанию (например для dotnet: mcr.microsoft.com/dotnet/core/sdk:3.1)
Если из контейнера нужен доступ через прокси, добавляем в /etc/gitlab-runner/config.toml в секцию [[runners]]:
environment = ["https_proxy=http://d2proxy.domain.com:3128", "http_proxy=http://d2proxy.domain.com:3128", "HTTPS_PROXY=d2proxy.domain.com:3128", "HTTP_PROXY=d2proxy.domain.com:3128"]
Если будет использоваться режим docker-in-docker, то при регистрации использовать привилегированный режим, добавить:
--docker-privileged
или добавить в /etc/gitlab-runner/config.toml в секцию [runners.docker]:
privileged = true
Запуск зарегистрированного Runner'а:
docker run -d --name gitlab-runner --restart always -v /data/docker/gitlab-runner/etc_gitlab-runner:/etc/gitlab-runner gitlab/gitlab-runner:alpine
https://docs.gitlab.com/runner/register/index.html#docker
https://docs.gitlab.com/runner/install/docker.html
https://docs.gitlab.com/runner/configuration/proxy.html
https://docs.gitlab.com/runner/executors/docker.html#use-docker-in-docker-with-privileged-mode
https://about.gitlab.com/releases/2019/07/31/docker-in-docker-with-docker-19-dot-03/ - Configure GitLab Runner to use TLS or Explicitly turn off TLS
Ссылки
https://packages.gitlab.com/app/gitlab/gitlab-ce/search?filter=debs&q=&dist=ubuntu%2Fxenial - Поиск пакетов
https://source.isimplelab.com/help/ci/docker/using_docker_build.md - Использование Docker Build
