Setting up a git server
I’ve recently set up ubuntu-server on Amazon EC2. I would like to use it as my git server, so I could store my repos there.
So, where can I find some detailed instructions of how to setup git on ubuntu server? All these SSH keys and stuff like that, multiple users, etc.
http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way can be slightly modified to suit your purposes…a similar tutorial http://blog.agdunn.net/?p=277.
You can use the tutorial to install a Git server as aking1012 proposed you or you could just install SSH server on your EC2 instance (probably it would be wise to secure it and change the default port).
Git can be server-less you init your repository and then you access it from remote via SSH. So instructions like this on the Ubuntu Server should do it:
GIT_DIR=project.git git init cd project.git git --bare update-server-info cp hooks/post-update.sample hooks/post-update
Finally install SSH on your server:
sudo apt-get install ssh-server
Now, you should configure SSH to secure it.
It’s time to put your project online (the data you already have on your development machine):
git push ssh://<username>@<remote-git-hostname>/path/to/project.git master
And now you can start cloning around. You go on your development machine:
git clone ssh://<username>@<remote-git-hostname>/path/to/dir.git
Check this excellent resource on Git.
And for generating your ssh keys for safer authentication, you can read this article about SSH authentication.
As for your multiple users requirement:
Gitolite allows you to specify
permissions not just by repository
(like Gitosis does), but also by
branch or tag names within each
repository. That is, you can specify
that certain people (or groups of
people) can only push certain “refs”
(branches or tags) but not others.
The solution that worked the best for me, was setting up WebDAV.
sudo a2enmod sudo dav_fs
sudo a2enmod dav
add new file to
/etc/apache2/sites-availableand name it, for example,
git.yourserver.com. Edit it and add following lines:
DocumentRoot /var/www/git.yourserver.com/repos ServerName git.yourserver.net Options Indexes FollowSymLinks MultiViews <Location /> DAV On AuthType Basic AuthName "git repos" AuthUserFile /var/www/git.yourserver.net/password.dav Require valid-user </Location>
- create directory
sudo chown www-data /var/www/git.yourserver.com/repos
sudo htpasswd -c /var/www/git.yourserver.com/password.dav user_loginand enter password for user named
sudo chown root:www-data /var/www/git.yourserver.com/password.dav
sudo chmod 640 /var/www/git.yourserver.com/password.dav
sudo a2ensite git.yourserver.com and
sudo service apache2 restart.
/var/www/git.yourserver.com/reposand create directory, for example,
git --bare init
Now, logout from your remote server and go to local directory you want to edit your files in.
git clone http://user_login:email@example.com/myrepo.git
and you’ve finished. If you want to send your commited changes to the server:
git push origin master
You can create as many users as you want using
sudo htpasswd. Just remember not to use
-c switch, when adding more users, because old file will be deleted.
For all my Git server setups I use Gitolite which allows for a security granularity of “per-branch” access. Setup is pretty straight forward if you’re doing it on a remote server it’s as easy as running an interactive script. In addition to this “easy-to-setup” nature it also has a package in Natty and Maverick
sudo apt-get install gitolite
This won’t provide a web frontend like Github, or Gitweb – but you can easily configure and install those on top of something like Gitolite.
Definitely follow the official documentation: https://help.ubuntu.com/community/Git (section Setting up Git and Project Management)
I also like the gitolite approach for managing users and security. I have a Git + gitolite server AMI for EC2 currently being tested. Feel free to give it a try; documentation is available here:
Using this approach, you can have a central Git server with private repositories running in a matter of minutes. There is a learning curve for gitolite and EC2 if you aren’t familiar with them.