Руководство по установке GitLab

Всем привет! В этой статье мы поделимся нашим непростым опытом установки замечательного open source решения GitLab. GitLab — это система управления исходным кодом для git, достойная альтернатива известным проектам GitHub, BitBucket и прочим онлайн git-хостингам. Но давайте обо всем по-порядку.

Что такое GitLab

GitLab Logo
GitLab сделает вам все то, что сделает GitHub. Вот так вот. Веб-интерфейс для доступа к исходникам проектов, визуальное администрирование git, красивые диффы, wiki, issue tracking и еще куча всего.

А еще у этих ребят отличный логотип!

Кому и зачем нужен GitLab

  1. Тем, кто не хочет открыть код своих проектов всему миру и не готов платить за чужой private хостинг.
    Например, на широко известном GitHub самый дешевый тариф с закрытыми репозитариями составляет сейчас 7$ в месяц. На менее известном Bitbucket приватные репозитарии бесплатны.. до тех пор, пока к этим репозитариям имеют доступ максимум 5 человек, а дальше — от 10 $ в месяц.
  2. Тем, кто не может открыть код проектов всему миру.
    Тут тоже все ясно, в коммерческой разработке нередко нужно подписать NDA и другие страшные клятвы, согласно которым код должен находиться в наглухо-замурованном сервере. Можно возразить, что в таком случае достаточно просто поднять git-сервер внутри компании. Но кто будет его администрировать? Кто будет создавать новые проекты, регистрировать пользователей и устанавливать права доступа? Верно, это должен быть человек с основательным знанием Linux-систем вообще, и git в частности. А проделать с репозитарием все вышеупомянутые операции с помощью GitLab сможет любой айтишник.

Не скрываем, SkyCase попал в первую категорию. Облачные сервисы хороши тем, что «не надо париться». Но за это надо платить. Мы решили, что «мы сами умные», и, один раз напрягшись, создадим систему на века. Тем более, что арендовать виртуальный сервер нынче «непозволительно» дешево.

Системные требования GitLab

  • Минимум 1 Gb оперативной памяти
  • Такого же размера swap space
  • Операционная система Ubuntu / Debian

Установка GitLab

