Доброго времени суток. У меня есть маленький подручный сервер, который используется как git сервер для показа клиенту проекта и т.д. Сервер работает на операционной системе Slackware v.13.1.0, семейства linux. Почему не Debian или Ubuntu — так исторически сложилось. Для просмотра git репозиториев я использовал cgit. Недавно возникла необходимость начать использовать GitLab. Если интересно — добро пожаловать под кат.
Так что такое GitLab? Если вам знаком GitHub, то это похожая структура, только на вашем сервере и под вашем контролем.
Для того, чтобы GitLab у нас заработал, необходимо установить Ruby 2+, MySQL, Git, Apache 2+, а также Python 2.6+ и последний Redis. Я упущу процесс установки mysql.
Итак, по порядку.
Необходимые компоненты
Устанавливаем Python
Поставим сначала пайтон. Стягиваем отсюда пакет.
#делаем файл исполняемым
sudo chmod +x python.SlackBuild
#запускам скрипт
sudo ./python.SlackBuild
#устанавливаем пакет
sudo installpkg python
Устанавливаем Ruby
Следующим делом установим руби. Процесс аналогичный установке пайтона, скачиваем отсюда файлики.
#делаем файл исполняемым
sudo chmod +x ruby.SlackBuild
#запускам скрипт
sudo ./ruby.SlackBuild
#устанавливаем пакет
sudo installpkg ruby
Альтернативный способ установки ruby:
#создаем временную папку и переходим в нее
mkdir /tmp/ruby && cd /tmp/ruby
#скачиваем исходники руби и распаковываем их
curl --progress ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz | tar xz
#переходим в распакованную папку исзодиников и начинаем процесс сборки
cd ruby-2.0.0-p353
./configure --prefix=/usr/local/
make
sudo make install
Не зависимо от того каким способом устанавливали руби, проверим, что у нас установилось:
#проверяем куда установился руби
which ruby
#проверяем версию руби
ruby --version
#устанавливаем bundler, без него никуда
gem install bundler --no-ri --no-rdoc
Устанавливаем Redis
Процедура установки Redis отличается от двух предыдущих.
#зайдем во временный каталог
cd /tmp
#создадим папку где будем производить все махинации
mkdir redis
cd redis
#стягиваем и распаковываем исходники редиса
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
#собираем все до купы
make
#далее копируем исполняемые файлы сервера и клиента
cd src
sudo cp redis-server /usr/local/bin/
sudo cp redis-cli /usr/local/bin/
Это еще не все. Чтобы сервис редиса поднимался когда стартует сервер, необходимо подправить файл /etc/local.conf:
#открываем от рута файл на редактирование
sudo nano /etc/local.conf
#находим строчку где написано [components] и под ней добавляем
/usr/local/bin/redis-server
Запускаем redis-server просто выполнив комманду «redis-server» (без кавычек). В другом терминале сделаем проверку, что сервер редиса поднялся:
#Выполняем комманду
redis-cli ping
#Ответ
PONG
Устанавливаем Git
Осталось установить git.
#скачаем и распакуем нужную версию гита
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
#установим git
sudo make prefix=/usr/local install
GitLab
Приступим непосредственно к процессу установки GitLab.
Добавление пользователя git в систему
Если у вас еще не был создан пользователь git в системе, то необходимо с этого начать. Для этого выполним комманду в терминале:
sudo /usr/sbin/adduser --disabled-login git
Проходим пошаговое создание профиля пользователя. После создания проверяем, что у нас в /home создалась папка нового пользователя с именем git (если вы указали другое имя пользователя, к примеру gitlab, то имя папки будет gitlab, а так же в конце статьи будут заметки, где и что надо будет изменить в gitlab и gitlab-shell, чтобы все заработало).
Устанавливаем и настраиваем gitlab-shell
Первым делом стянем и установим gitlab-shell:
#заходим в папку пользователя git
cd /home/git
#клонируем с гитхаба исходники
sudo -u git -H git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell
#вместо VERSION подставим необходимую версию, я использовал на тот момент v1.9.0
sudo -u git -H git checkout VERSION
#переименовываем пример конфига
sudo -u git -H cp config.yml.example config.yml
#отредактируем конфиг
nano config.yml
#найдем строчку
#gitlab_url: "http://localhost/"
#и поменяем http://localhost/ на валидный адрес
#запустим установку от лица пользователя git
sudo -u git -H ./bin/install
Создаем mysql пользователя и db
Далее надо создать в mysql таблички для gitlab. Создадим временный файлик, к примеру gitlab_tables.sql и сохраним в нем следующее:
-- подставляем вместо USER_PASSWORD валидный пароль или оставляем так
CREATE USER 'gitlab'@'localhost' IDENTIFIED BY 'USER_PASSWORD';
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';
Логинимся в mysql пользователем root и выполняем не хитрую комманду
-- gitlab_tables.sql - имя временного файлика
source gitlab_tables.sql;
Легким движением рук мы создали пользователя с именем gitlab и базу данных gitlabhq_production, а так же дали права для оного пользователя на эту базу.
Более этот файл не понадобится, можем смело его удалять.
Устанавливаем и настраиваем gitlab
Теперь приступим к установке и настройке самого gitlab:
#переходим в корень домашней папки пользователя git
cd /home/git
#клонируем исходники gitlab в папку gitlab и переходим в новую склонированную папку
sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd /home/git/gitlab
#вместо VERSION подставим необходимую версию, я использовал на тот момент 7-2-stable
sudo -u git -H git checkout VERSION
#переименуем пример конфига в обычный кофиг
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
#откроем на редактирование конфиг файл
sudo -u git -H nano config/gitlab.yml
#и заменим localhost на верный адрес
## Web server settings
host: localhost
port: 80
https: false
#скопируем конфиг для базы
sudo -u git cp config/database.yml.mysql config/database.yml
#откроем на редактирование настройки gitlab для работы с mysql базой
sudo -u git -H nano config/database.yml
#в этом файле следующие три строчки встречаются три раза, меняем параметры на те которые мы использовали при создании mysql базы ранее
database: gitlabhq_production
username: root
password: "secure password"
Устанавливаем права на файлы и папки внутри /home/git/gitlab:
cd /home/git/gitlab
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 -u git -H mkdir tmp/pids/
sudo -u git -H mkdir tmp/sockets/
sudo chmod -R u+rwX tmp/pids/
sudo chmod -R u+rwX tmp/sockets/
sudo -u git -H mkdir public/uploads
sudo chmod -R u+rwX public/uploads
sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
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 git config --global core.autocrlf input
sudo -u git -H chmod o-rwx config/database.yml
Устанавливаем ruby gems
Следующим шагом будет установка ruby gems:
#заходим в папку gitlab в домашней папке пользователя git
cd /home/git/gitlab
#установим charlock_holmes, на момент установки актуальная версия была 0.7.3
sudo gem install charlock_holmes --version '0.7.3'
#запустим установку всего бандла зависимостей(этот шаг может занять много времени, запаситесь терпением)
sudo -u git -H bundle install --deployment --without development test postgres aws
Запускаем установку gitlab
Осталось только запустить установку и настройку самого gitlab:
#если запустите от пользователя root - процесс пойдет, вам покажут предупреждение что от рута нет гарантии, что все верно будет работать
#когда спросят подтверждения старта установки - отвечаем 'yes'
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
По окончанию установки, если все прошло успешно, в консоли высветится следующее:
Administrator account created:
login.........root
password......5iveL!fe
Проверка валидности конфигурации gitlab
Осталось совсем не много. Проверим, что у нас все сконфигурировано верно и донастроим конфиг, чтобы при старте сервера, gitlab стартовал автоматически:
#проверим как сконфигурирован наш gitlab
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
#если предыдущая комманда выполнилась без ошибок, продолжаем далее, иначе резолвим ошибки
#скопируем скрипт
sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
#сделаем скрипт исполняемым
sudo chmod +x /etc/init.d/gitlab
#откроем на редактирование local.conf:
sudo nano /etc/local.conf
#находим строчку где написано [components] и под ней добавляем
git@/etc/init.d/gitlab
#git - имя пользователя от лица которого выполнить скрипт
Стартуем gitlab
Теперь самое время стартануть gitlab, для этого выполняем следующую комманду:
sudo -u git -H /etc/init.d/gitlab start
Если все хорошо, то в консоли мы увидим следующее:
The GitLab Unicorn web server with pid 15869 is running.
The GitLab Sidekiq job dispatcher with pid 16468 is running.
GitLab and all its components are up and running.
По умолчанию gitlab крутится через unicorn на порту 8080 и мы можем убедиться в этом:
#запустим браузер lynx
lynx localhost:8080
Результат работы lynx будет вывод страницы для авторизации пользователя. Вводим логин 'root' и пароль '5iveL!fe' (все без кавычек). Сабмитим форму и видим предложение от gitlab сменить текущий пароль, меняем.
Настраиваем Apache конфиг для gitlab
Осталось настроить Apache. Переходим в папку /etc/httpd/sites-available и создаем там файлик gitlab со следующим содержимым:
<VirtualHost *:80>
ServerName OUR_COOL_URL
ServerSignature Off
ProxyPreserveHost On
# Ensure that encoded slashes are not decoded but left in their encoded state.
AllowEncodedSlashes Off
<Location /gitlab>
Order deny,allow
Allow from all
ProxyPassReverse http://127.0.0.1:8080
ProxyPassReverse http://OUR_COOL_URL/
</Location>
# apache equivalent of nginx try files
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA]
# needed for downloading attachments
DocumentRoot /home/git/gitlab/public
Alias /gitlab /home/git/gitlab/public
<Directory /home/git/gitlab/public>
Options All -Indexes
AllowOverride All
Order deny,allow
Allow from all
</Directory>
<Directory /home/git/gitlab/public/assets>
Options All -Indexes
AllowOverride All
Order deny,allow
Allow from all
</Directory>
LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b" common_forwarded
ErrorLog /var/log/httpd/gitlab_error.log
LogLevel warn
CustomLog /var/log/httpd/gitlab_access.log combined env=!dontlog
CustomLog /var/log/httpd/gitlab combined
</VirtualHost>
Полезные заметки
Проблемы, с которыми возможно столкнуться во время установки и после
- Если вы использовали другое имя пользователя отличное от git то необходимо во всех конфигах gitlab, gitlab-shell, redis поменять пути. К примеру, в gitlab-shell в файле config.yml необходимо в нескольких местах исправить пути, допустим у нас пользователь gitlab:
План действия
#путь где будут созданы репозитории repos_path: "/home/gitlab/repositories" #путь к папке где будут храниться паблик ключи пользователей auth_file: "/home/gitlab/.ssh/authorized_keys" #путь к файлу логов log_file: "/home/gitlab/gitlab-shell/gitlab-shell.log"
- По умолчанию пользователь Administrator(root) создан с email example@localhost, мы можем изменить этот email, а так же email from на нужные в следующих файлах:
Список файлов
/home/git/gitlab/config/gitlab.teatro.yml: email_from: example@localhost /home/git/gitlab/config/gitlab.teatro.yml: support_email: example@localhost /home/git/gitlab/config/gitlab.yml: email_from: example@localhost /home/git/gitlab/db/fixtures/development/01_admin.rb: s.email = "example@localhost" /home/git/gitlab/db/fixtures/production/001_admin.rb: email: "example@localhost"
- Если у вас при git push в репозиторий проекта, созданного в gitlab, вылазит следующая ошибка «constants.rb:2:in `<module:Bundler>': uninitialized constant Bundler: :RbConfig (NameError)», то необходимо обновить установленный в системе ruby.
План действия
#запускаем sudo /sbin/pkgtool #открываем View и ищем в списке ruby (для быстрого перехода можно нажать на "r") #выходим и пишем which ruby which rake which gem #сравниваем версии, 99% , что версия в pkgtool младше и нужно будет сделать обновление #так же на всякий случай откроем на редактирование файлик boot в папке gitlab sudo -u git -H nano config/boot.yml #и добавим следующее прямо перед строчкой require 'rubygems', и заменим RIGHT_PATH_TO_GEM_FROM_WHICH_RESULT на путь который мы получили #как результат комманды which gem ENV['GEM_PATH'] = "RIGHT_PATH_TO_GEM_FROM_WHICH_RESULT" Gem.clear_paths
- Если у вас во время git push в репозиторий проекта созданного в gitlab вылазит следующая ошибка «GitLab: An unexpected error occurred (redis-cli returned 127).», делаем следующее:
План действия
#открываем на редактирование файл config в gitlab-shell cd /home/git/gitlab-shell && sudo -u git -H nano config.yml #находим следующий блок # Redis settings used for pushing commit notices to gitlab redis: bin: /usr/local/redis-cli #и меняем значение в bin на правильный путь к redis-cli
Полезные ресурсы
- Официальный сайт GitLab
- Официальный репозиторий GitLab на GitHub
- Поиграться с рабочим примером можно тут
Автор: eliotik