Встановлення 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

Ось так ми встановлюємо Gitorious на Debian Squeeze.

Встановлення Ruby Enterprise Edition:

Ruby Enterprise Edition орієнтований на серверне використання збірки Ruby. Він включає оптимізовану продуктивність і основне використання пам'яті. Читайте більше тут.

# wget http://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 — це брокер повідомлень з відкритим вихідним кодом, він дозволяє кластеризацію, зберігання повідомлень з можливістю використання різних баз даних, і Gitorious потребує його для правильної роботи.

# wget http://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
Введіть електронну пошту адміністратора:
myname@example.com
Введіть пароль адміністратора:
yours_strong_password
Користувача-адміністратора успішно створено.

>> 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 не має посилань на адреси репозиторіїв, необхідно завантажити JavaScript з gitorious.org:

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

Налаштування nginx

Нам потрібен Nginx з кількох причин:

  • Thin може обслуговувати лише один ROR додаток, і якщо ми хочемо хостити щось інше – ми не зможемо це зробити без проксі веб-сервера.
  • Повільне з'єднання. 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 http://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 http://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

Корисні посилання: