Установка Gitorious на Debian Squeeze

Gitorious — хостинг репозиториев на основе распределенной системы контроля версий Git. Второй по популярности сервис после Github. Исходный код проекта доступен по AGPL лицензии. AGPL требует что б измененный исходный код приложения оставался доступен пользователям по сети. Т.е. если вы внесете какие-то изменения в свою инсталляцию Gitorious - ее пользователям должны быть доступны все изменения.

Установка всех требуемых пакетов для работы Gitorious:

aptitude install nginx mysql-server mysql-client git-core git-svn apg build-essential libpcre3 libpcre3-dev make zlib1g zlib1g-dev ssh libonig-dev libyaml-dev geoip-bin libgeoip-dev libgeoip1 imagemagick libmagickwand-dev memcached libssl-dev libreadline5-dev libxslt-dev libxml2-dev libmysqlclient-dev openjdk-6-jre

Установим стандартую кодировку для MySQL:

(в /etc/mysql/my.cfg)

character-set-server=utf8
collation-server=utf8_general_ci

# /etc/init.d/mysql restart

Установка Ruby Enterprise Edition:

Ruby Enterprise Edition это ориентированная на серверное использование сборка Ruby. Включает в себя оптимизации производительности и использование оперативной памяти. Подробнее здесь.

# wget https://rubyenterpriseedition.googlecode.com/files/ruby-enterprise-1.8.7-2012.02.tar.gz
# cd ruby-enterprise-1.8.7-2012.02/ && ./installer

Установщик проверит наличие всех необходимых пакетов и в случае чего даже предложит их доставить. Устанавливаем в /opt/ruby-enterprise/

Добавим /opt/ruby-enterprise/bin в переменную $PATH. Это позволит исполнять бинарные файлы из этой директории без указания полного пути.

# echo PATH=$PATH:/opt/ruby-enterprise/bin >> /etc/bash.bashrc
# PATH=$PATH:/opt/ruby-enterprise/bin

Установка Apache ActiveMQ

Apache ActiveMQ — это message broker с открытым исходным кодом, он обеспечивает возможность кластеризации, хранение сообщений с возможностью использовать различные БД и необходим для работы Gitorious.

# wget https://apache.infocom.ua/activemq/apache-activemq/5.5.1/apache-activemq-5.5.1-bin.tar.gz
# tar xzvf apache-activemq-5.5.1-bin.tar.gz  -C /usr/local/
# ln -s /usr/local/apache-activemq-5.5.1/ /usr/local/apache-activemq

И в конфиге /usr/local/apache-activemq/conf/activemq.xml отредактируем одну строку:

Дальше добавим отдельного юзера и запустим ActiveMQ:

# useradd activemq
# chown -R activemq /usr/local/apache-activemq/*
# su activemq
# /usr/local/apache-activemq/bin/activemq start
# crontab -e
@reboot /usr/local/apache-activemq/bin/activemq start
# exit

Получаем исходники Gitorious и начинаем его настройку:

# useradd git
# mkdir -p /var/www/gitorious.exmaple.com && cd /var/www/gitorious.exmaple.com
# git clone git://gitorious.org/gitorious/mainline.git ./

# /opt/ruby-enterprise/bin/gem install bundler
# /opt/ruby-enterprise/bin/gem install nokogiri -v '1.5.0'
# /opt/ruby-enterprise/bin/gem install mysql -v '2.8.1'
# /opt/ruby-enterprise/bin/gem install thin
# /opt/ruby-enterprise/bin/gem install ultrasphinx

# /opt/ruby-enterprise/bin/bundle install

# chown -R git:git /var/www/gitorious.exmaple.com/

Создадим БД:

# mysql -uroot -p
> CREATE DATABASE gitorious_production;
> CREATE USER 'gitorious_prod'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD';
> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `gitorious\_production` . * TO 'gitorious_prod'@'localhost';

Подготовим директории для репозиториев:

