您的位置:首页 > 运维架构 > Apache

利用apache2+gitolite+gitweb搭建git服务器的详细步骤

2017-11-10 10:17 573 查看
今天没事在自己的服务器利用gitolite+gitweb搭建了一个git server(git服务器),其中遇到的问题很多,现在都记录下来,和大家分享。我是按照Git : Ubuntu-git服务器搭建之亲自搭建 他的方法搭建的,非常不错的过程,只不过gitweb那儿行不通,我在另外一篇博文中解决了这个问题

git push 后 gitweb不能查看git 仓库(权限问题)

一:环境

现在我有三台机子,一个是我win7,一个是我的ubuntu14.04LTS虚拟机,一个是我的云主机,我在ubuntu上搭建git服务器,win7作为管理员机器,云主机作为客户端,暂且把他们分类如下:
1
2
root@server:    为搭建git服务器终端,假设ID为     192.168.0.196
root@client:    为客户终端   ,            假设ID为     192.168.6.201
root@admin:   为管理员终端,           假设ID为     192.168.6.200
1
2
3
为了方便,我也采用上面博文的命名方法,

服务器终端名字为 : S1
管理员终端名字为 : A1
客户终端名字为   :  C1
1
2
3
以后在文档中,我会使用 S1,A1,C1来简单代替

二:安装

2.1 安装openssh服务器(在git server上)



2.2 创建个人公钥和私钥

在默认用户的主目录路径下,运行以下命令,按照提示创建公钥和私钥,一直回车,不用管。

root@server: / $ ssh-keygen -t rsa
1
默认情况下,公钥和私钥会保存在 ~/.ssh 目录下

root@server: / $ cd ~/.ssh
root@server: / $ ls
1
2
会看到如下文件:

id_rsa id_rsa.pub known_hosts

id_rsa 是私钥,不能给别人,id_rsa.pub是公钥,要给你要访问的主机的管理员。

2.3 安装 git 服务器

root@server: / $ sudo useradd -m git
root@server: / $ sudo passwd git    //给 git用户设置密码
1
2
假如要删除用户执行如下命令

root@server: / $ sudo userdel -r git     //假如-r参数会把git文件夹也删除
1
2.5 安装配置gitolite

2.5.1 安装要求

UNIX/LINUX操作系统
shell环境
git 1.6.6+
perl 5.8.8+
openssh 5.0+
专为gitolite使用的账号(本文会设置为git)
1
2
3
4
5
6
在这里,需要先把作为管理员的机子 A1 的密钥上传给 服务器S1

在 A1 中:

生成密钥

root@admin:/$ ssh - keygen - t rsa
1
2
把密钥上传给 S1 (服务器地址为 192.168.0.196)

root@admin:/$ scp ~/.ssh/id_rsa.pub git@192.168.0.196:/home/git/
1
2
如果不行的话就用Filezilla连接,上传过去。

2.5.2 安装

首先需要以git账号登陆server服务器

需要确保~/.ssh/authorized_key为空或者不存在!假如在~/.ssh目录中已经有了authorized_key,

直接把authorized_key删除即可!

接下来进入git用户:

root@server: / $ su git
$ cd /home/git
1
2
下载gitolite

$ git clone git://github.com/sitaramc/gitolite
$ mkdir -p /home/git/bin
$ gitolite/install -to /home/git/bin  //这里会在bin目录下安装一下文件
$cd /home/git/bin
1
2
3
4
到这一步,接下来我们需要创建gitolite了!,在这个时候我们需要使用的刚才

A1上传上来的密钥了!!

$./gitolite setup -pk  /home/git/id_rsa.pub
1
到达这一步,假如提示如下信息,代表安装已经完成了:



*假如出现*

WARNING: keydir/git_key.pub duplicates a non-gitolite key, sshd will ignore it

这种警告,说明配置有些问题,需要删除/home/git目录下的

.gitolite 和.gitolite.rc 和 repositories 和 ~/.ssh/authorized_keys四个文件!!

退出git用户

$exit
1
到这里,gitolite就安装完成了,并且会在 /home/git/repositories 目录中创建了

gitolite-admin.git 和 testting.git 两个目录

在这里,

gitolite-admin.git目录为用户管理仓库

testting.git为测试仓库

并且A1管理员也已经确定下来!!!

三:测试使用gitolite!

3.1 管理员机下载gitolite仓库管理

在上面的步骤中,我们配置好了gitolite,在这里,我们来测试一下,

首先,在管理员的机子 A1 中,下载 管理仓库!

A1端:

root@admin:/$ git clone git@192.168.0.196:gitolite-admin
1
可以得到如下打印信息,由于是管理员机子,所有直接不需要密码,就可以把gitolite-admin.git仓库里面的东西下载下来



*在这里,可以看到传输是已经成功了,但是还是会打印出很多烦人的提示如*

LC_All = …

LC_TIME = …

LC_MONETARY = …

…等等

解决方法为在:

在~/.bashrc中添加

再最底部加上

export LC_ALL=C

或者直接运行

echo “export LC_ALL=C” >> /root/.bashrc

然后执行一下:

source /root/.bashrc

好了,在这个时候,在A1中可以得到如下文件夹:

gitolite-admin

进入该文件:

root@admin:/$ cd gitolite-admin
1
2
可以看到在这个又两个目录 conf 和keydir

conf keydir

conf 目录保存的是配置文件

keydir目录保存的这是各个用户的密钥!

3.2 测试gitolite

3.2.1 用户端上传密钥给管理员A1

在这里,我们需要预先把 C1 密钥上传给 管理员端 A1

C1端:

生成密钥

root@client :/$  ssh - keygen - t rsa
1
2
使用scp上传密钥给 A1 (A1 ip 192.168.6.200)

root@client :/$  scp ~/.ssh / id_rsa.pub root@192.168.6.200:/home /tmp/
1
2
这个时候,在A1端,我们可以看到

在/home/tmp目录中有:



这个id_rsa.pub就是刚才 C1上传上来的密钥了!!

传不了的话用FileZilla传。

这是,在A1端我们需要实现如下操作:

修改C1的密钥的名字,方便记忆和使用,因为C1 ip为 192.168.6.201所有有如下操作:

root@ admin/home/tmp $  mv id_rsa.pub 201.pub
1
2
把密钥拷贝到gitolite-admin目录中的keydir目录中!

root@ admin/home/tmp $ cp 201.pub /home/tmp/gitolite-admin/keydir/(keydir目录就是用来保存所有用户密钥的特定目录)!
1
2
3.2.2 管理员修改权限

完成上文操作后,现在我们来建立一个tomtest的测试仓库!

在A1端:

进入配置文件目录 conf

root@admin/home/tmp $  cd gitolite-admin/conf
1
修改配置文件

root@admin/home/tmp/gitolite-admin/conf $  vi gitolite.conf
1
2
在这个时候可以看到,配置文件内容为:



我们在这里,添加

repo tomtest
RW+    =    201
1
2
如下图所示:



然后,保存退出后,开始上传提交仓库!

现在退出到gitolite-admin目录执行以下操作

root@admin/home/tmp/gitolite-admin $ git add .
root@admin/home/tmp/gitolite-admin $ git commit -am "add 201"
root@admin/home/tmp/gitolite-admin $ git push origin master        //默认在配置仓库的config文件中origin就已经定义了服 务器的地址了!
1
2
3
4
这个时候,就把修改上传给了服务器了,我们现在再到服务器端看一下是否有修改到!

在S1服务器端:

现在我们使用ls命令来查看一下仓库是否有变化:

进入仓库

root@server:/$ cd /home/git/repositories
root@server: /home/git/repositories $ ls
1
2
3
在这个时候,可以看到如下结果:



在服务器上,多了一个tomtest.git 空仓库了!!!!!!!!!

并且这个空的仓库,是已经初始化好的仓库,并且只有客服端C1 对该仓库有读写权限!!!

3.2.3 测试仓库tomtest.git

从上文可以知道,服务器上,已经创建好的一个空的tomtest.git仓库了,

现在我们来测试一下把需要的项目上传到tomtest.git中!

现在我们在客户端C1中,随便创建一个tomtest目录,并在里面添加东西

如下操作:

root@client:/$  mkdir tomtest
root@client:/tomtest$ mkdir aaa
root@client:/tomtest$ touch ccc
root@client:/tomtest$ cd   aaa
root@client:/tomtest/aaa$ touch aaa
1
2
3
4
5
6
从上面的操作可以知道

我们在客户端创建了一个 tomtest目录,并且在tomtest目录中,创建了目录aaa和文件 ccc

并且在目录aaa中创建了文件aaa

接下来我们执行以下操作

root@client:/tomtest$ git init        //初始化
root@client:/tomtest$ git add .
root@client:/tomtest$ git commit -am "No.1"
root@client:/tomtest$ git remote add origin git@192.168.0.196:tomtest
root@client:/tomtest$ git push origin master
1
2
3
4
5
6
在这个时候,我们就可以把tomtest项目不需要任何密码 保存到了服务器中,

现在我们再使用管理员来测试,

A1端:

root@admin:/$  git clone git@192.168.0.196:tomtest        //下载服务器中的tomtest项目
1
2
会提示如下错误信息:



直白点,就是管理员,下载不了这个项目!!!,为什么,因为在上面的操作中,

对tomtest项目有读写操作权限的,只有客户端 C1!!!

现在,我们在切换回去客户端C1

C1端:

我们先把刚才的tomtest项目删除,按道理,因为tomtest项目已经上传到服务器中了,所有哪怕我们

删除了该tomtest项目,只要再想服务器下载,还是可以完整的下载回来的!!!!

操作如下:

root@client:/$ rm  -r tomtest    //完全删除了tomtest项目
1
2
向服务器下载tomtest项目

root@client:/$  git clone git@192.168.0.196:tomtest
1
2



完整下载!!!!!

我们通过查看,可以看到这个下载的tomtest项目,就是我们之前上传上去的项目!!!!!!



到这里可以验证了gitolite的项目管理的能力了!!!!!!!!!!!!!!!!!!!!!!!!!!

四:安装测试gitweb apache2

安装gitweb apache2
root@service : / $  sudo apt - get install gitweb apache2
1
修改配置文件(因为gitweb在/etc/apache2/conf.d/下安装了配置文件,这个目录是过时的):
sudo cp /etc/apache2/conf.d/gitweb /etc/apache2/conf-available/gitweb.conf
cd /etc/apache2/conf-enabled
sudo ln -s ../conf-available/gitweb.conf
1
2
3
修改gitweb.conf 如下:

Alias /gitweb /usr/share/gitweb

<Directory /usr/share/gitweb>
Options +FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
</Directory>
1
2
3
4
5
6
(在 FollowSymLinks之前加上了 “+”解决语法问题)

使能cgi:
sudo a2enmod cgi
sudo service apache2 restart
1
2
配置 /etc/gitweb.conf 文件:
$projectroot = '/home/git/repositories';
$projects_list = $projectroot;
1
2
最后一点非常重要,一定要修改git用户目录下的.gitolite.rc文件中的UMASk值,可以修改为0002,当然也可以修改成0022,都行,如下:





具体原因可以看我的另一篇博文git push 后 gitweb不能查看git 仓库(权限问题)

然后你就可以在浏览器输入 http://你的ip(或者localhost)/gitweb,显示如下:


转自:http://blog.csdn.net/whbing1471/article/details/52017591
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: