如何在Ubuntu中用Gitolite和Gitweb创建自己的Git服务器
我们将选择Gitolite创建自己的git服务器并使用gitweb来显示git存储库。
为什么使用Gitolite?
易于安装,有用户管理通过命令行,使用非常少的内存和cpu。
为什么选择Gitweb?
在web界面中显示存储库。
服务器环境
- 操作系统:Ubuntu 12.04 LTS
- 架构:i686
- Git服务器IP地址:10.10.0.16
按照以下步骤设置gitolite和gitweb
使用root进行操作
linux@ubuntu:~$sudo su -
安装git
# apt-get install git
创建无密码的用户git
root@ubuntu:~# adduser --system --shell /bin/bash --gecos 'git version control' --group --disabled-password --home /home/git git
使用git登录
root@ubuntu:~# su -l git
使用git命令获取gitolite的克隆,保存到/home/git目录
git@ubuntu:~$ cd /home/git ; git clone git://github.com/sitaramc/gitolite
在/home/bin中创建一个名为bin的目录
git@ubuntu:~$ mkdir $HOME/bin
安装git
在git克隆之后,在/home/git中可以看到gitolite目录。它有安装文件
git@ubuntu:~$ gitolite/install -ln
执行gitolite/install-ln命令后,只需查看bin目录即可。
看是否创建了新的gitolite文件
git@ubuntu:~$ ls bin/gitolite bin/gitolite git@ubuntu:~$
现在登录到linux系统或者pc上
在那里我们可以已Git管理员身份管理Git服务器。
在这里,我们将创建RSA密钥,而这个RSA密钥将转移到gitolite服务器。
如果我们已经在$HOME/.ssh中拥有RSA密钥,则可以跳过此步骤。
创建RSA密钥,当它要求输入密码时,只需要按回车键。
Hyman@theitroad:~$ ssh-keygen -t rsa -C "Git-Admin" Generating public/private rsa key pair. Enter file in which to save the key (/home/linux/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/linux/.ssh/id_rsa. Your public key has been saved in /home/linux/.ssh/id_rsa.pub. The key fingerprint is: 9c:96:f3:4e:cb:8e:59:6b:76:05:87:cf:ff:7b:76:93 Git-Admin The keys randomart image is: +--[ RSA 2048]----+ | | | | | . | | . o o . | | S = | | . o + | | + . ..| | Boo. E=| | o+*. oB| +-----------------+ Hyman@theitroad:~$
将密钥复制到git服务器。
Hyman@theitroad:~$ scp ~/.ssh/id_rsa.pub [email protected]:~ [email protected]'s password: id_rsa.pub 100% 391 0.4KB/s 00:00 Hyman@theitroad:~$
再登录到git服务器
使用root用户将/home/git中的文件id_rsa.pub重命名为Git-Admin.pub。
将其所有权和组更改为git,然后使用用户git再次登录。
Hyman@theitroad:~$ ssh [email protected] [email protected]’s password: Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686) * Documentation: https://help.ubuntu.com/ System information as of Fri May 31 22:27:03 IST 2013 System load: 0.0 Processes: 68 Usage of /: 7.3% of 13.67GB Users logged in: 1 Memory usage: 8% IP address for eth0: 10.0.2.15 Swap usage: 0% IP address for eth1: 10.10.0.16 Graph this data and manage this system at https://landscape.canonical.com/ Last login: Fri May 31 22:02:48 2013 from 10.10.0.9 linux@ubuntu:~$ linux@ubuntu:~$ sudo su – [sudo] password for linux: root@ubuntu:~# linux@ubuntu:~$ sudo mv id_rsa.pub /home/git/Git-Admin.pub ; sudo chown git:git /home/git/Git-Admin.pub [sudo] password for linux: linux@ubuntu:~$ root@ubuntu:~# su -l git git@ubuntu:~$ git@ubuntu:~$ git@ubuntu:~$ whoami git git@ubuntu:~$
设置Git Admin
git@ubuntu:~$ bin/gitolite setup -pk Git-Admin.pub Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/ Initialized empty Git repository in /home/git/repositories/testing.git/ WARNING: /home/git/.ssh missing; creating a new one WARNING: /home/git/.ssh/authorized_keys missing; creating a new one git@ubuntu:~$
可以看到创建了一些重要的文件和文件夹,但它们是隐藏的。
git@ubuntu:~$ ls -la total 48 drwxr-xr-x 7 git git 4096 May 31 22:39 . drwxr-xr-x 4 root root 4096 May 31 22:03 .. -rw------- 1 git git 160 May 31 22:31 .bash_history drwxrwxr-x 2 git git 4096 May 31 22:05 bin -rw-r--r-- 1 git git 391 May 31 22:23 Git-Admin.pub drwxr-xr-x 5 git git 4096 May 31 22:05 gitolite drwxrwxr-x 6 git git 4096 May 31 22:39 .gitolite -rw-rw-r-- 1 git git 5179 May 31 22:39 .gitolite.rc -rw-rw-r-- 1 git git 12 May 31 22:39 projects.list drwxrwxr-x 4 git git 4096 May 31 22:39 repositories drwx------ 2 git git 4096 May 31 22:39 .ssh git@ubuntu:~$
默认创建了两个repo
一个是用于git管理的,另一个是测试repo
git@ubuntu:~$ ls -la repositories/ total 16 drwxrwxr-x 4 git git 4096 May 31 22:39 . drwxr-xr-x 7 git git 4096 May 31 22:39 .. drwxrwxr-x 8 git git 4096 May 31 22:39 gitolite-admin.git drwxrwxr-x 7 git git 4096 May 31 22:39 testing.git git@ubuntu:~$
登录到刚才创建RSA密钥的系统。配置git账号
Hyman@theitroad:~$ sudo apt-get install git Hyman@theitroad:~$ cd ~/Desktop Hyman@theitroad:~$ git config --global user.name "Git-admin" Hyman@theitroad:~$ git config --global user.email "[email protected]" Hyman@theitroad:~$ Hyman@theitroad:~$ git config --list user.name=Git-admin [email protected] Hyman@theitroad:~$
从git服务器中克隆 gitolite-admin.git
Hyman@theitroad:~/Desktop$ git clone [email protected]:gitolite-admin.git Cloning into 'gitolite-admin'... remote: Counting objects: 6, done. remote: Compressing objects: 100% (4/4), done. Receiving objects: 100% (6/6), 736 bytes, done. remote: Total 6 (delta 0), reused 0 (delta 0) Hyman@theitroad:~/Desktop$
现在,从git服务器克隆后,将有一个gitolite-admin目录
gitolite.conf文件主要用于git服务器的用户和组ACL。
现在,我们可以从系统轻松地管理用户组ACL。不过需要执行“git push”命令。
Hyman@theitroad:~/Desktop$ Hyman@theitroad:~/Desktop$ cd gitolite-admin/ Hyman@theitroad:~/Desktop/gitolite-admin$ ls conf keydir Hyman@theitroad:~/Desktop/gitolite-admin$ cd conf/ Hyman@theitroad:~/Desktop/gitolite-admin/conf$ Hyman@theitroad:~/Desktop/gitolite-admin/conf$ ls gitolite.conf Hyman@theitroad:~/Desktop/gitolite-admin/conf$ cat gitolite.conf repo gitolite-admin RW+ = Git-Admin repo testing RW+ = @all Hyman@theitroad:~/Desktop/gitolite-admin/conf$
如何将gitolite.conf的变更通知git服务器
使用下面的命令将更改推送到Git服务器。
转到克隆目录gitolite-admin,然后进入conf目录。
修改gitolite.conf文件,并使用下面的命令进行推送:
$ cd ~/Desktop/gitolite-admin/conf $ls -l gitolite.conf $git add gitolite.conf $git commit -m "first commit" $git push origin master
“git pull”命令用于从git服务器上拉取文件/目录。
安装和配置Gitweb
登录git服务器,切换到root用户
$ sudo su -
在/usr/share中安装gitweb
root@ubuntu:~# apt-get install gitweb apache2
index.cgi 是 gitweb.cgi的软链接。
root@ubuntu:~# ls -l /usr/share/gitweb/ total 236 -rwxr-xr-x 1 root root 236227 Apr 11 2012 gitweb.cgi lrwxrwxrwx 1 root root 10 Apr 11 2012 index.cgi -> gitweb.cgi drwxr-xr-x 2 root root 4096 May 31 22:04 static root@ubuntu:~#
编辑/home/git/.gitolite.rc
将UMASK值改为0027
编辑/etc/gitweb.conf, 修改下面这两行
root@ubuntu:~# vi /etc/gitweb.conf $projectroot = "/home/git/repositories/"; $projects_list = $projectroot;
编辑/usr/share/gitweb/gitweb.cgi文件
将$projectroot 的值改为 /home/git/repositories
将$projects_list 的值改为 /home/git/projects.list
root@ubuntu:~# vi /etc/gitweb.conf $projectroot = "/home/git/repositories/"; $projects_list = "/home/git/projects.list";
重新启动apache2
root@ubuntu:~# /etc/init.d/apache2 restart
通过浏览器访问gitweb
http://10.10.0.16/gitweb
用htpasswd保护Gitweb
现在所有人都可以访问gitweb页面。
我们在apache中使用htpasswd。访问的人必须提供用户名和密码。
编辑文件/etc/apache2/conf.d/gitweb
root@ubuntu:~# vi /etc/apache2/conf.d/gitweb Alias /gitweb /usr/share/gitweb <Directory usr share gitweb> Options FollowSymLinks +ExecCGI AddHandler cgi-script .cgi AllowOverride None Order allow,deny Allow from all AuthType Basic AuthName "Git Access" Require valid-user AuthUserFile /etc/apache2/gitweb-htpasswd </Directory> root@ubuntu:~#
创建htpasswd用户名和密码
root@ubuntu:~# htpasswd -mc /etc/apache2/gitweb-htpasswd admin New password: Re-type new password: Adding password for user admin root@ubuntu:~#
现在重新启动apache2
root@ubuntu:~# /etc/init.d/apache2 restart
再次访问gitweb
http://git服务器ip/gitweb