mkdir -p /var/git/{repositories,tarballs,tarball-work}
chown -R git /var/git/
mkdir .ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
# ln -s /var/www/gitorious.example.com/script/gitorious /usr/local/bin/gitorious

Правим конфиги Gitorious:

# cd /var/www/gitorious.example.com/config
# cp database.sample.yml database.yml
# vi database.yml
production:
  adapter: mysql
  database: gitorious_production
  username: gitorious_prod
  password: 301522
  host: localhost
  encoding: utf8
# cp broker.yml.example broker.yml
# cp gitorious.sample.yml gitorious.yml

Нам нужно отредактировать следующие параметры в gitorious.yml:

gitorious_client_port: 3000
gitorious_client_host: gitorious.example.com
gitorious_host: gitorious.example.com
cookie_secret: !эту опцию нужно заполнить произвольными символами, например возьмите вывод apg -m 64(ондой строкой)!
use_ssl: false
public_mode: false
enable_private_repositories: true
only_site_admins_can_create_projects: true
is_gitorious_dot_org: false

Выполним миграции БД:

# rake db:setup RAILS_ENV=production

если получаете ошибку "uninitialized constant ActiveSupport::Dependencies::Mutex":

# gem install rubygems-update -v='1.4.2'
# update_rubygems

Теперь добавим админа:

# env RAILS_ENV=production ruby script/create_admin
Type in Administrator's e-mail:
myname@example.com
Type in Administrator's password:
yours_strong_password
Admin user created successfully.

>> user = User.first
...
>> user.login = "myname" 
=> "myname" 
>> user.activate
=> true
>> user.accept_terms
=> true
>> user.save
=> true
>> quit

Теперь добавим скрипты в crontab:

# su git
# crontab -e
@reboot cd /var/www/gitorious.example.com/ && /opt/ruby-enterprise/bin/bundle exec thin start -d -e production
@reboot cd /var/www/gitorious.example.com/script && /opt/ruby-enterprise/bin/bundle exec ./git-daemon
@reboot cd /var/www/gitorious.example.com/script && RAILS_ENV=production /opt/ruby-enterprise/bin/bundle exec ./poller start
@reboot cd /var/www/gitorious.example.com && /opt/ruby-enterprise/bin/bundle exec rake ultrasphinx:daemon:start RAILS_ENV=production

50      *       *       *       *       cd /var/www/gitorious.example.com && /opt/ruby-enterprise/bin/bundle exec rake ultrasphinx:index RAILS_ENV=production

Теперь нужно запустить их все вручную или просто перезагрузить систему.

Если в Gitorious'e нет ссылок на адреса репозиториев, нужно подтянуть себе js'ку с gitorious.org:

# cd /var/www/gitorious.example.com/public/javascripts
# rm all.js
# wget https://gitorious.org/javascripts/all.js

Настройка nginx

Nginx нам нужен по нескольким причинам:

  • Thin может обслуживать только одно ROR приложение и если мы захотим разместить на сервере еще что-то - без проксирующего веб-сервера не обойтись.
  • Slow-connection. Nginx намного лучше справляется с медленными соединениями и его использование повысит производительность

В /etc/nginx/nginx.conf, в секцию http добавим:

include /etc/nginx/vhost/*;
# vi /etc/nginx/vhost/gitorious.example.com

server {
        listen server_ip:80;
        server_name gitorious.example.com;
        client_max_body_size 5M;

        location / {
                proxy_pass https://127.0.0.1:3000/;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

}

# /etc/init.d/nginx reload

Настройка поиска

Собираем sphinx.

# wget https://sphinxsearch.com/files/sphinx-2.0.4-release.tar.gz
# tar zxf sphinx-2.0.4-release.tar.gz && cd sphinx-2.0.4-release/
# ./configure
# make
# make install

Запускаем ultrasphinx.

# su git
# cd /var/www/gitorious.example.com/
# /opt/ruby-enterprise/bin/bundle exec rake ultrasphinx:bootstrap

Ссылки:

Вот так и происходит установка Gitorious на Debian Squeeze.