Преамбула: ниже описывается, как мы установили GitLab v. 6.2.0 на Ubuntu Server Edition v. 13.04.
Официальное руководство не страдает избыточной информацией, так что нам пришлось изрядно постараться самим. Теперь — закатайте рукава!

  • Разбираемся со swap space
    Сначала проверяем, включен ли swap

    swapon -s
    

    Если на вашем сервере обнаружен swap раздел достаточно объема, то смело переходите к следующему пункту. На нашем виртуальном сервере swap был отключен. И мы включили.

    sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
    sudo mkswap /swapfile
    sudo swapon /swapfile
    swapon -s
    sudo nano /etc/fstab
    ...
    /swapfile       none    swap    sw      0       0
    ...
    
  • Устанавливаем Python. Внимание, версия Python должна быть 2.5 и старше, но ниже чем 3.x!
    sudo apt-get install -y python python-docutils
    python --version
    python2 --version
    

    Если последняя команда выдает ошибку (не найдена команда python2), тогда

    sudo ln -s /usr/bin/python /usr/bin/python2
    
  • Ставим git, нужна версия 1.7.10+
    sudo apt-get install -y git
    git --version
    
  • Ставим почтовый сервер Postfix, нужна версия 1.7.10+
    sudo apt-get install -y postfix
    Выбираем тип инсталляции "Internet Site"
    
    sudo nano -w /etc/postfix/main.cf
    ...
    inet_interfaces = 127.0.0.1 # разрешаем доступ к SMTP серверу только с локального хоста
    ...
    
    sudo service postfix restart
    
  • Устанавливаем Ruby
    sudo apt-get remove ruby1.8 ruby1.9
    sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev wget checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate
    mkdir src
    cd src
    wget http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p247.tar.gz
    tar zxf ruby-2.0.0-p247.tar.gz
    rm ruby-2.0.0-p247.tar.gz
    cd ruby-2.0.0-p247/
    ./configure --disable-install-rdoc && make
    sudo make install
    ruby --version
    
  • Ставим Redis server
    sudo apt-get install -y redis-server
    
    sudo nano /etc/redis/redis.conf
    ...
    unixsocket /var/run/redis/redis.sock
    unixsocketperm 777
    ...
    
    sudo service redis-server restart
    
  • Создаем системного пользователя для git
    sudo adduser --disabled-login --gecos 'GitLab' git
    
  • Устанавливаем GitLab shell
    cd /home/git
    sudo -u git -H git clone https://github.com/gitlabhq/gitlab-shell.git
    cd gitlab-shell
    sudo -u git -H git checkout v1.7.6
    sudo -u git -H cp config.yml.example config.yml
    sudo -u git -H nano -w config.yml # edit gitlab_url
    sudo -u git -H ./bin/install
    
  • MySQL. Устанавливаем и создаем базу и пользователя.
    sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
    sudo mysql_secure_installation
    
    mysql -u root -p
    CREATE USER 'gitlab'@'localhost' IDENTIFIED BY 'gitlab_mysql_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';
    
    sudo -u git -H mysql -u gitlab -p -D gitlabhq_production
    
  • Наконец пришел черед самого GitLab
    cd /home/git
    sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
    cd gitlab
    sudo -u git -H git checkout 6-2-stable
    sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
    
    sudo -u git -H nano config/gitlab.yml
    ...
    установите нужные значения для
    gitlab->host, gitlab->email_from, gitlab->support_email, gitlab_shell->ssh_port
    ...
    
    sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb
    sudo -u git -H nano config/unicorn.rb
    sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb
    
    sudo -u git -H nano -w config/application.rb
    ...
    Раскомментировать строку config.middleware.use Rack::Attack
    ...
    
    sudo -u git cp config/database.yml.mysql config/database.yml
    
    sudo -u git -H nano config/database.yml
    ...
    Указать свои настройки соединения с базой данных.
    ....
    
    sudo -u git -H chmod o-rwx config/database.yml
    sudo -u git cp config/resque.yml.example config/resque.yml
    
    sudo -u git -H nano -w config/resque.yml
    ...
    production: unix:/var/run/redis/redis.sock
    ...
    
    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
    
  • Глобальная настройка git
    sudo -u git -H git config --global user.name "GitLab"
    sudo -u git -H git config --global core.autocrlf input
    sudo -u git -H git config --global user.email "gitlab@git.yourdomain.com"
    
  • Ставим нужные Ruby gems
    sudo gem install bundler --no-ri --no-rdoc
    sudo gem install charlock_holmes --version '0.6.9.4' --no-ri --no-rdoc
    sudo gem install bcrypt-ruby --version '3.1.1' --no-ri --no-rdoc
    sudo bundle install --system --without development test postgres aws
    
  • Инициализируем базу данных. На вопрос команды ниже отвечаем yes.
    sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
    
  • Делаем GitLab сервис и настраиваем logrotate
    sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
    sudo chmod +x /etc/init.d/gitlab
    sudo update-rc.d gitlab defaults 21
    sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
    
  • Проверяем корректность конфигурации GitLab. Если вы (и мы :)) нигде ранее не ошиблись, то все проверки тестов должны пройти.
    sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
    sudo service gitlab start
    sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
    
  • Устанавливаем и настраиваем Nginx
    sudo apt-get install -y nginx-light
    sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
    sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
    
    sudo nano /etc/nginx/sites-available/gitlab
    ...
    Настройте nginx под данный хост (возможно, достаточно будет поменять только server_name).
    ...
    
    sudo service nginx reload
    
  • Все! Теперь вы можете зайти в GitLab по веб-интерфейсу, логин: admin@local.host, пароль: 5iveL!fe

Резюме

Увы, процедура установки GitLab не очень-то проста. Но цель, в данном случае, полностью оправдывает средства! Остается только пожелать терпения и немного усердия вам и вашему системному администратору!

Комментарии (3)

  1. Никита 16/04/2014 18:43  Ответить

    Спасибо за статью!
    Но у меня к вам вопросы как бороться с bundle?
    Например при выполнении команды :
    sudo bundle install —system —without development test postgres aws
    Don’t run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine.
    Fetching source index from https://rubygems.org/
    [Could not find modernizr-2.6.2 in any of the sources
    потом еще не может какой-то rake найти..
    Искал данный пакет по ссылке? Однако не нашел. В итоге выходит что я не могу запустить git labюю а так охото….
    ubuntu 13.04

  2. Artem Shiyanov 12/07/2014 15:58  Ответить

    Ребята, не вежливо молчать мне, виноват. Признаюсь, что не отвечаю на вопрос, потому что настраивал Гитлаб не я, я вел летопись. Однако я СИЛЬНО попросил умельца, чтобы он помог с решением этой проблемы. Надеюсь, он даст нам ответ.

Добавить комментарий