• Git在服务器上的部署与使用


    【概述】

    Git是一个开源的分布式版本控制系统,记录了版本库从0开始所有的变化过程。

    Git服务器可以采用四种方式 的协议:本地传输,SSH 协议,Git 协议和HTTP 协议。其中SSH协议是推荐的协议。而权限管理器有两种Gitosis和Gitolite。Gitosis已经于09年停止更新,不过仍然可以用。gitolite一直还在更新版本。Gitolite的权限控制更加强大和复杂一些。

    Gitolite 是一款 Perl 语言开发的 Git 服务管理工具,通过公钥对用户进行认证,并能够通过配置文件对写操作进行基于分支和路径的的精细授权。Gitolite 采用的是 SSH 协议并且使用 SSH 公钥认证,因此需要对 SSH 非常熟悉,无论是管理员还是普通用户。这里有一篇关于SSH的原理性文章值得一读《SSH原理与运用》。

    本文讲述了管理员如何在服务器上部署Git,在浏览器里访问。

    【环境】

    Ubuntu10.10

     

    【约定】

    服务器 qy@server

    客户端 qyddbear@client

    服务器切换到git用户 git@server

     

    【部署步骤】

    1. 安装openssh 

    qy@server:~$ sudo apt-get install openssh-server 
    2. 创建git专用帐号
    qy@server:~$ adduser --system --shell /bin/bash --group git  

    安装 Gitolite,首先要在服务器端创建专用帐号,所有用户都通过此帐号访问 Git 库。为方便易记,选择 git 作为专用帐号名称。创建的是一个禁用密码的git用户。

    3. 添加git用户到ssh用户组

    有的系统,只允许特定的用户组(如 ssh 用户组)的用户才可以通过 SSH 协议登录,这就需要将新建的 git 用户添加到 ssh 用户组中。

    qy@server:~$ sudo adduser git ssh

    4. 设置git用户口令

    qy@server:~$ sudo passwd git

    5. 安装Git和Gitolite

    qy@server:~$ sudo apt-get install git-core
    qy@server:~$ sudo apt-get install gitolite

    当 gitolite 安装完成后,在服务器端/home/git/repositories/自动创建了一个用于 gitolite 自身管理的 git 库: gitolite-admin.git 。

    6. 生成公钥密钥

    qyddbear@client:~$ ssh-keygen  -t rsa

    连续按3次回车。

    该命令会在用户主目录下创建 .ssh 目录,并在其中创建两个文件:
    id_rsa私钥文件。是基于 RSA 算法创建。该私钥文件要妥善保管,不要泄漏。
    id_rsa.pub公钥文件。和 id_rsa 文件是一对儿,该文件作为公钥文件,可以公开。普通用户需要将此公钥文件上传到服务器上。

    7. 将公钥复制到服务器上

    管理员公钥可起名为admin.pub。普通用户可起名为xxx.pub。

    qyddbear@client:~$ sudo scp ~/.ssh/id_rsa.pub git@serverip:/tmp/admin.pub

    8. 切换到git专用账号

    qy@server:~$ su - git

    9. 将公钥导入服务器

    git@server:~$ gl-setup /tmp/admin.pub
    gl-setup将公钥装进去了,在这里:cat  .ssh/authorized_keys,具有对应私钥的远端客户机就能用私钥对SERVER进行无口令访问。

    10. 建立无口令登录

    当整个 git 服务配置完成,运行正常后,建议取消 git 的口令,只允许公钥认证。

    qyddbear@client:~$ ssh-copy-id git@serverip

    11. 客户端安装Git

    qyddbear@client:~$ sudo apt-get install git

    12. 克隆gitolite-admin库

    qyddbear@client:~$ git clone git@serverip:gitolite-admin

    这一步相当于SVN里的checkout。gitolite中的仓库全部是纯仓库形式的,即没有工作目录,对任何仓库中的工作目录进行修改或添加内容时,都需先将仓库克隆下来才行。因此可以通过克隆来验证gitolite是否安装成功。

    此时在用户目录/home/qyddbear下生成gitolite-admin目录,下面有keydir和conf两个目录。keydir里是所有组成员的公钥,初始时只有一个用户公钥,即 amdin用户的公钥admin.pub。conf目录下的gitolite.conf 文件为授权文件,用于配置用户和权限。初始内容为:

    #gitolite conf
    # please see conf/example.conf for details on syntax and features
     
    repo gitolite-admin
        RW+                 = admin
     
    repo testing
        RW+                 = @all

    缺省授权文件中只设置了两个版本库的授权:

    gitolite-admin即本版本库(gitolite管理版本库)只有 admin 用户有读写和强制更新的权限。

    testing缺省设置的测试版本库,设置为任何人都可以读写以及强制更新。

    13. 测试
    编辑gitolite.conf,加入加入mytesting项目,如下:
    repo    mytest  
                      RW+     =   @all  

    提交更改:

    qyddbear@client:~$ git commit -m "add mytesting repo" /home/qyddbear/gitolite-admin/conf/gitolite.conf 

    push到服务器:

    qyddbear@client:~$ git push

    再登陆到服务器上去验证,查看/home/git/repositories,发现里面多了一个mytesting.git的目录。

    14. 通过浏览器访问
    需要Apache作为Web服务器。Gitweb我配不出来,改为采用ViewGit。ViewGit会连接到GeSHI,,因此要安装php-geshi
    qy@server:~$ sudo apt-get install apache2 libapache2-mod-php5 php-geshi

    建立好了之后,/var/www就会自动创建。下面安装ViewGit并配置:

    qy@server:~$ cd /var/www
    qy@server:~$ sudo git clone git://repo.or.cz/viewgit.git
    qy@server:~$ sudo chown -vR www-data:www-data git
    qy@server:~$ cd /var/www/viewgit/inc
    qy@server:~$ sudo cp config.php localconfig.php
    qy@server:~$ sudo chown www-data:www-data localconfig.php
    qy@server:~$ sudo gedit localconfig.php

    修改其中的两行如下:

    $conf['projects'] = array(
        'mytesting.git' => array('repo' => '/home/git/repositories/mytesting.git/'), ); 

    $conf['projects_glob'] = array('/home/git/repositories/*.git');

    将www-dat加入git组

    qy@server:~$ sudo adduser www-data git

    浏览器里输入http://serverip/viewgit,得到如下所示:


    【参考文献】

    Gitolite构建Git服务器 http://www.doc88.com/p-089373183551.html

    UbuntuHelp:Git http://wiki.ubuntu.org.cn/UbuntuHelp:Git#Adding_a_new_project_to_the_repository

    让gitweb跑起来 http://my.oschina.net/u/174445/blog/37057

    git + gitolite + git-daemon + gitweb setup on Ubuntu 11.10 server http://computercamp.cdwilson.us/git-gitolite-git-daemon-gitweb-setup-on-ubunt

  • 相关阅读:
    logback 范例
    mysql中int、bigint、smallint 和 tinyint的区别详细介绍
    MySQL中视图和普通表的区别
    Linux 下升级JDK 1.7到1.8
    本人遇到的spring事务之UnexpectedRollbackException异常解决笔记
    Spring 调度任务@scheduled学习总结
    javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint
    spring中的scope详解
    Spring Boot 静态资源处理
    用人所长
  • 原文地址:https://www.cnblogs.com/qyddbear/p/2584874.html
Copyright © 2020-2023  润新知