GitLab

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:33, 24 ноября 2016.
GitLab
GitLab logo.png
Gitlab screenshot december 2015.png
Type of site
Git repository hosting service
Collaborative revision control
Available in Английский язык
Owner GitLab Inc.
Alexa rank Increase 4,288 (July 2016)
Commercial Yes
Registration Optional
Launched 2011; 10 years ago (2011)
Current status Online

Первоначально Gitlab упоминался как свободный репозиторий-менеджер. Сегодня это имя может означать:

  • GitLab CE: программное обеспечение, веб-менеджер по репозиторий-менеджер с Wiki и функциями отслеживания проблемы, используя лицензию с открытым исходным кодом.
  • GitLab EE: программное обеспечение, основывается на GitLab CE с дополнительным несвободным кодом, используя коммерческую лицензию.
  • GitLab.com: веб-сайт, выполняет GitLab EE, размещенные учетные записи предложений, подобные GitHub.
  • GitLab B.V.: компания.
  • GitLab Inc.: новое имя компании.

История

Программное обеспечение было написано украинцем по имени Дмитрий Запорожец. Код был написан на Ruby. По состоянию на май 2016 у компании есть 100 оплачиваемых сотрудников и больше чем 1300 участников с открытым исходным кодом. Используется больше чем 100,000 организаций, включая Научно-исследовательский центр Юлиха, НАСА, Alibaba, Invincea, СМИ O’Reilly, Leibniz-Rechenzentrum (LRZ) и т. д.

Первоначально, продукт назвали GitLab и был полностью бесплатным программным обеспечением с открытым исходным кодом, распределенным в соответствии с Лицензией MIT. В июле 2013 продукт был разделен на:

  • GitLab CE: выпуск сообщества
  • GitLab EE: Enterprise Edition

В то же время лицензия GitLab CE и GitLab EE оставалась бесплатным программным обеспечением с открытым исходным кодом, распределенным в соответствии с Лицензией MIT. В феврале 2014 GitLab объявил о принятии открытой модели основного бизнеса. GitLab EE установлен в соответствии с собственной лицензией и содержит функции, не существующие в версии CE. В июле 2015 компания повысила дополнительные $1.5 миллиона в финансировании семени. Клиенты по состоянию на 2015 включали Alibaba Group, IBM и SpaceX. В сентябре 2015 GitLab повысил $4 миллиона последовательно финансирование из Khosla Ventures.

Установка

Процесс установки достаточно долгий и требует root-доступа к серверу. Для стабильной работы GitLab требует от сервера как минимум двухъядерный процессор и 2 Гб ОЗУ. Такая конфигурация обеспечит быструю работу приложения и поддержку до 500 пользователей. GitLab поддерживает множество различных дистрибутивов Linux, но инструкция по установке рассчитана на Debian/Ubuntu.
Установку можно разбить на несколько этапов:

  • установка необходимых системных утилит
  • установка Ruby
  • создание пользователя для SSH-подключений к GitLab
  • установка и настройка GitLab Shell
  • установка и настройка базы данных
  • установка и настройка самого GitLab
  • установка и настройка Nginx

Список внушительный, однако подавляющее большинство этапов состоят исключительно из консольных команд и занимают считаные секунды. Тем более, что какие-то из компонентов из списка выше на большинстве серверов уже установлены и им требуется лишь незначительная конфигурация.

Установка необходимых системных утилит

Для установки и настройки всех компонент, необходимых для работы GitLab, нам понадобятся: утилита sudo, набор библиотек для компиляции Ruby, актуальная версия Git и почтовый сервер. Перед установкой каких-либо пакетов через утилиту apt-get, следует обновить список источников и существующие пакеты, выполнив в консоли такие команды:

$ sudo apt-get update -y
$ sudo apt-get upgrade -y  

Здесь и далее команды нужно выполнять от имени пользователя root. Первой в списке необходимых компонент идет утилита sudo. Она установлена на большинстве эксплуатируемых серверов. Но если вдруг ваш сервер совсем чист и непорочен, для ее установки необходимо выполнить в консоли следующую команду:

$ sudo apt-get install sudo -y 

Теперь установим библиотеки для компиляции Ruby:

$ sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate 

Убедитесь, что на сервере установлен git, и его версия не ниже 1.7.10:

$ sudo apt-get install -y git-core
$ git --version 

Если установлена устаревшая версия, нужно удалить ее:

$ sudo apt-get remove git-core 

Если git не установлен либо был удален предыдущей командой, нужно скачать и скомпилировать его:

