如何在CentOS中使用gitolite和gitweb安装自己的git服务器
为了管理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上显示存储库。