Доброго времени суток, уважаемый читатель!
Сегодняшняя заметка будет посвящена GitLab.
GitLab — платформа с открытым исходным кодом для организации совместной работы с Git-репозиториями. По своим возможностям это GitHub, но на домашнем или корпоративном сервере для личных нужд. Функционал, внешний вид и удобство шикарны! 🙂
В из дней на работе встала задача перестройки внутренней инфраструктуры и одним из пожеланий была удобная работа с репозиториями Git-а. Легко и быстро создавать репозитории, возможность просматривать исходные коды проектов и писать комментарии к кускам кода прямо там.
После гугления данного вопроса пришел к выводу, что под данную задачу шикарно вписывается GitLab и полез пробовать его ставить. Скажу честно, что убил на это полтора дня и 5 виртуальных серверов (тестил много и пытался соорудить трехколесный велосипед на квадратных колесах).
Первым делом полез в документацию и нашел мануалы по установке. Их было два: установка готового deb-пакета и ручная установка. Попробовав готовый пакет я понял, что это не то, что мне нужно. Я хотел иметь полный контроль над софтом и использоваться должен был MySQL, а не PostgreSQL. Поэтому пришлось обратится к мануалу по ручной установке. С ним то и возникли некоторые сложности, которые заставили написать эту заметку на будущее. В целом я опишу всю установку GitLab, но половина будет взята по сути из официального мануала.
Для работы GitLab будут установлены:
— Nginx 1.6.2
— Redis 2.8
— Ruby 2.1.5
— MySQL 5.6
— Git 1.7.10
— Postfix 2.9.6
Поехали!
Начнем с установки пакетов, которые будут нужны в процессе всей установки:
# apt-get install curl sudo gcc g++ make cmake pkg-config nginx redis-server mysql-server-5.6 git postfix libicu-dev libmysqlclient-dev libkrb5-dev libssl-dev libcurl4-openssl-dev
Во время установки Вам потребуется указать пароль для root для MySQL и настроить Postfix. Очень важно в настройке postfix указать как «Интернет сайт».
Далее добавим пользователя git, от имени которого будет работать gitlab:
# adduser --disabled-login --gecos 'GitLab' git
Ruby
Поскольку последней версией Ruby в репозиториях является 1.9.3, а установленная 1.8, то нужно удалить установленную и скомпилировать новую версию.
# apt-get remove ruby1.8
Теперь можно качать свежую версию и ставить ее:
# mkdir /tmp/ruby && cd /tmp/ruby # curl -L --progress http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.5.tar.gz | tar xz # cd ruby-2.1.5
Теперь можно приступать к сборке:
# ./configure --disable-install-rdoc # make # make install
Установим Bundler:
# gem install bundler --no-ri --no-rdoc
MySQL
Сам сервер уже установлен, нужно создать пользователя и таблицу для него. Сделаем, как по мануалу, через консоль.
# mysql -u root -p
При создании пользователя нужно указать для него пароль.
mysql> CREATE USER 'git'@'localhost' IDENTIFIED BY 'password'; mysql> SET storage_engine=INNODB; mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `gitlabhq_production`.* TO 'git'@'localhost'; mysql> exit
Проверим смогли ли войти под нужным юзером в нужную базу:
# sudo -u git -H mysql -u git -p -D gitlabhq_production mysql> exit
Redis
Приступим к настройке Redis, поставили мы его в начале.
# nano /etc/redis/redis.conf
Нам нужно, чтобы redis работал еще и по сокету. Для этого необходимо в настройках раскомментировать и прописать так эти два параметра:
unixsocket /var/run/redis/redis.sock unixsocketperm 770
Если redis будет ругаться в логах на максимальное количество открытых файлов и коннектов, то стоит обратить внимание на параметры tcp-backlog и maxclients.
Добавим пользователя git в группу redis:
# usermod -aG redis git
GitLab
Зайдем под юзером git и перейдем в папку, куда будем устанавливать gitlab. Выбирать можно любую папку, но тут я укажу папку, как по мануалу.
# su git $ cd /home/git
Клонируем gitlab из репозитория:
$ git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 7-6-stable gitlab
Переходим в папку:
$ cd /home/git/gitlab
Создаем файл конфига из примера и редактируем под себя:
$ cp config/gitlab.yml.example config/gitlab.yml $ nano config/gitlab.yml
Советую обратить внимание на параметры:
host — сюда нужно вписать адрес, по которому будет доступен GitLab (gitlab.example.com)
email_from — адрес почты, с которой будут отправляться письма Gitlab-ом (gitlab@example.com)
support_emal — адрес почты, которая будет использоваться для тех.поддержки (gitlab@example.com)
time_zone — часовой пояс для правильного вывода времени (‘Europe/Kiev’)
Выставим права на папки:
$ exit # cd /home/git/gitlab/ # chown -R git log/ # chown -R git tmp/ # chmod -R u+rwX,go-w log/ # chmod -R u+rwX tmp/ # chmod -R u+rwX tmp/pids/ # chmod -R u+rwX tmp/sockets/ # chmod -R u+rwX public/uploads # su git
Папка для сателлитов:
$ mkdir /home/git/gitlab-satellite
Создадим конфиг из примеров:
$ cp config/unicorn.rb.example config/unicorn.rb $ cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb $ cp config/resque.yml.example config/resque.yml $ cp config/database.yml.mysql config/database.yml
Если нужно, то можно отредактируем конфиг http-сервера:
$ nano config/unicorn.rb
По официальному мануалу советуют проверить количество указанных ядер в настройках. У меня всё совпадало, но если что, то посмотреть количество ядер на сервере можно с помощью команды:
$ nproc
В настройках в unicorn.rb за количество ядер отвечает параметр worker_processes. В этом же конфиге можно указать куда сохранять логи работы сервера.
Укажем настройки пользователя для Git:
$ git config --global user.name "GitLab" $ git config --global user.email "example@example.com" $ git config --global core.autocrlf input
Отредактируем настройки работы с Redis (если адрес сокета отличается от /var/run/redis/redis.sock):
$ nano config/resque.yml
Для работы GitLab с БД нужно указать пароли для юзера git и root:
$ nano config/database.yml
Меняем права на файл настроек, поскольку там есть пароль для рута:
$ exit # chmod o-rwx config/database.yml # su git
Ставим библиотеки для Ruby:
$ bundle install --deployment --without development test postgres aws
GitLab Shell
Это отдельная утилита для управления SSH-доступом и репозиториями. Внимательно укажите адрес к сокету редиса.
$ bundle exec rake gitlab:shell:install[v2.4.1] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production
Если нужно внести правки в конфиг, то это можно сделать так:
$ nano /home/git/gitlab-shell/config.yml
Инициализируем приложение и укажем пароль для администратора (стандартный пароль 5iveL!fe):
$ bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=password
Вернемся назад в root:
$ exit
Init-скрипт и автозапуск
# cp lib/support/init.d/gitlab /etc/init.d/gitlab # cp lib/support/init.d/gitlab.default.example /etc/default/gitlab # update-rc.d gitlab defaults 21
Ротатор логов:
# cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
Проверим приложение:
# sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
Если всё нормально, тогда компилим assets и запускаем приложение:
# sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production # service gitlab restart
Nginx
Последней частью мануала будет настройка веб-сервера nginx. Вместе с GitLab поставляются настройки хоста, но мне они не понравились. Посмотреть стандартные настройки можно так:
# nano /home/git/gitlab/lib/support/nginx/gitlab
Создадим файл хоста с такими настройками:
# nano /etc/nginx/sites-available/gitlab
upstream gitlab { server unix:/home/git/gitlab/tmp/sockets/gitlab.socket fail_timeout=0; } server { listen 127.0.0.1:80 ; server_name gitlab.example.com www.gitlab.example.com; root /home/git/gitlab/public; access_log /var/log/nginx/gitlab_access.log; error_log /var/log/nginx/gitlab_error.log; ## Increase this if you want to upload large attachments ## Or if you want to accept large git objects over http client_max_body_size 20m; location / { try_files $uri $uri/index.html $uri.html @gitlab; } location @gitlab { proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Frame-Options SAMEORIGIN; proxy_pass http://gitlab; } location ~ ^/(assets)/ { gzip_static on; expires max; add_header Cache-Control public; } error_page 502 /502.html; }
Включаем хост:
# ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
Проверяем правильность конфигурации:
# nginx -t
Если всё ок, тогда перезапускаем основные сервисы:
# service nginx restart && service gitlab restart && service redis-server restart && service mysql restar
Финиш! Теперь можно переходить по ссылке и пользоваться GitLab! 🙂
Дополнительные материалы:
— Официальная документация
— Мануал по ручной установке на русском
23 апреля, 2015 at 4:07 пп
при выполнении след. команды:
bundle install —deployment —without development test postgres aws
выходит ошибка:
Could not find modernizr-2.6.2 in any of the sources
24 апреля, 2015 at 8:59 дп
В общем с предыдущей ошибкой справился, оказывается надо подправить некоторые файлы в самом gitlab, подробнее здесь: https://github.com/gitlabhq/gitlabhq/commit/ca1d31f8cdd111c79f547b2e511f478d8f15696e?diff=split
14 мая, 2015 at 12:53 пп
Спасибо большое за этот момент!