# Устанавливаем библиотеки, необходимые для компиляции
$ sudo apt-get install -y libcurl4-openssl-dev libexpat1-dev gettext libz-dev libssl-dev build-essential

# Загружаем и компилируем исходники
$ cd /tmp
$ curl --progress https://git-core.googlecode.com/files/git-1.9.0.tar.gz | tar xz
$ cd git-1.9.0/
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install 

Обратите внимание на версию git. На момент написания это версия 1.9.0. Уточнить, какая версия git является актуальной, можно на официальной странице проекта. И наконец, если не установлен почтовый сервер, вот команда для его установки:

$ sudo apt-get install -y postfix 

В процессе установки почтовый сервер попросит себя сконфигурировать. Для этого нужно выбрать на появившемся экране пункт «Internet Site» и указать правильное имя хоста — IP-адрес или доменное имя.

Установка Ruby

Для работы GitLab требуется Ruby 2.1.6. Если у вас уже установлен Ruby 1.8, его необходимо удалить перед установкой новой версии:

$  sudo apt-get remove ruby1.8 

Теперь скачаем и скомпилируем Ruby 2.1.6:

$ mkdir /tmp/ruby && cd /tmp/ruby 
$ curl -L --progress http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.6.tar.gz | tar xz
$ cd ruby-2.1.6
$ ./configure --disable-install-rdoc
$ make
$ sudo make install ##!g##

Помимо самого Ruby нам понадобится библиотека bundler:

$ sudo gem install bundler --no-ri --no-rdoc 

Создание пользователя для SSH-подключений к GitLab

Создадим для SSH-подключений пользователя git:

$ sudo adduser --disabled-login --gecos 'GitLab' git 

Установка и настройка GitLab Shell

GitLab Shell — это отдельная утилита для управления SSH-доступом и репозиториями. Для ее установки необходимо выполнить следущие команды:

  
# Переходим в домашнюю директорию
$ cd /home/git
  # Загружаем исходный код
$ sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-shell.git -b v1.9.3
$ cd gitlab-shell
  # Создаем конфигурационный файл
$ sudo -u git -H cp config.yml.example config.yml 

После выполнения команд нужно отредактировать файл config.yml. В нем в настройке gitlab_url нужно указать будущий адрес GitLab, например:

$ gitlab_url: http://gitlab.example.com/" 

Теперь устанавливаем и инициализируем утилиту:

$ sudo -u git -H ./bin/install 

Установка и настройка базы данных

Для работы GitLab требует базу данных. Разработчики GitLab рекомендуют использовать PostgreSQL, однако поддержка MySQL также присутствует. Для установки PostgreSQL, выполните:

$ sudo apt-get install -y postgresql-9.1 postgresql-client libpq-dev 

Для установки MySQL:

$ sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
$ sudo mysql_secure_installation 

Во время установки необходимо будет придумать и ввести пароль root пользователя MySQL.

Теперь нужно создать саму базу данных для работы GitLab. Для этого нужно выполнить несколько SQL-запросов. Начнем с PostgreSQL. В командной строке это делается так:

  
# Логинимся в PostgreSQL
$ sudo -u postgres psql -d template1

# Создаем пользователя для GitLab
$ template1=# CREATE USER git;

# Создаем базу данных для GitLab и даем доступ к ней созданному пользователю
$ template1=# CREATE DATABASE gitlabhq_production OWNER git;

# Выходим из PostgreSQL
$ template1=# \q
# Теперь MySQL (не забудьте вместо $password поставить хороший, крепкий пароль):

# Логинимся в MySQL
$ mysql -u root -p

# Тут нужно будет ввести пароль root пользователя MySQL
# Создаем пользователя для GitLab
# вводить 'mysql>' не нужно, он показан для наглядности процесса
# и не забудьте в следущей команде заменить $password на настоящий пароль!
$ mysql> CREATE USER 'git'@'localhost' IDENTIFIED BY '$password';

# Устанавливаем тип базы данных
$ mysql> SET storage_engine=INNODB;

# Создаем базу данных для GitLab
$ mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

# Даем доступ к созданной базе данных пользователю GitLab
$ mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'git'@'localhost'

# Выходим из MySQL
$ mysql> \q 

Установка и настройка самого GitLab

Этот этап самый сложный, поэтому будем выполнять его пошагово. Первый шаг — загрузка исходников GitLab. Делается это через git и выглядит примерно вот так:

# Переходим в домашнюю директорию
$ cd /home/git

# Загружаем GitLab
$ sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 6-8-stable gitlab 

