如何在CentOS中使用gitolite和gitweb安装自己的git服务器

时间:2019-08-20 17:58:17  来源:igfitidea点击:

为了管理git服务器的用户,我们将使用gitolite。
为了在web界面上显示存储库列表,我们将使用Gitweb。

Git项目地址:http://git-scm.com/

安装后,我们可以通过ssh和http访问git服务器。

在客户端创建RSA密钥

**在你的系统中(不是git服务器)**创建RSA密钥。

它将在系统的$HOME/.ssh目录中创建两个文件id_rsa和id_rsa.pub。
不要提供密码。当它要求设置密码时,只需按回车键

$ ssh-keygen -t rsa -C "Git-Admin"

现在将id_rsa.pub文件通过scp复制放入Git服务器

$ scp ~/.ssh/id_rsa.pub root@ip-address-of-git-server:~

以root用户登录Git服务器。

安装git、http和perl依赖关系。

# yum -y install git httpd perl-Time-HiRes perl-Data-Dumper

创建用户git,更改gid和uid

# useradd git
 # usermod -u 600 git
 # groupmod -g 600 git

将id_rsa.pub重命名,并更改其所有者和组

# mv /root/id_rsa.pub /home/git/Git-Admin.pub 
# chown git:git /home/git/Git-Admin.pub

直接从终端使用git登录。

不要为用户git设置密码,git从github.com网站中克隆gitolite

#su -l git

$whoami          (The command will show you log in with which user)
$echo $HOME       (The command will show what is your home directory)

$ git clone git://github.com/sitaramc/gitolite

在/home/git中创建bin目录,设置git管理员账号。

$ mkdir -p /home/git/bin
$ gitolite/install -ln
$ gitolite setup -pk Git-Admin.pub

退出用户git登录,再次使用root用户。

现在使用命令“suexec-V”检查默认情况下为suexec定义的值是什么。

# suexec -v

下面是我的服务器的suexec详细信息。

[root@gitserver ~]# suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_EXEC="/var/log/httpd/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=500
 -D AP_USERDIR_SUFFIX="public_html"

AP_DOC_ROOT 是 /var/www

所以在/var/www中创建一个目录bin

设置权限,更改所有者和组

#install -d -m 0755 -o git -g git /var/www/bin

在/var/www/bin/中创建一个脚本

vi /var/www/bin/gitolite-suexec-wrapper.sh

#!/bin/bash
#
# Suexec wrapper for gitolite-shell
#

export GIT_PROJECT_ROOT="/home/git/repositories"
export GITOLITE_HTTP_HOME="/home/git"

exec ${GITOLITE_HTTP_HOME}/gitolite/src/gitolite-shell

设置可执行权限

# chown -R git:git /var/www/bin
# chmod 750 /var/www/bin/gitolite-suexec-wrapper.sh
#chmod 755 /var/www/bin

修改文件 /home/git/.gitolite.rc 中的UMASK值

vi /home/git/.gitolite.rc

UMASK => 0027,

安装GitWeb

yum install gitweb

默认情况下,gitweb将安装在/var/www/git目录中

将git目录重命名为gitweb

然后目录移到/var/www/html内

# mv /var/www/git /var/www/html/gitweb

更改/var/www/html/gitweb的所有权

# chown -R git:git /var/www/html/gitweb

编辑文件/etc/gitweb.conf。并更改两个变量的值

vi /etc/gitweb.conf
     our $projectroot = "/home/git/repositories/";
     our $projects_list = "/home/git/projects.list";

编辑文件/var/www/html/gitweb/gitweb.cgi,并改变两个变量的值

vi /var/www/html/gitweb/gitweb.cgi

    our $projectroot = "/home/git/repositories";
    our $projects_list = "/home/git/projects.list";

创建虚拟文件夹git

#install -d -m 0755 -o apache -g apache /var/www/git 

编辑/etc/httpd/conf/httpd.conf文件,在最后添加下面的虚拟主机配置。

