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

什么是Gitosis?

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

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

一、Git的安装与配置

        root@192.168.204.130是服务端(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 root@192.168.204.130:/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 git@192.168.204.130: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 git@192.168.204.130: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  

</Directory>  

3.使cgi生效

root@ubuntu:/# a2enmod cgi

root@ubuntu:/# service apache2 restart

4.访问GitWeb

192.168.204.130/gitweb/


到这里就结束啦!恭喜你已经成功搭建了Git服务器,并用GitWeb浏览服务器上的项目了!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容