Установка GitLab на Debian Squeeze

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

gitlabСистемные требования и подробная инструкция по установке и настройке инструментария есть на официальном сайте. Ниже приведен последовательный список команд с некоторыми комментариями, следуя которым приложение было успешно установлено и протестировано в Debian Squeeze. В процессе установки по официальным мануалам возникают проблемы с невыполненными требованиями или неудовлетворенными зависимостями. В листинге ниже они учтены и исправлены.

Первым делом необходимо заменить устаревшие репозитории Debian по умолчанию на что-то более свежее, например DotDeb (описание добавления здесь). Обновим список пакетов и установим необходимый для начальных операций минимум:

apt-get update
apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl git-core redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev

Для работы GitLab требуется Python версии между 2,5 и 3.0, поэтому спокойно ставим содержащийся в стандартном репозитории Debian python 2.7:

apt-get install -y python

Проверяем, что имеются символические ссылки между python и python2:

python --version
python2 --version

В случае их отсутствия (разные версии) исправляем:

ln -s /usr/bin/python /usr/bin/python2

Добавляем дополнения с необходимыми утилитами:

apt-get install python-docutils

А вот ruby требуется старше 1.9.3 и вплоть до 2.0.0, поэтому проверяем имеющуюся и при необходимости обновляем вручную:

ruby --version
mkdir /tmp/ruby && cd /tmp/ruby
curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz | tar xz
cd ruby-2.0.0-p247
./configure
make
make install

Устанавливаем gem и инструмент усправления ими bundler:

apt-get install gem
gem install bundler --no-ri --no-rdoc

Самое время создать нового пользователя для работы с git и запретить использовать имя для входа в систему:

adduser -disabled-login -gecos 'GitLab' git

Переходим к установке GitLab Shell для доступа к репозиторию по SSH:

cd /home/git
apt-get install sudo
sudo -u git -H git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell
sudo -u git -H git checkout v1.7.0

Копируем файл конфигурации и вносим изменения в gitlab_url, где указываем доменное имя для будущего репозитория, например ‘http://domain.com/’

sudo -u git -H cp config.yml.example config.yml
sudo -u git -H mcedit config.yml

Устанавливаем:

 sudo -u git -H ./bin/install

Теперь необходимо создать базу данных для GitLab, который поддерживает PostgreSQL и MySQL. Рассмотрим установку (если нет) и настройку MySQL. Устанавливаем требуемые пакеты (в процессе установки потребует пароль пользователя root для доступа к базе данных):

 apt-get install -y mysql-server mysql-client libmysqlclient-dev

Входим в СУБД с ранее указанным паролем:

mysql -u root -p

Создадим нового пользователя для GitLab.Не нужно вводить ‘mysql>’ — это строка приветствия сеанса MySQL, вместо password вводим новый пароль:

mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY 'password';

Создадим базу данных для GitLab:

mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

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

mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';

Завершаем сеанс:

mysql> \q

Пробуем войти в новую базу данных под новым пользователем:

sudo -u git -H mysql -u gitlab -p -D gitlabhq_production

Если получаем строку приветствия ‘mysql>’, все настроено верно. Можно выходить:

mysql> \q

Переходим к установке самого GitLab:

cd /home/git/
sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd /home/git/gitlab
sudo -u git -H git checkout 6-0-stable

Копируем файл конфигурации, снова вводя вместо localhost реальное доменное имя для будущего репозитория:

sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
sudo -u git -H mcedit config/gitlab.yml

Устанавливаем права доступа для git на запись логов и временных файлов:

chown -R git log/
chown -R git tmp/
chmod -R u+rwX  log/
chmod -R u+rwX  tmp/

Создаем папку под сателлиты:

sudo -u git -H mkdir /home/git/gitlab-satellites

Создаем папки под сокеты и PID, выставляем права доступа:

sudo -u git -H mkdir tmp/pids/
sudo -u git -H mkdir tmp/sockets/
chmod -R u+rwX  tmp/pids/
chmod -R u+rwX  tmp/sockets/

Для корректной работы с резервными копиями создаем папку uploads с соответствующими правами доступа:

sudo -u git -H mkdir public/uploads
chmod -R u+rwX  public/uploads

Копируем файл конфигурации Unicorn и при наличии более 2ГБ RAM увеличиваем количество рабочих процессов (workers):

sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
sudo -u git -H mcedit config/unicorn.rb

Задаем глобальные настройки для git:

sudo -u git -H git config --global user.name "git"
sudo -u git -H git config --global user.email "git@localhost"
sudo -u git -H git config --global core.autocrlf input

Настраиваем БД, для этого копируем файл конфигурации и вводим данные авторизации для доступа к недавно созданной БД:

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

Устанавливаем bundle, обратите внимание на указанную опцию ‘—without … postgres’ (довольно длительный процесс):

cd /home/git/gitlab
gem install charlock_holmes --version '0.6.9.4'
sudo -u git -H bundle install --deployment --without development test postgres aws

Инициализируем БД:

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

Устанавливаем init-скрипт для автозапуска:

cp lib/support/init.d/gitlab /etc/init.d/gitlab
chmod +x /etc/init.d/gitlab
update-rc.d gitlab defaults 21

Проверяем конфигурацию:

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

Если все позиции окрашены зеленым цветом, можно пробовать запускать:

/etc/init.d/gitlab start

Повторно проверяем, в случае ошибки задания глобальных параметров, повторяем ввод команд:

sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
sudo -u git -H git config --global user.name  "GitLab"
sudo -u git -H git config --global user.email "gitlab@localhost"

Последняя проверка:

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

Находим порт, на котором unicorn.rb разместил веб интерфейс (как правило, 8080):

netstat -ntlp

Переходим в браузере по адресу, указанному при настройке, и порту выше, например, http://domain.com:8080. Вводим в форму авторизации логин admin@local.host и пароль 5iveL!fe, заданные по умолчанию.

Для комфортной работы можно установить nginx в роли фронтенда с проксированием на необходимый порт gitlab, для этого устанавливаем веб-сервер (если нет):

apt-get install nginx

Скачиваем конфигурацию виртуального сервера и включаем её с помощью символической ссылки:

curl --output /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/nginx/gitlab
ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

При необходимости вносим изменения в файл конфигурации и перезапускаем веб-сервер для принятия изменений:

mcedit /etc/nginx/sites-available/gitlab
/etc/init.d/nginx restart

Репозиторий теперь доступен по прямому доменному имени без ввода порта.

Замечание:Если в процессе работы потребовалось сменить доменное имя для рабочего git-сервера, необходимо внести изменения в конфиги nginx, а также файлы, измененные в процессе установки gitlab (они лежат в домашней директории пользователя). После всех процедур перезапустить nginx и gitlab (проверить остановку и повторный запуск процесса unicorn.rb).

Ссылки: