GitLab: организация совместной разработки проектов

GitLab — платформа для организации совместной работы с git-репозиториями. Представляет собой web-приложение, которое можно развернуть на любом сервере. GitLab популярен в области организации командной разработки, благодаря своим широким функциональным возможностям: созданию отдельных проектов, добавлению кода, обработке запросов, отслеживанию ошибок, средствам визуализации и многим другим. Код проекта написан на языке Ruby и распространяется под лицензией MIT.

В данной статье описывается процесс установки GitLab 8.4 на FreeBSD 10.2.

Git: установка и настройка

Git — распределенная система контроля версий. С более подробной информацией о Git можно ознакомиться в соответствующей статье.

Установка git

Установка сложностей не представляет. Я ставлю пакеты из собственного репозитория1) с именем FreeBSD_102_local:

tau# pkg install -r FreeBSD_102_local git

Для сборки git со своей конфигурацией перед сборкой пакета для репозитория выполняем

epsilon# poudriere options -c devel/git

и выбираем нужные опции.

Настройка git

Репозитории git будут храниться в домашней директории пользователя git. Кроме того, для корректной работы GitLab у пользователя должна быть интерактивная оболочка. Поэтому выполняем:

tau# pw user mod -n git -m -s /bin/csh

Для работы с git по протоколу git запускаем соответствующий daemon. Для запуска сервиса при старте системы пишем в файл /etc/rc.conf:

tau# echo 'git_daemon_enable="YES"' >> /etc/rc.conf

и запускаем сервис:

tau# service git_daemon start

Мы не будем работать по этому протоколу, т.к. это протокол без аутентификации пользователей2).

Работа с git

Более детальную информацию по работе с Git можно найти в статье о Git.

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

Системы GitLab нет в портах FreeBSD, поэтому установку придется проводить вручную. Это не представляет особых сложностей, поскольку GitLab написан на Ruby и почти на 100% платформонезависим. Однако, GitLab зависит от некоторых программ, которые предварительно нужно установить в систему. Так, GitLab Shell зависит от node. Кроме того, начиная с версии 8.0, веб-запросы к Git осуществляются c помощью утилиты, написанной на языке go, которая компилируется во время развертывания GitLab. Проверяем, что пакеты node и go находятся в репозитории FreeBSD_102_local и выполняем установку:

tau# pkg install -r FreeBSD_102_local node go

Про остальные зависимости написано ниже.

Ruby

Устанавливаем RubyGems - фреймворк для установки библиотек и приложений, написанных на Ruby. При этом пакет ruby будет поставлен через зависимости:

tau# pkg install -r FreeBSD_102_local ruby22-gems

Далее нам придется установить несколько Ruby-приложений. Представляется, что наилучший способ следующий: приложения из коллекции портов установить через pkg, а остальные поставить через Bundler — менеджер управления зависимостями в Ruby.

Ставим пакеты:

tau# pkg install -r FreeBSD_102_local rubygem-gitlab_git rubygem-sidekiq rubygem-omniauth-gitlab rubygem-gitlab-grack

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

tau# gem install bundler --no-ri --no-rdoc

Позже, при развертывании GitLab, мы воспользуемся Bundler-ом для установки Ruby-приложений.

Redis

Redis — это высокопроизводительная база данных, которая размещается в памяти и хранит данные типа «ключ-значение». Часто используется для ускорения сетевых приложений.

Ставим пакет:

tau# pkg install -r FreeBSD_102_local redis

Далее нам потребуется минимальная настройка конфигурационного файла: нужно запретить слушать tcp, разрешить unixsocket и выставить права доступа на сокет. Это можно сделать с помощью любимого текстового редактора ee:

tau# ee /usr/local/etc/redis.conf

В результате соответствующие строки должны быть такими:

port 0
unixsocket /var/run/redis/redis.sock
unixsocketperm 770

Обратите внимание, что файл redis.sock должен находиться в директории, на которую выставлены права полного доступа для группы. Это нужно, чтобы обеспечить доступ к файлу для пользователя git, которого мы добавим в группу redis. В противном случае при перезапуске сервиса права доступа на группу и группа будут перезаписаны.

Для автоматического запуска после старта системы редактируем /etc/rc.conf:

tau# echo 'redis_enable="YES"' >> /etc/rc.conf

Запускаем сервис:

tau# service redis start

В результате будет создан файл /var/run/redis/redis.sock, которому мы назначим владельца и права доступа:

tau# chown redis:redis /var/run/redis/redis.sock
tau# chmod g+rw /var/run/redis/redis.sock

Наконец, не забываем добавить пользователя git в группу redis:

tau# pw user mod git -G redis

PostgreSQL

PostgreSQL — это объектно-реляционная система управления базами данных. Именно эта СУБД рекомендована для хранения данных GitLab3).

Устанавливаем сервер PostgreSQL.

tau# pkg install -r FreeBSD_102_local postgresql93-server

Версия выбрана из тех соображений, что на данный момент эта версия ставится по умолчанию. Опции компиляции пакета для репозитория можно предварительно выставить командой

epsilon# poudriere options -c databases/postgresql93-server

Разрешаем автозапуск после старта системы:

tau# echo 'postgresql_enable="YES"' >> /etc/rc.conf

По умолчанию PostgreSQL работает в кодировке UTF-8. Но, как видно из файла /etc/login.conf для FreeBSD пользовательской кодировкой по умолчанию является KOI8-R. Поэтому пользователю PostgreSQL придется сменить локаль. Для этого в файл /etc/login.conf добавим следующие строки:

postgres|PostgreSQL User Account:\
        :charset=UTF-8:\
        :lang=ru_RU.UTF-8:\
        :setenv=LC_COLLATE=C:\
        :tc=default:

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

tau# cap_mkdb /etc/login.conf

Затем пропишем класс в rc.conf:

tau# echo 'postgresql_class="postgres"' >> /etc/rc.conf

Перед запуском сервиса проводим инициализацию:

tau# service postgresql initdb

После этого можно работать с базой данных. Запускаем сервер:

tau# service postgresql start

Следующим шагом ставим пароль администратора на СУБД:

tau# psql -U pgsql -d template1
psql (9.3.10)
Введите "help", чтобы получить справку.

template1=# \password
Введите новый пароль: 
Повторите его: 
template1=# \q

Теперь запрещаем вход в БД без пароля для всех, кроме пользователя git. Пользователю git разрешим беспарольный доступ к БД gitlab. Запускаем текстовый редактор

tau# ee /usr/local/pgsql/data/pg_hba.conf

и правим файл так, чтобы в нем были следующие строки:

local   gitlab          git                                     trust
local   all             all                                     md5
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5

Подключаемся к базе:

tau# psql -U pgsql -d template1
psql (9.3.10)
Введите "help", чтобы получить справку.

template1=#

В интерактивном терминале создаем новую базу данных gitlab для пользователя git:

template1=# CREATE USER git CREATEDB;
template1=# CREATE DATABASE gitlab OWNER git;
template1=# \q

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

tau# psql -U git -d gitlab
psql (9.3.10)
Введите "help", чтобы получить справку.

template1=> \q
tau#

Далее отредактируем основной конфигурационный файл postgresql.conf:

tau# ee /usr/local/pgsql/data/postgresql.conf

Параметр max_connection отвечает за максимальное число пользователей, одновременно подключенных к СУБД. По умолчанию max_connection=100. Уменьшим это число до 20.

Параметр shared_buffers определяет объем разделяемой памяти, используемый сервером. Для машины с 2Гб ОЗУ выставим этот параметр до 256Mb.

Остальные параметры оставим по умолчанию. Перезапустим сервис:

tau# service postgresql restart

На этом настройку СУБД для работы с GitLab можно считать завершенной.

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

Ядро GitLab

GitLab устанавливаем в домашнюю директории пользователя git, предварительно войдя в систему:

tau# su - git
tau% pwd
/home/git
tau% git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-4-stable gitlab

Затем создадим необходимые директории и выставим нужные права доступа:

tau% mkdir gitlab/public/uploads
tau% chmod -R u+rwX,o-rwx gitlab/public/uploads
tau% chown -R git:git gitlab/log
tau% chmod -R u+rwX,go-w gitlab/log
tau% chown -R git:git gitlab/tmp
tau% chmod -R u+rwX gitlab/tmp
tau% chmod -R u+rwX gitlab/builds
tau% chmod -R u+rwX shared/artifacts

Заходим в директорию gitlab и копируем конфигурационные файлы:

tau% cd /home/git/gitlab
tau% cp config/gitlab.yml.example config/gitlab.yml
tau% cp config/secrets.yml.example config/secrets.yml
tau% cp config/unicorn.rb.example config/unicorn.rb
tau% cp config/resque.yml.example config/resque.yml
tau% cp config/database.yml.postgresql config/database.yml
tau% cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb

Пользователи других СУБД должны скопировать файл настроек с другим расширением.

Посторонним запрещаем доступ к файлам:

tau% chmod 0600 config/secrets.yml
tau% chmod o-rwx config/database.yml

Далее редактируем настройки конфигурации:

tau% ee config/unicorn.rb

Параметр worker_processes должен быть равен число процессоров машины.

В файле config/resque.yml необходимо откорректировать redis-сокет. В нашем случае оставляем как есть:

unix:/var/run/redis/redis.sock

Файл config/gitlab.yml должен содержать следующие строки:

host: tau.home.local
port: 443
https: true
bin_path: /usr/local/bin/git

где tau.home.local - имя хоста, на котором разворачивается GitLab. Вторая и третья строки меняются только в том случае, когда мы хотим работать с веб-интерфейсом через защищенное соединение.

Файл config/database.yml должен содержать корректное имя базы данных:

database:gitlab

Создаем директорию для сателлитов:

tau% mkdir /home/git/gitlab-satellites
tau% chmod u+rwx,g=rx,o-rwx /home/git/gitlab-satellites

С помощью менеджера bundler устанавливаем Ruby-пакеты:

tau% bundle install --deployment --without development test mysql aws kerberos

Задаем настройки git:

tau% git config --global user.name "GitLab"
tau% git config --global user.email "ladilova@home.local"
tau% git config --global core.autocrlf input

Последняя строка определяет настройки git, когда к нему происходит обращение через веб-сервер.

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

Выполняем установку:

tau% bundle exec rake gitlab:shell:install REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production
tau% chmod -R ug+rwX,o-rwx /home/git/repositories
tau% chmod -R ug-s /home/git/repositories

Чтобы обеспечить доступ по протоколу https, изменяем файл config.yml:

tau% ee /home/git/gitlab-shell/config.yml

так, чтобы в нем содержалась строка

gitlab_url: https://tau.home.local

где tau.home.local - имя машины с GitLab.

Также указываем, что будем использовать самоподписанный сертификат:

http_settings:
  self_signed_cert: true

GitLab WorkHorse

WorkHorse не требует дополнительных настроек. Устанавливаем и компилируем утилиту.

tau% cd /home/git
tau% git clone https://gitlab.com/gitlab-org/gitlab-workhorse.git
tau% cd gitlab-workhorse
tau% git checkout 0.6.2
tau% make

Инициализация базы данных

Команда

tau% cd /home/git/gitlab
tau% bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=yourpassword
tau% exit

создает таблицы базы данных.

Скрипт запуска

Скрипт запуска GitLab нужно скачать отдельно и положить его в директорию /usr/local/etc/rc.d, разрешив запуск скрипта:

tau# wget -O /usr/local/etc/rc.d/gitlab https://gitlab.com/gitlab-org/gitlab-recipes/raw/master/init/init/freebsd/gitlab-unicorn
tau# chmod u+x /usr/local/etc/rc.d/gitlab

После этого можно добавить в /etc/rc.conf:

tau# echo 'gitlab_enable="YES"' >> /etc/rc.conf

Последние штрихи

Проверим, что GitLab установлен корректно:

tau# su - git
tau% cd /home/git/gitlab
tau% bundle exec rake gitlab:env:info RAILS_ENV=production

На ошибку о неустановленном скрипте запуска можно не обращать внимание: у нас FreeBSD. С ошибкой Sidekiq не очень понятно, но вроде бы приложение работает.

Осталось поставить какое-то жутко нужное волшебство

tau% bundle exec rake assets:precompile RAILS_ENV=production
tau% exit

и организовать ротацию логов. Для этого в директории /etc/newsyslog.d.conf создаем файл gitlab:

tau# cat /etc/newsyslog.d.conf/gitlab
/home/git/gitlab/log/*.log              git:git 640     7       *       $W0D2   JC
/home/git/gitlab-shell/gitlab-shell.log git:git 640     7       *       $W0D2   JC

На этом установка и настройка GitLab завершена. Осталось сделать так:

tau# service gitlab start

Установка и настройка Nginx

Nginx — веб-сервер, официально рекомендованный для работы с GitLab.

Выполняем установку пакета:

tau# pkg install -r FreeBSD_102_local nginx

Пользователя www, под которым работает nginx, добавим в группу git:

tau# pw user mod -n www -G git

Настраиваем Nginx для работы с GitLab по протоколу https. Создаем директории для хранения настроек хостов и сертификатов:

tau# mkdir /usr/local/etc/nginx/hosts
tau# mkdir /usr/local/etc/nginx/certs

это мы делаем для удобства, чтобы не загромождать основной файл nginx.conf. Копируем файл настроек:

tau# cp lib/support/nginx/gitlab-ssl /usr/local/etc/nginx/hosts/

и редактируем его. Для сертификатов прописываем следующие пути:

ssl_certificate certs/gitlab.crt;
ssl_certificate_key certs/gitlab.key;

Создаем сертификаты:

tau# cd /usr/local/etc/nginx/certs
tau# openssl req -newkey rsa:2048 -x509 -nodes -days 3560 -out gitlab.crt -keyout gitlab.key
tau# chmod o-r gitlab.key

Создаем отдельные файлы для хранения логов:

tau# mkdir /var/log/nginx
tau# chown www:www /var/log/nginx

Основной конфигурационный файл приводим к следующему виду:

tau# cat /usr/local/etc/nginx/nginx.conf
user www www;
worker_processes  5;

events {
    worker_connections  1024;
    use kqueue;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    client_max_body_size 64m;

    include hosts/gitlab-ssl;
}

Добавляем в rc.conf:

tau# echo 'nginx_enable="YES"' >> /etc/rc.conf

и запускаем:

tau# service nginx start

Настройка клиентской части

TortoiseGit

TortoiseGit — клиент системы контроля версий с графическим интерфейсом для ОС Windows. Является расширением Проводника Windows. Установка и настройка проблем обычно не вызывает.

Если при работе: клонировании или push-запросе возникает ошибка, связанная с самоподписанным сертификатом, то команда

> git config --global http.sslverify false

решает данную проблему. Однако, так делать не рекомендуется. Более длинный способ решения проблемы — добавить сертификат в настройках git:

  • Сохраните сертификат в формате pem. (Просмотреть его можно из браузера, нажав кнопку просмотр сертификата.)
  • Запустите команду
> git config --global http.sslcainfo "полный_путь_к_сертификату"
1)
Как создать собственный репозиторий см. здесь, как настроить менеджер пакетов на репозиторий см. здесь
2)
т.е. этот шаг пропускаем
3)
Однако, можно использовать и MySQL.
freebsd/gitlab.txt · Последние изменения: 08.10.2016 13:24:01 — Ладилова Анна
Наверх
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0