Обратите внимание на флаг -b 6-8-stable во второй команде. На момент написания этой статьи актуальным является GitLab версии 6.8. Однако рекомендую перед установкой уточнить эту информацию на официальном сайте проекта и подставить в эту команду правильную версию. Кроме того, вместе с GitLab периодически обновляется и GitLab Shell, это также нужно учесть.

Второй шаг — развертывание и настройка. Сюда входят создание необходимых файлов конфигурации, создание необходимых приложению папок и установка прав доступа на уже существующие папки:

# Переходим в папку GitLab
$ cd /home/git/gitlab

# Создаем файл конфигурации для GitLab
$ sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

# Выставляем владельца и права на папки log/ и tmp/
$ sudo chown -R git log/
$ sudo chown -R git tmp/
$ sudo chmod -R u+rwX log/
$ sudo chmod -R u+rwX tmp/

# Создаем папку для сателлитов и выставляем на нее права
$ sudo -u git -H mkdir /home/git/gitlab-satellites
$ sudo chmod u+rwx,g+rx,o-rwx /home/git/gitlab-satellites

# Выставляем права на папки tmp/pids/ и tmp/sockets/  
$ sudo chmod -R u+rwX tmp/pids/
$ sudo chmod -R u+rwX tmp/sockets/

# Выставляем праав на папку public/uploads/
$ sudo chmod -R u+rwX  public/uploads

# Создаем файл конфигурации для сервера Unicorn
$ sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb

# Создаем файл конфигурации для Rack attack
$ sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb 

После выполнения команд нужно отредактировать файл config/gitlab.yml. В нем нужно указать следующие настройки:

Настройка Раздел Описание Пример
host gitlab Cюда надо вписать адрес, по которому будет доступен GitLab gitlab.example.com
email_from gitlab Тут нужно прописать email, с которого будет отправляться почта gitlab@example.com
support_emal gitlab Адрес тех. поддержки. Если его закомментировать, будет использован адрес из email_from support@example.com
bin_path git Установите значение /usr/local/bin/git, если компилировали git вручную на первом этапе установки /usr/local/bin/git

E-mail адрес из email_from также нужно установить в конфигурации git:

$ sudo -u git -H git config --global user.name "GitLab"
$ sudo -u git -H git config --global user.email "gitlab@example.com"
$ sudo -u git -H git config --global core.autocrlf input 

Теперь нужно сконфигурировать базу данных. Для PostgreSQL:

$ sudo -u git cp config/database.yml.postgresql config/database.yml
$ sudo -u git -H chmod o-rwx config/database.yml 

Для MySQL:

$ sudo -u git cp config/database.yml.mysql config/database.yml
$ sudo -u git -H chmod o-rwx config/database.yml 

Не забудьте указать в файле config/database.yml логин и пароль для доступа к вашей базе данных. Следущий шаг — установка зависимостей. Делается это одной простой командой. Если вы используете PostgreSQL:

$ cd /home/git/gitlab
$ sudo -u git -H bundle install --deployment --without development test mysql aws 

Если используете MySQL:

$ cd /home/git/gitlab
$ sudo -u git -H bundle install --deployment --without development test postgres aws 

Теперь нужно инициализировать приложение. Сюда входят инициализация базы данных и установка ротации логов:

$ sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
# Тут нужно будет ввести yes для подтверждения создания таблиц в базе данных

# Создаем инициализационный скрипт
$ sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab

# Добавляем GitLab в местный авторан
$ sudo update-rc.d gitlab defaults 21

# Создаем ротатор логов
$ sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab 

Теперь осталось проверить статус приложения и запустить его. Проверяется статус такой командой:

$ sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production 

Корректно установленное приложение должно выдавать примерно следущее:

Страница файлов проекта в GitLab

Если все хорошо — приложение можно запускать:

$ sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
$ sudo service gitlab start 

Установка и настройка Nginx

Последний этап установки GitLab — установка и настройка сервера Nginx. Установка выглядит так:

$ sudo apt-get install -y nginx 

Копируем конфигурационный файл Nginx из дистрибутива GitLab:

$ sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
$ sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab 

Не забудьте указать правильный адрес вашего GitLab в файле /etc/nginx/sites-available/gitlab в настройке server_name раздела server. Мне также пришлось указать IP-адрес сервера в настройке listen раздела server. Теперь нужно перезапустить сервер:

$ sudo service nginx restart 

Готово! Установка и настройка GitLab окончена. Убедитесь, что все правильно настроено, выполнив команду:

$ sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production 

Если все пункты списка зеленые — значит, приложение установлено и настроено верно и можно начинать работу. Для этого зайдите по адресу приложения и авторизуйтесь, используя данные по умолчанию:

$ Логин:  root
$ Пароль: ********

Источники