zoukankan      html  css  js  c++  java
  • 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

    3.使cgi生效

    root@ubuntu:/# a2enmod cgi

    root@ubuntu:/# service apache2 restart

    4.访问GitWeb

    192.168.204.130/gitweb/

  • 相关阅读:
    程序员需要看的书
    linux常见命令实践.
    数据库使用简单总结
    剑指offer【书】之简历抒写
    面试中自己项目和你应该问的问题环节总结
    Matlab近期用到的函数(持续更新)
    排序-快速排序算法
    系统运维-hub, repeater, switch, router初览
    C++基础-位运算
    排序-冒泡排序
  • 原文地址:https://www.cnblogs.com/gofightnow/p/12874657.html
Copyright © 2011-2022 走看看