Ubuntu下使用gitosis搭建Git服务器,并且安装GitWeb

什么是Gitosis?

​ Gitosis是一套用来管理authorized_keys文件和实现简单连接限制的脚本。

​ 而且Gitosis管理用户权限并不是通过网页或者某个程序,而是通过一个特殊的Git仓库来管理。你只需要在这个非常“特殊”的仓库配置好用户和权限,然后推送到服务器上面,Gitosis就会随之改变运行策略。

一、Git的安装与配置

[email protected]是服务端(Ubuntu主机) , ip是: 192.168.204.130

​ myWindows$ 是服务器的管理员(也可以作为客户端使用)

1.安装git和openssh

​ 从这里开始的命令在服务端执行(记得要登陆到root用户下哦,当然在普通用户下也可以在命令前加 sudo 来提权执行)

root@ubuntu:/# apt-get update

root@ubuntu:/# apt-get install git-core openssh-server openssh-client

​ git-core 是git版本控制的核心软件

​ openssh-server和openssh-client 是由于git需要通过ssh协议在服务端与客户端之间传输文件

2.创建git用户组与git用户

​ 该用户作为Git仓库和用户权限的管理员(这里不建议创建为其他用户名管理,本人试过用自己的名字,最后仍然是真香了)

root@ubuntu:/# groupadd git

root@ubuntu:/# git -g git -m

root@ubuntu:/# passwd git //设置git用户的密码

二、Gitosis的安装与配置

1.安装gitosis前的准备

​ 初始化服务器的全局设置,为安装gitosis做准备。在任何机器上,第一次使用git,必须要先设置user.nameuser.email这两条属性。

root@ubuntu:/# git config --global user.name "你的name"

root@ubuntu:/# git config --global user.email "你的邮箱"

2.安装python的setuptools

root@ubuntu:/# apt-get install python-setuptools

3.安装gitosis

​ /tmp 是ubuntu各种安装包与文件的存放目录,所以建议进入此目录获取gitosis包,并安装。

root@ubuntu:/# cd /tmp

root@ubuntu:/tmp# git clone https://github.com/res0nat0r/gitosis.git

root@ubuntu:/tmp# cd gitosis

root@ubuntu:/tmp/gitosis# python setup.py install

4.配置gitosis

​ 接下来的命令在管理员机器执行(本文是Windows系统)

​ 使用git管理员的PC(Windows系统)来生成访问git服务器的ssh公钥,然后将生成的ssh公钥拷贝到git服务器,执行相关的命令来允许你的个人计算机进行访问和管理git服务器。本文使用 myWindows$ 来作为远程访问和控制git服务器的管理员。

​ 管理员PC也要安装git , Windows安装git for Windows , Linux系统参照本篇文章 一、Git的安装与配置

执行命令使用的是Git Bash窗口

​ 然后设置user.nameuser.email这两条属性。

​ 之后,执行接下来的这条命令,记得不要输入任何字符,直接回车

myWindows /$ ssh-keygen -t rsa

​ 执行完毕后 , 会在当前用户目录下生成.ssh/id_rsa和.ssh/id_rsa.pub。其中.ssh/id_rsa是私钥.ssh/id_rsa.pub是公钥。接下来可以使用如下命令将git管理员的公钥上传到git服务器,也可以直接拷贝到git服务器,建议目录是 /tmp。

myWindows /$ scp ~/.ssh/id_rsa.pub [email protected]:/tmp/id_rsa.pub

​ 如果这条命令拷贝不成功你也可以用其他方式上传到服务器的/tmp目录下,展开你的想象上传吧!!

​ 回到git服务器的/tmp/gitosis目录下,执行(又开始用服务端了哦!)

root@ubuntu:/tmp/gitosis# chmod a+r /tmp/id_rsa.pub

root@ubuntu:/tmp/gitosis# -H -u git gitosis-init < /tmp/id_rsa.pub

​ 执行完毕后会出现以下信息 :

已初始化空的 Git 仓库于 /home/git/repositories/gitosis-admin.git/

重新初始化已存在的 Git 仓库于 /home/git/repositories/gitosis-admin.git/

​ Gitosis通过一个git仓库来管理配置文件,仓库放在/home/git/repositories/gitosis-admin.git中。接下来设置git仓库的权限

root@ubuntu:/tmp/gitosis# chown git:git /home/git/repositories

root@ubuntu:/tmp/gitosis# chmod 755 /home/git/repositories

root@ubuntu:/tmp/gitosis# chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

5.在服务器上新建一个测试项目仓库

​ 接下来的命令在服务端执行

​ 在服务器上新建一个空的项目仓库,叫做 "test" 。

这里需要切换到git用户!!并且确保你在/home/git/repositories目录下,可以使用pwd命令来查看现在处于什么位置。

root@ubuntu:/tmp/gitosis# su - git

$ cd repositories

$ git init --bare test.git

$ exit

​ 到此为止,test只是一个空的仓库,它是不能被clone的。为了能clone,必须要让管理员放一个初始化的版本到仓库中。所以现在我们需要先修改一下gitosis-admin仓库。

6.管理gitosis的配置文件

​ 接下来的命令在管理员机器执行

​ Gitosis本身的配置也是通过git来实现的。在刚刚上传公匙的电脑(就是使用ssh-keygen -t rsa命令的机器)上把服务器上的gitosis-admin.git这个仓库clone下来,就可以用管理员的身份修改配置了。因为之后还要继续进行管理所以最好有特定的文件夹存放。

注意:访问git用户仓库的默认路径是/home/git/repositories/

myWindows /$ cd /

myWindows /$ mkdir admin

myWindows /$ cd admin

myWindows /admin$ git clone [email protected]:gitosis-admin.git

myWindows /admin$ cd gitosis-admin

​ 该目录下的keydir目录是用来存放所有需要访问git服务器的用户的ssh公钥。哥哥用户按照前面的方法生成各自的ssh公钥之后按照名字重新命名一下,然后拷贝到keydir目录下,然后修改本目录下的gitosis.conf文件,做出相应的配置:

[gitosis]

[group gitosis-admin]

members = tom david

writable = gitosis-admin

[group team]

members = david tom pitter

writable = test

注意:members = keydir目录下 .pub文件名,否则是没有访问权限的!多个管理者之间要用空格分开,项目名也是一样的。

​ 这个配置文件表达了如下 :

​ gitosis-admin组成员有david和tom , 该组对gitosis-admin仓库有读写权限 ; test组由david tom和pitter三个成员 , 该组对test仓库有读写权限。

​ 目前这些配置更改只是在本地,必须推送到远程的git服务器上才能真正生效。所以在gitosis-admin目录下执行一下操作

myWindows /admin/gitosis-admin(master)$ git add .

myWindows /admin/gitosis-admin(master)$ git commit -am "更改git服务器配置,增加管理员,配置成员可读写的库"

myWindows /admin/gitosis-admin(master)$ git push origin master

7.初始化测试项目

​ 现在,服务器已经搭建完毕,并且有一个空的项目test在服务器上。接下来,需要测试一下,空仓库是不能被clone的,所以需要某个由读写权限的人初始化一个版本。在管理员的PC执行 :

myWindows /admin/gitosis-admin(master)$ cd /

myWindows /$ mkdir test-ori

myWindows /$ cd test-ori

myWindows /test-ori$ git init

myWindows /test-ori(master)$ echo "/*初始化一个版本,这样其他的成员才能clone*/" > version.txt

myWindows /test-ori(master)$ git add .

myWindows /test-ori(master)$ git commit -m "initial version"

myWindows /test-ori(master)$ git remote add origin [email protected]:test.git

myWindows /test-ori(master)$ git push origin master

​ 到此为止,test已经有一个版本了。team的其他成员只要先clone一下test仓库就可以了,而且这些成员需要在gitosis.conf中被赋予读写权限。

三、安装GitWeb

1.安装gitweb,apache2

root@ubuntu:/tmp/gitosis# cd /

root@ubuntu:/# apt-get install gitweb apache2

2.修改配置文件(记得保存)

①修改/etc/gitweb.conf

内容如下:

vim /etc/gitweb.conf

$projectroot = "/home/git/repositories";

$git_temp = "/tmp";

$projects_list = $projectroot;

@stylesheets = ("../gitweb/static/gitweb.css");

$javascript = "../gitweb/static/gitweb.js";

$logo = "../gitweb/static/git-logo.png";

$favicon = "../gitweb/static/git-favicon.png";

@diff_opts = ();

这个文件的更改基本就是去除注释而已啦,很简单的。

②修改/etc/apache2/conf-available/gitweb.conf

内容如下:

Alias /gitweb /usr/share/gitweb

<Directory /usr/share/gitweb>

Options +FollowSymLinks +ExecCGI

AddHandler cgi-script .cgi

3.使cgi生效

root@ubuntu:/# a2enmod cgi

root@ubuntu:/# service apache2 restart

4.访问GitWeb

192.168.204.130/gitweb/

猜你喜欢

转载自www.cnblogs.com/gofightnow/p/12874657.html