Install Redmine with automated git integration (Centos, Redhat)
10.05.2010 | My Blog
I had a few days work on this one while it was supposed to be done in a hour. The problem? Lack of good documentation. There seems to be no complete tutorial on the Internet how to completely integrate git with Redmine so I figured to make one myself for you my dear reader but also a little bit for myself so I can easily find it back.
Good to know: I might have used yum but we all know that the repo’s of centos en redhad are way behind in version. Please make sure you have extra repo’s. I used:
epel
webtatic
Make sure you also use repo’s for a more updated ruby and gems. I’m going to start with the ruby install right from the bat. Please make sure your server has Apache and Mysql installed. This tutorial won’t explain that part.
Installing Ruby
Redmine works on ruby so we will start with installing ruby. You can install ruby in 2 ways.
- From the source
- Trough yum
Thoose the one you prefer I will use the yum method:
yum install ruby ruby-devel ruby-libs ruby-irb ruby-rdoc ruby-mysql
Just make sure that you have the right version of ruby. The standard repositories don’t have the later versions yet so make sure to use other repositories. I used version 1.8.5. Just make sure that you use a compatible version. You can see that here: Redmine Ruby Versions
Installing ruby-gems
Installing ruby-gems goes most of the time by hand:
wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
tar xvf rubygems-1.3.1.tgz
cd rubygems-1.3.1
ruby setup.rb
Installing Rails
You need to install rails trough gem. But you need to make sure you install the version that Redmine likes:
gem install rails -v=2.3.5
Installing Rack
gem install rack -v=1.0.1
Installing mongrel (optional)
You won’t need to install mongrel but it makes your site run so much faster so it is recommended you install it.
gem install mongrel
Installing Redmine
Download redmine
First lets download redmine. You can download the latest version at the Redmine site. Unpack it and put it in the folder you want. I will be using “/home/redmine/redmine” as my redmine root.
Creating the database
First we need to install the database. In this tutorial we will be using mysql as database driver since it’s commonly known. Log into your mysql console and run this:
create database redmine character set utf8;
create user ‘redmine’@'localhost’ identified by ‘my_password’;
grant all privileges on redmine.* to ‘redmine’@'localhost’;
Configuring Redmine
Let’s configure Redmine now. Fist we need to copy the Redmine configure file at the right place.
cd /home/redmine/redmine
cp config/database.yml.example config/database.yml
Now edit the config to the settings you set the database with.
production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: my_password
Generate a session store secret
cd /home/redmine/redmine
rake config/initializers/session_store.rb
Or:
rake generate_session_store
Create the database structure
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data
Set the right permissions for the files
chown -R redmine:redmine files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets
Test Run redmine
ruby script/server webrick -p 3000 -e production
People note this is only for testrunning redmine. Don’t use it for production. Use one of the many other guides in the Redmine wiki to setup redmine to use either passenger (aka mod_rails) or mongrel to serve up your redmine.
Installing and automating Git
Now we will start automating all git processes with Redmine. This means when you make a new project it will automatically create a repository for it. Since there are already many tutorials how to do this with svn ours will be about git.
First create a directory where all git repositories will be in. Mine is located at: “/home/redmine/git_repositories”
Edit your apache
Now edit your httpd.conf to fit your settings:
PerlLoadModule Apache::Redmine SetEnv GIT_PROJECT_ROOT /home/redmine/git_repositories/ SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/ <Location /git> RedmineGitSmartHttp yes DAV on AuthType Basic Require valid-user AuthName "Git" PerlAccessHandler Apache::Authn::Redmine::access_handler PerlAuthenHandler Apache::Authn::Redmine::authen_handler RedmineDSN "DBI:mysql:database=redmine;host=localhost" RedmineDbUser "redmine" RedmineDbPass "my_password" </Location> Alias /git-private /home/redmine/git_repositories <Location /git-private> Order deny,allow Deny from all <Limit GET PROPFIND OPTIONS REPORT> Options Indexes FollowSymLinks MultiViews Allow from 127.0.0.1 Allow from localhost </Limit> </Location>
Maybe you already noticed. That this is completely different from the configuration the Redmine sites gives. This is because we will be using git’s git-smart-http protocol. With this you can push your repository straight to the http link. If you are a valid user. For this to work you need to make sure you git version is higher than 1.6.6. Also check all paths for this httpd config since some could be off. Just try to locate the correct files with “find / -name yourfilenamehere”.
You will need to patch your Redmine.pm to support. this protocol. You can find the patch for Redmine.pm here: Redmine.pm Patch Note:please make sure this patch isn’t already committed else you might patch a already fixed file. Also use linux “patch” to patch the file.
If everything is working correctly you should be able to push to the httpd “IF” your repository exists and is setup the right way.
Setting up Auto creation and checking
Some people might want Redmine to auto create their repository when a new project is added and keep tracking the changes. For this you will need to add 2 lines to the cron:
*/1 * * * * root ruby /home/redmine/redmine/script/runner "Repository.fetch_changesets" -e production
*/1 * * * * root ruby /home/redmine/redmine/extra/svn/reposman.rb -s /home/redmine/git_repositories/ -r [external-redmine-link]:3000 -u /home/redmine/git_repositories --scm git -k [repository-key] -g redmine -o redmine --verbose >> /var/log/reposman.log
This should be all to get your redmine / git integration working if I missed something or if you get errors. Please comment. I will try to edit the tutorial and help you out where I can.
10.18.2010
nice article, keep the posts coming
10.27.2010
Hey, I can’t view your site properly within Opera, I actually hope you look into fixing this.
10.09.2011
Hi!
Nice guide.
Just one thing I think instead of:
Installing Rake
gem install rake -v=1.0.1
You should have
Installing Rack
gem install rack -v=1.0.1
Rake is still in it’s 0.9.x series.
And one other thing IMHO it is not a good idea in general to install software from source.
10.10.2011
@jj I agree, the problem is that you don’t always have a choice because they are hard to find for some distro’s. At the time I wrote this Redhat didn’t have any good repo’s that did support Gems so I had to install it from source.
4.18.2012
Hello there,
you didn’t mention that you run into problems, because repoman creates bare git repos, that redmine can’t handle.
greetings
6.29.2012
Greetings,
Thanks for the detailed instructions. Do you have any ideas if you need to patch redmin 2.0.3 file? I’m going to use this version but unfortunately apache server does not see
RedmineGitSmartHttp directive.
Thanks in advance.
7.02.2012
@Tron After pushing some stuff to the repo redmine should be able to handle them. The initial setup shouldn’t make it bad.
The problem is that there still is no fix for the repoman repo’s sadly.
7.02.2012
@Vasily I’m not sure. You should ask this at redmine. I do think so because I don’t see any posts on their site that they integrated it.
7.09.2012
I got this setup working fine. But Redmine is not able to view the repository through /git-private at all. When I tried to clone the repo from the /git-private url, it cloned a bare repo though the repo had changesets. Tearing my hair out trying to figure out what the issue could be. The same repo when accessed through /git with proper authentication gives the correct repo.
7.11.2012
@Guruprasad : Try to load the git url in the browser. Does it ask you to authenticate? If it does login and try to grab the “[your-repo-url]/HEAD” file to see if the paths are working correctly.
7.11.2012
@rjd22: Till now I have been testing by allowing access to only redmine for the /git-private path. The server on which redmine is running doesn’t have a GUI to try it in a browser. Will test by allowing access to a few more IP address and open the HEAD file to dig in deeper. By default /git-private path doesn’t require authentication, so I guess it won’t prompt for the credentials. Thanks for the helpful tips.
7.11.2012
When I opened /HEAD, I get a ref: refs/heads/master but on cloning the repo from /git, it gives the correct repo. :-/
12.27.2012
Hi,
Nice tutorial!
But when I edit the httpd.conf on Ubuntu 12.04 with apache2 it will create a server config error which prevent apache from starting.
There is only 1 httpd.conf in apache2. Do you have any idea where to add the code for apache2?
Cheers,
Brian
12.27.2012
I see that httpd.conf will be included in apache2.conf for user options. So httpd.conf can be used. In that case, something is wrong with my code. See below, ofc modified for my setup.
PerlLoadModule Apache::Redmine
SetEnv GIT_PROJECT_ROOT /var/git/
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
RedmineGitSmartHttp yes
DAV on
AuthType Basic
Require valid-user
AuthName “Git”
PerlAccessHandler Apache::Authn::Redmine::access_handler
PerlAuthenHandler Apache::Authn::Redmine::authen_handler
RedmineDSN “DBI:mysql:database=redmine_default;host=localhost”
RedmineDbUser “MY_USERNAME”
RedmineDbPass “MY_PASSWORD”
Alias /git-private /var/git
Order deny,allow
Deny from all
Options Indexes FollowSymLinks MultiViews
Allow from 127.0.0.1
Allow from localhost
cheers,
Brian
12.31.2012
[...] I’m trying to setup automatic git repo creation when creating a new redmine project following this tutorial: http://www.dreu.info/blog/install-redmine-with-automated-git-on-centos-redhat/ [...]