Любая команда разработчиков рано или поздно сталкивается с необходимостью использования системы контроля версий. Иначе отслеживать изменения в коде проектов становится сложно. Причем чем крупнее проекты и команды — тем сложнее. Сегодня систем контроля версий существует великое множество, одна лучше другой. Так что же выбрать? Наша команда остановилась на GitLab.

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

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

Страница прав доступа к проекту

Техническая справка

Git — распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux. Git используют такие проекты, как Chromium, jQuery, PHP, MediaWiki и прочие. Программа является свободной и выпущена под лицензией GNU GPL версии 2.

Статья о Git на Википедии

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

Установка

Установку можно разбить на несколько этапов:

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

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

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

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

Перед установкой каких-либо пакетов через утилиту apt-get, следует обновить список источников и существущие пакеты, выполнив в консоли такие команды:

apt-get update -y
apt-get upgrade -y

Здесь и далее команды нужно выполнять от имени пользователя root.

Первой в списке необходимых компонент идет утилита 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

Помимо самого 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

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

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

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
Пароль: 5iveL!fe

Не забудьте сменить пароль после авторизации! Приятной работы!