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
Ссылки:
- Setting up Gitorious on your own server
- DebianSqueezeInstallation
- Installing and Setting Up Gitorious on RHEL 5
Вот так и происходит установка Gitorious на Debian Squeeze.