GitLab — это приложение с открытым исходным кодом, предназначенное для хранения репозиториев Git, также в нём есть дополнительные функции для разработки (например, отслеживание проблем). Gitlab можно разместить в своей собственной инфраструктуре. Приложение обеспечивает гибкость при развертывании репозиториев (внутреннего хранилища) для команды разработчиков, а также позволяет другим пользователям (это могут быть сторонние участники разработки) публиковать свои проекты.
GitLab легко установить на свою машину. В этом мануале мы разберём полную установку и настройку GitLab Community Edition на сервере Ubuntu.
Требования
- Сервер (мы используем Ubuntu 20.04) с пользователем sudo и базовым брандмауэром.
- Домен, указывающий на ваш сервер. В этой статье как пример используется домен your_domain, не забудьте заменить его на ваше доменное имя.
Минимальные системные требования GitLab:
- 4 ядра ЦП
- 4 ГБ ОЗУ
Не рекомендуется заменять ОЗУ на своп-пространство.
1: Установка зависимостей
Перед установкой GitLab нужно установить ПО, которое необходимо для его корректной работы. Всё это есть в репозиториях Ubuntu.
Сначала обновите локальный индекс пакетов:
sudo apt update
Затем с помощью этой команды установите зависимости:
sudo apt install ca-certificates curl openssh-server postfix tzdata perl
Скорее всего, некоторые из этих программ у вас уже установлены. При установке postfix выберите Internet-Site. На следующем экране введите домен сервера, чтобы система могла отправлять уведомления.
2: Установка GitLab
Для установки GitLab в вашу систему можно использовать скрипт.
Перейдите в каталог /tmp:
cd /tmp
Загрузите скрипт установки:
curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
Если хотите убедиться в безопасности скрипта, можете подробно изучить его содержимое. Он также есть в инструкции по установке GitLab.
less /tmp/script.deb.sh
Когда вы убедитесь в безопасности скрипта, запустите установку:
sudo bash /tmp/script.deb.sh
Скрипт настраивает сервер на поддержку репозиториев GitLab. Это позволит ему управлять пакетами GitLab с помощью стандартных инструментов управления, которые используются для других системных пакетов. Теперь можно установить приложение GitLab с помощью apt:
sudo apt install gitlab-ce
Это займет некоторое время, пока команда установит необходимые компоненты.
3: Настройка брандмауэра
Перед настройкой GitLab необходимо убедиться, что правила брандмауэра пропускают нужный веб-трафик. Если вы следовали мануалу, указанному в предварительных требованиях, на вашем сервере включен брандмауэр ufw.
Проверьте текущий статус брандмауэра:
sudo ufw status
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Текущие правила разрешают только SSH-трафик, доступ к другим службам ограничен. Так как GitLab — веб-приложение, нам нужно разрешить доступ по протоколу HTTP. Поскольку GitLab может запросить бесплатный сертификат TLS/SSL от Let’s Encrypt, вы также можете разрешить доступ по HTTPS.
HTTP и HTTPS доступны в файле /etc/services, поэтому вы можете разрешить трафик по имени. Если трафик OpenSSH еще не включен в этот список, нужно также добавить его:
sudo ufw allow http
sudo ufw allow https
sudo ufw allow OpenSSH
Чтобы убедиться, что доступ к этим службам предоставлен, проверьте вывод команды ufw status:
sudo ufw status
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443/tcp (v6) ALLOW Anywhere (v6)
Теперь веб-интерфейс GitLab доступен.
4: Настройка GitLab
Прежде чем начать работу с приложением, нужно обновить файл конфигурации и выполнить команду перенастройки. Откройте файл конфигурации GitLab текстовом редакторе, например в nano:
sudo nano /etc/gitlab/gitlab.rb
Найдите строку external_url. Укажите ваш домен и обязательно измените http на https, чтобы автоматически перенаправлять пользователей на защищенный сертификатом Let’s Encrypt сайт:
... ## GitLab URL ##! URL on which GitLab will be reachable. ##! For more details on configuring external_url see: ##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab ##! ##! Note: During installation/upgrades, the value of the environment variable ##! EXTERNAL_URL will be used to populate/replace this value. ##! On AWS EC2 instances, we also attempt to fetch the public hostname/IP ##! address from AWS. For more details, see: ##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html external_url 'https://your_domain' ...
Затем найдите letsencrypt[‘contact_emails’]. Этот параметр определяет список адресов электронной почты, по которым проект Let’s Encrypt может связаться с вами в случае проблем с вашим доменом. Рекомендуем указать свой адрес:
letsencrypt['contact_emails'] = ['8host@example.com']
После внесения изменений сохраните и закройте файл.
Теперь обновите параметры GitLab:
sudo gitlab-ctl reconfigure
Команда инициализирует GitLab, используя информацию о вашем сервере. Это полностью автоматизированный процесс, поэтому вам не придется предпринимать какие-либо действия. Этот процесс настроит сертификат Let’s Encrypt для вашего домена.
5: Настройка через веб-интерфейс
Первый вход в систему
Откройте домен вашего сервера GitLab в браузере:
https://your_domain
Вас встретит страница входа:
GitLab сгенерирует для вас безопасный пароль. Он хранится в папке, к которой может получить доступ пользователь sudo:
sudo nano /etc/gitlab/initial_root_password
# WARNING: This value is valid only in the following conditions # 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the firs$ # 2. Password hasn't been changed manually, either via UI or via command line. # # If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password. Password: YOUR_PASSWORD # NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
Вернитесь на страницу входа и введите свои учетные данные:
- Имя пользователя: root
- Пароль: [указан в /etc/gitlab/initial_root_password]
Нажмите Sign in. Появится страница, на которой будет предложено начать добавлять проекты:
Теперь можно настроить GitLab.
Изменение пароля
Изменить пароль нужно сразу после входа в систему. Для этого нажмите на значок в правом верхнем углу интерфейса и перейдите в раздел Edit Profile:
Вы попадете на страницу User Settings. Чтобы изменить автоматически сгенерированный пароль, нужно на левой панели навигации выбрать Password. После того, как придумаете надёжный пароль, нажмите кнопку Save password:
Вы вернетесь на экран входа с уведомлением, что пароль был изменен. Теперь заново войдите в GitLab:
Изменение настроек профиля
GitLab заполняет профиль данными по умолчанию, их нужно изменить, когда начинаете использовать программное обеспечение.
Чтобы редактировать профиль, нажмите на значок пользователя и выберите Edit Profile.
Вы можете указать актуальное имя и адрес электронной почты. Имя будет показываться другим пользователям, а электронная почта будет использоваться для уведомлений, действий Git через интерфейс и тд:
Внизу найдите и нажмите Update Profile. Будет предложено ввести пароль для подтверждения изменений.
На указанный адрес электронной почты будет отправлено письмо с подтверждением. Следуйте инструкциям в письме для подтверждения учетной записи GitLab.
Изменение имени аккаунта
Слева выберите Account:
Здесь можно включить двухфакторную аутентификацию и изменить имя пользователя. По умолчанию учетной записи администратора присваивается имя root. Нужно изменить его на другое имя. На административные привилегии это никак не повлияет.
Нажмите Update username. После подтвердите изменение.
В следующий раз при входе не забудьте использовать новое имя пользователя.
Добавление ключа SSH
Для взаимодействия с проектами GitLab можно включить ключи SSH в Git. Добавьте открытый ключ SSH в аккаунт GitLab.
На левой панели навигации выберите SSH Keys:
Если у вас уже есть пара ключей SSH на локальном компьютере, вы можете просмотреть их:
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 8host@mydesktop
Скопируйте этот текст и вставьте в поле Key в GitLab.
Если же вместо этого вы получили такое сообщение, значит, у вас не настроена пара SSH-ключей:
cat: /home/8host/.ssh/id_rsa.pub: No such file or directory
Чтобы создать такую пару, введите следующую команду:
ssh-keygen
Примите стандартные параметры и введите пароль для локальной защиты ключа:
Generating public/private rsa key pair. Enter file in which to save the key (/home/8host/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/8host/.ssh/id_rsa. Your public key has been saved in /home/8host/.ssh/id_rsa.pub. The key fingerprint is: SHA256:I8v5/M5xOicZRZq/XRcSBNxTQV2BZszjlWaIHi5chc0 8host@gitlab.docsthat.work The key's randomart image is: +---[RSA 2048]----+ | ..%o==B| | *.E =.| | . ++= B | | ooo.o . | | . S .o . .| | . + .. . o| | + .o.o ..| | o .++o . | | oo=+ | +----[SHA256]-----+
Теперь можно посмотреть открытый ключ:
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop
Вставьте этот блок текста в поле Key в GitLab. Придумайте описательное название и нажмите Add key.
Теперь вы можете управлять проектами и репозиториями GitLab со своего локального компьютера, не предоставляя при этом данных учетной записи GitLab.
6: Ограничение или отключение открытой регистрации
Сейчас ваши настройки позволяют любому пользователю зарегистрировать учетную запись на посадочной странице вашего экземпляра GitLab. Это полезно при разработке публичного проекта. Но в других случаях желательно установить более строгие настройки.
Перейдите в административную область, нажмите на меню в верхней панели навигации и выберите Admin в раскрывающемся списке:
Выберите Settings на левой панели навигации:
Откроются глобальные настройки GitLab. Здесь вы сможете настроить ряд параметров, в том числе и регистрацию новых пользователей и их уровень доступа.
Отключение регистрации
Чтобы полностью отключить регистрацию, прокрутите до раздела Sign-up Restrictions и нажмите Expand для просмотра параметров.
Затем снимите галочку с Sign-up enabled и нажмите Save:
Раздел регистрации будет удален с посадочной страницы GitLab.
Ограничение регистрации по домену
GitLab поддерживает адреса электронной почты, связанные с одним доменом, благодаря чему вы можете ограничить возможность регистрации на основе этого домена.
В разделе Sign-up Restrictions поставьте галочку Send confirmation email on sign-up box. Это позволит пользователям входить в систему только после того, как они подтвердят адрес электронной почты.
Затем добавьте домен или домены в поле Whitelisted domains for sign-ups box, по одному домену в строке. Можно использовать звездочку «*» для указания подстановочных доменов:
Сохраните изменения.
Ограничение возможности создания проекта
По умолчанию новые пользователи могут создавать до 10 проектов. Если вы хотите разрешить новым пользователям участие в разработке проекта, но при этом ограничить их право создавать новые проекты, перейдите в раздел Account и Limit Settings.
Измените ограничение Default projects limit на 0. Чтобы полностью запретить новым пользователям создавать проекты:
Новые пользователи по-прежнему могут быть добавлены в проекты вручную и у них будет доступ к внутренним или внешним проектам.
Сохраните изменения.
Новые пользователи смогут создавать учетные записи, но не смогут создавать проекты.
Обновление сертификатов Let’s Encrypt
По умолчанию в GitLab настроена запланированная задача для обновления сертификатов Let’s Encrypt после полуночи каждый четвертый день на основе external_url. Вы можете изменить эти параметры в файле /etc/gitlab/gitlab.rb.
Например, вы хотите обновлять сертификаты каждый седьмой день в 12:30. Сначала перейдите к файлу конфигурации:
sudo nano /etc/gitlab/gitlab.rb
Затем найдите в файле следующие строки, удалите # и обновите их следующим образом:
... ################################################################################ # Let's Encrypt integration ################################################################################ # letsencrypt['enable'] = nil letsencrypt['contact_emails'] = ['8host@8host'] # This should be an array of email addresses to add as contacts # letsencrypt['group'] = 'root' # letsencrypt['key_size'] = 2048 # letsencrypt['owner'] = 'root' # letsencrypt['wwwroot'] = '/var/opt/gitlab/nginx/www' # See http://docs.gitlab.com/omnibus/settings/ssl.html#automatic-renewal for more on these settings letsencrypt['auto_renew'] = true letsencrypt['auto_renew_hour'] = "12" letsencrypt['auto_renew_minute'] = "30" letsencrypt['auto_renew_day_of_month'] = "*/7" ...
Также можно отключить автоматическое обновление, установив для параметра letsencrypt[‘auto_renew’] значение false:
... letsencrypt['auto_renew'] = false ...
Но благодаря автоматическому обновлению не нужно беспокоиться о перебоях в обслуживании.
Заключение
Теперь у вас есть рабочий экземпляр GitLab, который размещен на сервере. Вы можете начать импортировать или создавать новые проекты, настраивать соответствующий уровень доступа. GitLab регулярно добавляет функции и обновляет свою платформу, поэтому обязательно заходите на страницу проекта, чтобы быть в курсе всех улучшений и важных