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

Здравствуйте. Захотелось мне однажды необычного. Установить gitlab под ArchLinux. Однако нашелся только один официальный мануал и тот только для Ubuntu/Debian GitLab Installation. Он не совсем подходил — поэтому я решил написать эту статью которая вам помжет установить gitlab. (Возможно, этот мануал подойдет и для других дистрибутивов например gentoo.)

1. Подготовка и установка пакетов.

Для правильной работы gitlab нам потребуется установить git, ruby, redis, icu, openssh, libxml2, libxslt, curl, logrotate, libffi, gdbm, readline, zlib, libyaml.
В качестве web-сервера рекомендуют использовать nginx, значит установим и его.
Так-же нам понадобится база данных. Я использовал по рекомендациям postgresql.
Поэтому выполняем:
# pacman -S postgresql nginx git ruby redis icu openssh libxml2 libxslt curl logrotate libffi gdbm readline zlib libyaml

Запускаем redis и добавляем в автозагрузку
# systemctl start redis
# systemctl enable redis

В ArchLinux — ruby и git свежий. Поэтому компиляция из исходников отменяется.

Чтобы работала отправка почты нужно установить mail server. Например postfix:
# pacman -S postfix


2. Добавление пользователя

Добавим пользователя для GitLab. Рекомендуется добавить пользователя git. Можно и другое имя использовать, однако тогда вам придется поменять много путей в конфигах.
# useradd -m -s /usr/bin/bash git

Так-же установим пароль:
# passwd git

Настроим права для домашнего каталога для правильной работы nginx.
# chmod 751 /home/git


3. Установка GitLab shell

Для удобства зайдем под новым пользователем.
Вводим
# su git

Установим bundler для ruby
$ gem install bundler

И добавим в переменную PATH путь к установленным бинарникам в .bashrc
$ nano ~/.bashrc
export PATH="`ruby -e 'puts Gem.user_dir'`/bin:$PATH"

Переходим в домашний каталог
$ cd ~

Клонируем gitlab-shell
$ git clone gitlab.com/gitlab-org/gitlab-shell.git -b v1.9.3

Переходим в каталог
$ cd gitlab-shell

Копируем конфиг, после чего открываем любимым редактором ( я использовал nano )
$ cp config.yml.example config.yml
$ nano config.yml

В нем меням gitlab_url на свой.
Запускаем установку
$ ./bin/install


3. Настройка базы данных

Инициализируем postgresql
# su — postgres
$ initdb --locale en_US.UTF-8 -E UTF8 -D '/var/lib/postgres/data'
$ exit

Запускаем и включаем автозагрузку
# systemctl start postgresql
# systemctl enable postgresql

Заходим опять под пользователя postgres для создания пользователя и базы
# su — postgres
$ psql -d template1
template1=# CREATE USER git;
template1=# CREATE DATABASE gitlabhq_production OWNER git;
template1=# \q
$ exit

Проверяем подключение под новым пользователем (git).
$ psql -d gitlabhq_production


4. Установка GitLab

Переходим в домашний каталог и клонируем GitLab (на момент написания версия была 6-8)
$ cd /home/git
$ git clone gitlab.com/gitlab-org/gitlab-ce.git -b 6-8-stable gitlab
$ cd gitlab

Настраиваем. В конфиге нужно будет поменять localhost на ваш адрес (например example.com)
$ cp config/gitlab.yml.example config/gitlab.yml
$ nano gitlab.yml

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

Копируем конфиг Unicorn
$ cp config/unicorn.rb.example config/unicorn.rb

В нем можно включить режим кластера если у вас высоконагруженный сервер.
Также можно увеличить количество воркеров.
Копируем еще один конфиг
$ cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb

И настраиваем сам git
$ git config --global user.name «GitLab»
$ git config --global user.email «gitlab@localhost»
$ git config --global core.autocrlf input

Далее настраиваем конфиги отвечающие за подключение к базе данных:
$ git cp config/database.yml.postgresql config/database.yml

И запрещаем всем кроме юзера git их читать и записывать.
$ chmod o-rwx config/database.yml

Устанавливаем Gems
$ cd /home/git/gitlab
$ bundle install --deployment --without development test mysql aws

Инициализируем базу данных и активируем дополнительные возможности
bundle exec rake gitlab:setup RAILS_ENV=production

Введите yes чтобы создать нужные таблицы.
Если все прошло успешно появится надпись:
Administrator account created:

Установка инит скрипта. Т.к. в archlinux своя инит система (systemd) этот шаг можно пропустить. Однако чтобы проверка работы gitlab отрабатывала корректно лучше все-таки скопировать этот скрипт (впрочем можно и systemd unit написать, который будет запускать этот скрипт)
# cp lib/support/init.d/gitlab /etc/init.d/gitlab

Копируем конфиг logrotate
# cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab

Выполняем проверку статуса приложения
$ bundle exec rake gitlab:env:info RAILS_ENV=production

Компилируем ассеты
$ bundle exec rake assets:precompile RAILS_ENV=production

Запускаем gitlab
$ lib/support/init.d/gitlab start

5. Настройка Nginx

Тут все просто. Копируем файл с настройками сервера
# cp lib/support/nginx/gitlab /etc/nginx/gitlab

Правим конфиг nginx
# nano /etc/nginx/nginx.conf

В нем комментируем дефолтный сервер. И добавляем в конец http секции:
include /etc/nginx/gitlab;

Включаем nginx и добавляем в автозагрузку
# systemctl start nginx
# systemctl enable nginx

Готово!
Теперь вы можете проверить работу всей системы запустив
$ cd /home/git/gitlab
$ bundle exec rake gitlab:check RAILS_ENV=production

Если все хорошо — можете логиниться на ваш сайт:
root
5iveL!fe


Заключение

В целом все достаточно не сложно. Еще некоторая информация есть по ссылке, которую я давал вначале. Если есть вопросы или что-то не выходит спрашивайте.
Метки:
git, archlinux, linux, gitlab