<VirtualHost *:80>

  # You can comment out the below 3 lines and put correct value as per your server information
  #  ServerName        gitserver.example.com
  #  ServerAlias       gitserver
    ServerAdmin       [email protected]

    DocumentRoot /var/www/git
    <Directory var www git>
        Options       None
        AllowOverride none
        Order         allow,deny
        Allow         from all
        
    </Directory>

    SuexecUserGroup git git
    ScriptAlias /git/ /var/www/bin/gitolite-suexec-wrapper.sh/
    ScriptAlias /gitmob/ /var/www/bin/gitolite-suexec-wrapper.sh/

    <Location git>
        AuthType Basic
        AuthName "Git Access"
        Require valid-user
        AuthUserFile /etc/httpd/conf/git.passwd
    </Location>
</VirtualHost>

编辑/etc/httpd/conf.d/git.conf文件。

在安装GitWeb后,它会自行创建这个文件。

vi /etc/httpd/conf.d/git.conf 

Alias /gitweb /var/www/html/gitweb

<Directory var www html gitweb>
  Options +ExecCGI
  AddHandler cgi-script .cgi
  DirectoryIndex gitweb.cgi
</Directory>
<Location gitweb>
   AuthType Basic
   AuthName "Git Access"
   Require valid-user
   AuthUserFile /etc/httpd/conf/git.passwd
</Location>

创建apache身份验证用户名和密码。

只有当我们第一次创建用户时,才使用“-c”标志。-c表示创建新文件。

# htpasswd -c /etc/httpd/conf/git.passwd admin

添加新用户或者更新现有用户密码请勿使用 -c标志

# htpasswd /etc/httpd/conf/git.passwd  user1
  # htpasswd /etc/httpd/conf/git.passwd  testuser

每次我们设置htpasswd用户或者passwd,都要重新启动/重新加载apache

#### 在 CentOS 6.x / RHEL 6.x
/etc/init.d/httpd restart;chkconfig httpd on

#### 在 CentOS 7.x / RHEL 7.x
systemctl restart httpd ; systemctl enable httpd

所有配置完成。现在Git服务器可以使用了。

如何查看GitWeb网页

在浏览器中打开 http://git服务器地址/gitweb/

如何在客户端机器上通过HTTP克隆存储库

使用下面命令:

$git clone http://git服务器地址/git/repo-name.git

注意看区别,当我从Git服务器克隆repo时,我在URL的中间使用了单词 Ggit
而对于gitweb,我使用的是 “gitweb”

这是因为:
在httpd.conf,“ScriptAlias /git//var/www/bin/gitolite-suexec-wrapper.sh/"

在git.conf网站是:“Alias /gitweb/var/www/html/gitweb”

如何管理Git服务器的用户和组

要从远程计算机管理Git服务器中的用户/组,必须在系统中克隆gitolite-admin。

$cd ~/Desktop
$ git config --global user.name "Git-Admin"
$ git config --global user.email "[email protected]"
$ git clone git@GitServerIP-or-FQDN:gitolite-admin.git

通过gitolite.conf文件,我们可以从系统管理用户和组的文件。
每次做了变更后,都要执行“git push”

示例:

Hyman@mypc:~/Desktop/gitolite-admin/conf$ pwd
/home/Hyman/Desktop/gitolite-admin/conf
Hyman@Hyman-sapplica:~/Desktop/gitolite-admin/conf$ cat gitolite.conf 
repo gitolite-admin
    RW+     =   Git-Admin

repo testing
    RW+     =   @all
    R       =   git daemon

Hyman@mypc:~/Desktop/gitolite-admin/conf$

其中:
R=读取
W=写入

现在将gitolite.conf的变更推送到git服务器。

$ cd ~/Desktop/gitolite-admin/conf
$ls -l gitolite.conf

$git add gitolite.conf
$git commit -m "first commit"
$git push origin master

如何在Git服务器中创建存储库

在这个示例中,我们将创建一个库叫test-repo。

# su -l git
$ cd repositories
$ mkdir linux.git
$ cd linux.git
$ git --bare init
$ git update-server-info

更新projects.list文件

现在使用刚创建的库名更新 projects.list文件。

vi /home/git/projects.list
testing.git
linux.git

更新后,它将在Gitweb上显示存储库。