如何在Ubuntu中用Gitolite和Gitweb创建自己的Git服务器

时间:2019-08-20 17:58:13  来源:igfitidea点击:

我们将选择Gitolite创建自己的git服务器并使用gitweb来显示git存储库。

为什么使用Gitolite?

易于安装,有用户管理通过命令行,使用非常少的内存和cpu。

为什么选择Gitweb?

在web界面中显示存储库。

服务器环境

  1. 操作系统:Ubuntu 12.04 LTS
  2. 架构:i686
  3. 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