Default Green Orange
Gemini_13's Blog
Блокнот полезных вещей
Home
    • Карта сайта
    • Обо мне
RSS

Установка GitLab на Debian 7.8 (wheezy) в ручном режиме

Linux, Настройка сервера, Разное Add comments

Доброго времени суток, уважаемый читатель!
Сегодняшняя заметка будет посвящена 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! 🙂

Дополнительные материалы:
— Официальная документация
— Мануал по ручной установке на русском


20 января, 2015  
Tags: debian, git, gitlab, mysql, nginx, postfix, redis, ruby, wheezy, гитлаб, дебиан, постфикс, редис, руби

3 комментария to “Установка GitLab на Debian 7.8 (wheezy) в ручном режиме”

  1. kadi
    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


  2. kadi
    24 апреля, 2015 at 8:59 дп

    В общем с предыдущей ошибкой справился, оказывается надо подправить некоторые файлы в самом gitlab, подробнее здесь: https://github.com/gitlabhq/gitlabhq/commit/ca1d31f8cdd111c79f547b2e511f478d8f15696e?diff=split


  3. Gemini_13
    14 мая, 2015 at 12:53 пп

    Спасибо большое за этот момент!


Leave a Reply

  • Рубрики

    • FreeBSD (20)
    • Linux (46)
    • MySQL (11)
    • Windows (14)
    • Железо (3)
    • Мои моды к TorrentPier II (16)
    • Настройка сервера (49)
    • Разное (33)
    • Скрипты (30)
  • Свежие записи

    • Поля форм на Yii2: textInput(), passwordInput() и hiddenInput()
    • Поля форм на Yii2: CheckboxList()
    • SpeedTest датацентров Digital Ocean
    • Патчим Gearman на Debian
    • nginx + Apache 2.4 и REMOTE_ADDR (решение проблемы)
    • Создание и подключение swap-файла в Debian
    • Запуск PhpStorm 9 x64 на Windows
    • Рекурсивная замена прав доступа для папок и файлов в Linux
    • VirtualBox 5 + phpVirtualBox на Debian 8.2 (jessie)
    • Обработка сессий PHP с помощью Redis + phpredis на Debian 7.8
  • Ссылки

    • My GitHub
  • Архивы

    • Июнь 2016 (2)
    • Март 2016 (2)
    • Январь 2016 (3)
    • Ноябрь 2015 (2)
    • Август 2015 (1)
    • Февраль 2015 (1)
    • Январь 2015 (7)
    • Октябрь 2014 (1)
    • Июнь 2014 (1)
    • Май 2014 (1)
    • Апрель 2014 (7)
    • Февраль 2014 (9)
    • Январь 2014 (5)
    • Декабрь 2013 (7)
    • Ноябрь 2013 (1)
    • Октябрь 2013 (3)
    • Август 2013 (4)
    • Июль 2013 (4)
    • Июнь 2013 (3)
    • Апрель 2013 (2)
    • Март 2013 (2)
    • Февраль 2013 (6)
    • Январь 2013 (2)
    • Декабрь 2012 (1)
    • Ноябрь 2012 (2)
    • Октябрь 2012 (7)
    • Сентябрь 2012 (22)
Все права защищены © 2015 Gemini_13's Blog
G13.org.ua