Как установить GitLab на Debian/Ubuntu

В этой статье будет описан метод установки популярной системы системы управления версиями – GitLab. GitLab является аналогом GitHub с той разницей, что GitLub вы можете установить и настроить у себя дома или в офисе. Система настолько хороша, что ее используют даже в крупных бизнессах и компаниях. У нее огромный функционал, красивый и удобный интерфейс. С GitLab очень удобно работать и он очень надежен и стабилен. Я пользуюсь им уже почти год и невероятно даволен, при аптайме домашнего сервера в 11 месяцев. Всем кто занимается разработкой я советую установить и использовать ее в свое удовольствие, даже если вы админ в крупной компании, и перед вами стал выбор что использовать, GitLab лучший выбор.

Компоненты необходимые для установки GitLab

Список довольно прост, вам необходимо иметь следующее:

  • Debian/Ubuntu на сервере
  • Ruby
  • System Users
  • GitLab shell
  • Database
  • GitLab
  • Nginx

Подготовка системы и установка компонентов

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

apt-get update
apt-get upgrade
apt-get install aptitude
apt-get install sudo
apt-get update
apt-get upgrade
apt-get install aptitude
apt-get install sudo

Далее необходимы следующие зависимости:

sudo apt-get install -y vim
sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl git-core openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev
sudo apt-get install -y vim
sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl git-core openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev

Python

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

sudo apt-get install python
sudo apt-get install python

Для Ubuntu стоит обратить внимание на версию, это должен быть Python 2.5+, версия Python3.x работать не будет:

python --version
sudo apt-get install python2.7
python2 --version
python --version
sudo apt-get install python2.7
python2 --version

В случае ошибки “command not found”:

sudo ln -s /usr/bin/python /usr/bin/python2
sudo ln -s /usr/bin/python /usr/bin/python2

В случае если вы хотите, что-бы GitLab отправлял e-mail нужен будет почтовый сервер:

sudo apt-get install postfix 
sudo apt-get install postfix 

Ruby

Важно! Делайте так как в статье, не ставьте Ruby из репозиториев, версии могут отличаться:

mkdir /tmp/ruby && cd /tmp/ruby
curl --progress http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz | tar xz
cd ruby-1.9.3-p392
./configure
make
sudo make install
mkdir /tmp/ruby && cd /tmp/ruby
curl --progress http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz | tar xz
cd ruby-1.9.3-p392
./configure
make
sudo make install

Так же нужен Bundler Gem:

sudo gem install bundler
sudo gem install bundler

Пользователь в системе

Нужно создать пользователя git для Gitlab в системе:

sudo adduser --disabled-login --gecos 'GitLab' git
sudo adduser --disabled-login --gecos 'GitLab' git

GitLab shell

GitLab Shell это инструмент доступа к Gitlab через SSH

Зайдите под пользователем git:

sudo su git
sudo su git

Идете в хомяк:

cd /home/git
cd /home/git

Получите копию шелла:

git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell
git checkout v1.3.0
cp config.yml.example config.yml
git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell
git checkout v1.3.0
cp config.yml.example config.yml

Далее откройте config.yml

vim config.yml
vim config.yml

и поменяйте gitlab_url на свой UrL и проведите установку:

./bin/install
./bin/install

База данных

Тут отдельная история. Авторы предлагают использовать MySQL или PostgreSQL на выбор, я выбрал первое. Но в любом случае поажу настройку для обоих случаев.

Для MySQL

Ставим базу данных в систему:

sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev

Логинимся в базу как рут:

mysql -u root -p
mysql -u root -p

Создаем пользователя для GitLab (измените $password на реальный пароль)

mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password';
mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password';

Делаем базу данных GitLab

mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

Даем все необходимые права и привелегии:

mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';
mysql> GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';

Выходим из MySQL:

mysql> \q
mysql> \q

Пробуем зайти в только что созданную базу с новым пользователем:

sudo -u git -H mysql -u gitlab -p -D gitlabhq_production
sudo -u git -H mysql -u gitlab -p -D gitlabhq_production

Для PostgreSQL

Ставим пакеты в систему

sudo apt-get install -y postgresql-9.1 libpq-dev
sudo apt-get install -y postgresql-9.1 libpq-dev

Заходим в PostgreSQL

sudo -u postgres psql -d template1
sudo -u postgres psql -d template1

Создаем пользователя для GitLab. (измените $password на реальный пароль)

template1=# CREATE USER git WITH PASSWORD '$password';
template1=# CREATE USER git WITH PASSWORD '$password';

Делаем базу данных GitLab и даем привелегии:

template1=# CREATE DATABASE gitlabhq_production OWNER git;
template1=# CREATE DATABASE gitlabhq_production OWNER git;

Выходим из базы данных:

template1=# \q
template1=# \q

Пробуем зайти в только что созданную базу с новым пользователем:

sudo -u git -H psql -d gitlabhq_production
sudo -u git -H psql -d gitlabhq_production

Установка GitLab

cd /home/git
cd /home/git

Получаем из репозитория:

sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd /home/git/gitlab
sudo -u git -H git checkout 5-1-stable
sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
cd /home/git/gitlab
sudo -u git -H git checkout 5-1-stable

Настройка GitLab

Приступаем к настройке GitLab:

cd /home/git/gitlab
cd /home/git/gitlab

Переименовываем пример конфига в реальный конифг:

sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml

Открываем конфиг и меняем строчку localhost:

sudo -u git -H vim config/gitlab.yml
sudo -u git -H vim config/gitlab.yml
## GitLab settings
gitlab:
  ## Web server settings
  host: 192.168.1.100
  port: 80
  https: false
## GitLab settings
gitlab:
  ## Web server settings
  host: 192.168.1.100
  port: 80
  https: false

Ставим права директориям:

sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX  log/
sudo chmod -R u+rwX  tmp/
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 /home/git/gitlab-satellites

И папки для PID’s & Socket:

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 tmp/pids/
sudo -u git -H mkdir tmp/sockets/
sudo chmod -R u+rwX  tmp/pids/
sudo chmod -R u+rwX  tmp/sockets/

Создаем папки public/uploads:

sudo -u git -H mkdir public/uploads
sudo chmod -R u+rwX  public/uploads
sudo -u git -H mkdir public/uploads
sudo chmod -R u+rwX  public/uploads

Делаем копию puma конфига:

sudo -u git -H cp config/puma.rb.example config/puma.rb
sudo -u git -H cp config/puma.rb.example config/puma.rb

Глобальные настройки для пользователя Git:

sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "[email protected]"
sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "[email protected]"

Настройки Gitlab для DB

Для Mysql:

sudo -u git cp config/database.yml.mysql config/database.yml
sudo -u git cp config/database.yml.mysql config/database.yml

Для PostgreSQL:

sudo -u git cp config/database.yml.postgresql config/database.yml
sudo -u git cp config/database.yml.postgresql config/database.yml

Важными там являются параметры (пароль ваш от базы данных):
Мы создали пользователя с паролем до этого (выше по статье)!

  username: gitlab
  password: "$12345"
  username: gitlab
  password: "$12345"

Установка Gems

Что это такое читаем тут.

cd /home/git/gitlab
sudo gem install charlock_holmes --version '0.6.9.4'
cd /home/git/gitlab
sudo gem install charlock_holmes --version '0.6.9.4'

Для MySQL

sudo -u git -H bundle install --deployment --without development test postgres
sudo -u git -H bundle install --deployment --without development test postgres

Для PostgreSQL

sudo -u git -H bundle install --deployment --without development test mysql
sudo -u git -H bundle install --deployment --without development test mysql
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production

Загружаем Init срипт

Тут просто качаем скрипт и ставим ему права:

sudo curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/init.d/gitlab
sudo chmod +x /etc/init.d/gitlab
sudo curl --output /etc/init.d/gitlab https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/init.d/gitlab
sudo chmod +x /etc/init.d/gitlab

И добавляем Gitlab в автозагрузку:

sudo update-rc.d gitlab defaults 21
sudo update-rc.d gitlab defaults 21

Проверка состояния GitLab

Если проверка выдает ошибку, то нужно поставить недостающие модули:

sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production

Запуск GitLab

Тут все обыденно:

sudo service gitlab start
sudo service gitlab start

или

sudo /etc/init.d/gitlab restart
sudo /etc/init.d/gitlab restart

Nginx

Nginx используется как сервер, ниже настройка и установка:

sudo apt-get install nginx
sudo apt-get install nginx

Настрйка web-интерфейса (подгружаем пример скрипта):

sudo curl --output /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/nginx/gitlab
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
sudo curl --output /etc/nginx/sites-available/gitlab https://raw.github.com/gitlabhq/gitlabhq/master/lib/support/nginx/gitlab
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

И настраиваем в конфиге:

sudo vim /etc/nginx/sites-available/gitlab
#   listen 80 default_server;         # e.g., listen 192.168.1.1:80;
sudo vim /etc/nginx/sites-available/gitlab
#   listen 80 default_server;         # e.g., listen 192.168.1.1:80;

а так же:

server {
  listen 192.168.1.100:80 default_server;         # e.g., listen 192.168.1.1:80;
  server_name 192.168.1.100;     # e.g., server_name source.example.com;
  root /home/gitlab/gitlab/public;
 
  # individual nginx logs for this gitlab vhost
  access_log  /var/log/nginx/gitlab_access.log;
  error_log   /var/log/nginx/gitlab_error.log;
server {
  listen 192.168.1.100:80 default_server;         # e.g., listen 192.168.1.1:80;
  server_name 192.168.1.100;     # e.g., server_name source.example.com;
  root /home/gitlab/gitlab/public;

  # individual nginx logs for this gitlab vhost
  access_log  /var/log/nginx/gitlab_access.log;
  error_log   /var/log/nginx/gitlab_error.log;

Перезапускаем:

sudo service nginx restart
sudo service nginx restart

Идете в браузере на localhost, local ip или тот адрес что вы настроили и заходите в веб панель:
Пользователь: [email protected]
Пароль: 5iveL!fe

Я при настройке и установке GitLab у себя на сервисе пользовался вот этим мануалом. Там есть еще пару интересных моментов которые можно изучить, к примеру тонкая\кастумная настройка SSH доступа, LDAP аутентификация и прочее.