Gitorious is a repositories hosting based on a distributing version of Git control system. This is the second popular service after Github. The source code for the project is available on the AGPL license. AGPL claims that the modified source code of the application would remain available to users on the network. I.e. if you make any changes to your Gitorious installation — all changes should be available to its users.
Installation of all required packages for 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
Set the standard encoding for MySQL:
(в /etc/mysql/my.cfg)
character-set-server=utf8 collation-server=utf8_general_ci # /etc/init.d/mysql restart
That's how we do Gitorious install on Debian Squeeze.
Installing Ruby Enterprise Edition:
Ruby Enterprise Edition is focused on server-side use of Ruby assembly. It includes optimized performance and main storage usage. Read more here.
# wget http://rubyenterpriseedition.googlecode.com/files/ruby-enterprise-1.8.7-2012.02.tar.gz # cd ruby-enterprise-1.8.7-2012.02/ && ./installer
The installer will check the availability of all required packages and if needed will offer to deliver them. Set in /opt/ruby-enterprise/
Add /opt/ruby-enterprise/bin
in the variable $ PATH. This will let to perform the binary files in this directory without showing full path.
# echo PATH=$PATH:/opt/ruby-enterprise/bin >> /etc/bash.bashrc # PATH=$PATH:/opt/ruby-enterprise/bin
Installing Apache ActiveMQ
Apache ActiveMQ is a message broker with open source software, it enables clustering, storage of messages with the possibility to use different databases and Gitorious needs it to work properly.
# 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
And in configuration /usr/local/apache-activemq/conf/activemq.xml
edit a single line:
Then add an individual user and start 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
We get the sources of Gitorious and start customizing it:
# 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/
Lets create a database:
# 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';
Prepare a directory for the repository:
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
Rules configs of 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
We need to edit the following parameters in gitorious.yml:
gitorious_client_port: 3000 gitorious_client_host: gitorious.example.com gitorious_host: gitorious.example.com cookie_secret: !this option you should fill with random symbols, for example, with result of apg -m 64 (in one line)! use_ssl: false public_mode: false enable_private_repositories: true only_site_admins_can_create_projects: true is_gitorious_dot_org: false
Lets fulfill migrates of database:
# rake db:setup RAILS_ENV=production
If you get an error "uninitialized constant ActiveSupport::Dependencies::Mutex":
# gem install rubygems-update -v='1.4.2' # update_rubygems
Now add the administrator:
# 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
Now add the scripts in the 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
Now you need to run them all by hand, or simply reboot the system.
If Gitorious has no reference to the addresses of repositories, it is necessary to download java script from gitorious.org:
# cd /var/www/gitorious.example.com/public/javascripts # rm all.js # wget http://gitorious.org/javascripts/all.js
Configuring of nginx
We need Nginx, for several reasons:
- Thin can serve only one ROR application, and if we want to host for something else – we won’t do it without a proxy web server.
- Slow-connection. Nginx copes much better with slow connections and its use will increase productivity.
In /etc/nginx/nginx.conf
, section add 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
Search setting
Putting 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
Run ultrasphinx.
# su git # cd /var/www/gitorious.example.com/ # /opt/ruby-enterprise/bin/bundle exec rake ultrasphinx:bootstrap