CentOS搭建gitolite服务器

article/2025/10/3 21:56:37

目录

前言

一、创建虚拟机

二、修改虚拟机用户名

三、创建用户

四、通过源码安装gitolite

五、版本库镜像

六、验证镜像是否成功

七、新增加用户

八、创建远程仓库

参考资料


前言

一提起 Git,大家基本上都会想到 GitHub, GitLab 这一类在线托管平台。

我们可能习惯了在这些平台上创建仓库、推拉代码、创建 Pull/Merge Request、发起 Issue。但这些特性都不是 Git 提供的,Git 能跟踪的只有代码信息。这类平台是在 Git 之上重新构建了一套 Web 系统来保存诸如用户、Pull/Merge Request、Issue 等信息的。

如果你只是想简单控制一下用户权限,则不需要这么复杂的系统,gitolite 就够用。我也是偶然发现 gitolite 的,很喜欢这种轻量级的设计。但我没想到的是好多著名的开源项目也在使用 gitolite:

  • linux 内核
  • gentoo linux 发行版
  • fedora linux 发行版

gitolite 的原理很简单。首先,它提供了一个 gitolite-shell。当你使用 ssh 访问 gitolite 时 ssh 服务会启动 gitolite-shell。这个脚本会检查当前用户是否有权限访问对应的仓库。如果用户通过 git push 修改了仓库内容,则会触发 gitolite 预先配置 git hook,这些 hook 会执行创建仓库、添加用户之类的操作。[1]

本文将详细介绍如何搭建一个gitolite服务器。

一、创建虚拟机

确保局域网的机器所有的IP地址都在一个网段192.168.163.***

二、修改虚拟机用户名

确保/etc/hosts, /etc/sysconfig/network, gitolite.rc文件中的hostname一致,本文统一为gitserver1,gitserver2, gitserver3 …

查看用户名

[root@localhost ~]$ hostname
[root@localhost ~]$ vim /etc/hosts

hosts文件,给127.0.0.1添加hostname

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 gitserver1
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.163.110 gitserver1
192.168.163.111 gitserver2
192.168.163.112 gitserver3

重启服务器

[root@localhost ~]$ vim /etc/sysconfig/network              # 编辑network文件修改hostname行
[root@centos6 ~]$ cat /etc/sysconfig/network                # 检查修改
NETWORKING=yes
HOSTNAME= gitserver1

重启系统

三、创建用户

一般都将新建的用户放到/home文件路径下,切换到root用户下,安装所需要的依赖文件:

[root@localhost ~]# yum install zlib-devel perl-CPAN perl-devel curl-devel gettext expat-devel gettext-devel openssl-devel perl-Time-HiRes git -y

创建git用户

[root@localhost ~]# adduser –d /home/git git

给git用户创建密码

[root@localhost ~]# echo ‘*****’ | passwd –stdin git

创建bin文件夹,配置环境变量

[root@localhost ~]# vim /etc/profile

在最后,添加:

#gitoliteexport PATH="~/bin:$PATH"

保存,退出,然后运行:

[root@localhost ~]# source /etc/profile

不报错则成功。

[root@localhost ~]# vim /usr/lib/tmpfiles.d/tmp.conf

添加如下一条

X /tmp/*.pub

切换到git用户,创建公钥和私钥对,在服务器端生成公钥和私钥对。

[git@localhost ~]$ ssh-keygen -t rsa

将服务器的公钥发送到客户端的ssh目录(/tmp/)并命名为gitserver1.pub。gitserver1上创建的公钥复制到gitserver2上,命名为:gitserver1.pub。

[git@localhost gitserver1]$ scp ~/.ssh/id_rsa.pub git@gitserver2:/tmp/gitserver1.pub

gitserver2上创建的公钥复制到gitserver1上,命名为:gitserver2.pub。

[git@localhost gitserver2]$ scp ~/.ssh/id_rsa.pub git@gitserver1:/tmp/gitserver2.pub

修改tmp文件删除规则,禁止centos 10天后自动删除pub文件

四、通过源码安装gitolite

[git@localhost ~]$ mkdir bin

使用改进后的Gitolite版本库github.com/ossxp-com/gitolite.git

[git@localhost ~]$ git clone git://github.com/ossxp-com/gitolite.git

安装Gitolite

[git@localhost ~]$ cd gitolite
[git@localhost gitolite]$  ./gitolite/src/gl-system-install

运行: gl-setup完成设置。

[git@localhost ~]$ vim ~/bin/gl-setup

修改GL_PACKAGE_CONF=$HOME/share/gitolite/conf,将客户机的id_rsa.pub文件上传到gitserver1的目录下/tmp/admin.pub。运行下面的命令进行设置

[git@localhost bin]$ ./gl-setup /tmp/admin.pub

五、版本库镜像

打开gitserver1上Gitolite的配置文件:file:`~/.gitolite.rc`,进行如下设置:

[git@localhost ~]$ vim ~/.gitolite.rc$GL_HOSTNAME = 'gitserver1';
$GL_GITCONFIG_KEYS = "gitolite.mirror.*";
$GL_PACKAGE_CONF = $ENV{HOME} . "/share/gitolite/conf";
$GL_PACKAGE_HOOKS = $ENV{HOME } . "/share/gitolite/hooks";
$SVNSERVE = $ENV{HOME} . "/bin/svnserve -r /opt/svn/svnroot/ -t --tunnel-user=%u";

同理对gitserver2等机器进行同样的设置,在gitserver1上运行gl-tool设置其他服务器到本服务器上的公钥认证。

[git@localhost bin]$ ./gl-tool add-mirroring-peer /tmp/gitserver2.pub

在gitserver2上运行gl-tool设置其他服务器到本服务器上的公钥认证。

[git@localhost bin]$ ./gl-tool add-mirroring-peer /tmp/gitserver1.pub

验证gitserver1和gitserver2的连接情况:

[git@localhost gitserver1]$ ssh git@gitserver2 info
Hello gitserver1, I am gitserver2

出现上述欢迎语,说明连接成功

转到客户端,创建文件夹gitserver_1,存放来自gitserver_1的gitolite配置文件

[git@localhost ~]$ mkdir gitserver_1
[git@localhost ~]$ cd gitserver_1
[git@localhost ~]$ git clone git@gitserver_1:gitolite-admin.git
[git@localhost gitserver_1]$ cd gitolite-admin

设置gitserver_1下的文件conf/gitolite.conf

repo testing
config gitolite.mirror.master = "gitserver1"
config gitolite.mirror.slaves = "gitserver2 gitserver3"

上传改动到gitserver1,对gitserver2、gitserver3…进行相同的设置,并上传到相应的服务器。

六、验证镜像是否成功

登录到gitserver1, gitserver1,gitserver1上,查看testing.git库下的config的内容如下,说明镜像配置成功

[core]repositoryformatversion = 0filemode = truebare = true
[gitweb]owner = admin
[gitolite "mirror"]master = gitserver1slaves = gitserver2 gitserver3

在客户机下,增加一个文件gitserver1/testing/readme.txt,并将修改推送到master,在gitserver2/testing下运行如下命令

[git@localhost testing]$ git pull

如果testing下出现了readme.txt更新文件,说明镜像功能成功运行。

七、新增加用户

将新用户的公钥复制到gitserver1、gitserver2、gitserver3的gitolite-amin/keydir目录下,并命名为webpack.pub

[git@localhost keydir]$ scp wp@192.168.163.22:/home/wp/.ssh/id_rsa.pub webpack.pub

将公钥提交公钥到各个服务器。

[git@localhost keydir]$ git add –A
[git@localhost keydir]$ git commit –m “add new user webpack”
[git@localhost keydir]$ git push origin master

更改用户授权:

[git@localhost keydir]$ vim /gitserver1/gitolite-admin/conf/gitolite.conf@admin = admin
@team = gitclient1 webpackrepo    gitolite-adminRW+     =   @adminR       =   @allrepo    users/CREATOR/[a-zA-Z].*C   =  @allRW+ =  CREATORRW  =  WRITERSR   =  READERS @admin# repo description for testing repo on gitweb
testing "admin" = "sandbox, everyone can push"repo    testing#config hooks.mailinglist  = testing-commit@list.foo.bar#config hooks.announcelist = testing-commit@list.foo.barRW                         = @adminRW                        = @teamconfig gitolite.mirror.master = "gitserver1"config gitolite.mirror.slaves = "gitserver2 gitserver3"

提交授权到各个服务器

[git@localhost keydir]$ git add –A
[git@localhost keydir]$ git commit –m “authorize webpack”
[git@localhost keydir]$ git push origin master

八、创建远程仓库

在gitadmin机器上修改每个gitserver的conf文件直接推送之后,自动创建远程仓库。

repo    pipelineC   =  @teamRW =  @teamR   =  @admin

这个表示可以创建固定路径的仓库如:/pipeline.git

[git@localhost conf]$ git add -A
[git@localhost conf]$ git commit –m “create pipeline repository”
[git@localhost conf]$ git push origin master

 

参考资料

[1] https://zhuanlan.zhihu.com/p/75921691

[2] https://blog.csdn.net/hnhuangyiyang/article/details/50993467#t2

[3] http://gitolite.com/gitolite/


http://chatgpt.dhexx.cn/article/3OSgNcp1.shtml

相关文章

Centos下安装gitolite+git

一直以来我都是用SVN的,但最近做迭代开发、多分支时,发现SVN使用起来极不方便。因此打算换成git做源码管理。git的理论以及特性本文就不做讲解了,本主主要讲解怎么安装,配置git、以及git权限管理服务gitolite. 组网结构 git服务器…

gitolite安装及配置教程centos7

1. 安装依赖包 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel -y 2.安装 Git yum -y install git 3.创建git用户 useradd git passwd git # 输入再次git用户的密码# 切换到git用户 su git4.获取Gitolite版本库并安装配置 4.1 获取…

Git服务器搭建及Gitolite权限管理

之前写过一个Git服务器的简单搭建,那个的权限管理是通过手动配置的。这次用Gitolite来管理,方便快捷。 环境:Ubuntu Server 16.04.3(命名GitServer),网络正确配置192.168.xx.xx(可以连接Intern…

gitolite

2019独角兽企业重金招聘Python工程师标准>>> gitolite是什么 gitolite是git的权限控制系统。有如下特性: a. 在git服务器上需要一个真实的unix用户 b. 能用不同的账号访问git服务器,这些账号不是真实的unix用户也没有shell权限 c. 能控制多个git仓库的读…

搭建网站显示成功后却打不开主页原因

今年自学了一下建站,在腾讯云购买了域名和服务器,用护卫神主机大师搭了个网站。网站十分简单,运行得十分顺利。 过了两天,网站突然打不开了,页面显示没有备案。上网一查,备案需要准备资料,拍照…

【很容易忽视的问题】为何使用护卫神iis-windows服务器,在使用护卫神主机修改网站信息后则无法访问的根本原因??

本来是正常的网站,只要使用护卫神的主机大师修改一下,网站就提示错误:无法建立到 xxx.com 服务器的连接 不论基于哪个Lamp搭建环境【护卫神、phpstudy、宝塔Lamp】一旦你使用第三方软件为何网站,则必须确保以第三方的为准统一修改…

360主机卫士Linux版,360主机卫士

什么是虚拟补丁? 是一种可以使网站站长摆脱补丁管理困境的解决方案。 虚拟补丁简单的说就是"软补丁",针对CMS的漏洞,不用站长自己修改CMS代码,在应用防火墙上,生成的特定防护规则。 它的好处: 1.不用修改代…

护卫神IIS下没有办法直接访问thinkphp中public入口的问题解决方案

首次使用护卫神的主机系统来搭建运行自己的系统,发现没有办法直接指向框架的public,研究了一下总结出两种方案.如以下: 一. 1,先随意的创建一个主站不做使用. 2,在主站下面新建一个子站作为自己实际的项目配置.在主站目录的基础上追加public文件夹. 以上是第一种解决方法,很常…

护卫神·Nginx大师面板上如何设置伪静态

许多客户在使用护卫神Nginx大师创建网站后,因SEO要求,可能需要使用伪静态功能,在这里护卫神就大体说一下如何设置伪静态。本例以安装wordpress博客程序后设置伪静态;一、先打开桌面上的“护卫神Nginx大师”,右键点击要…

linux系统终端用户名和密码忘记了,主机大师(Linux)登录账户密码忘记的解决办法...

护卫神主机大师linux最新版本方法: 我们建议在初次安装完后复制相关的登录信息并妥善保存好。如没有复制下来,忘记了相关的登录信息或者是账户密码,可通过以下办法解决。 一、登录ssh终端后复制以下命令执行就可以创建一个新的用户&#xff1…

护卫神设置public目录(IIS下TP5如何设置运行目录)

护卫神设置public目录 最近有人问小编,护卫神主机系统或者IIS配置PHP的时候,public设置为对外公开目录这个问题百度无法搜索到真实解决办法,那么我们应该如何将运行目录设置为/public呢? 当我们使用护卫神主机系统配置Thinkphp的…

护卫神mysql远程_护卫神 主机管理系统使用说明(MySQL管理)

感谢大家使用【护卫神主机管理系统】v3.1,该版本支持在windows server 2003/2008/2012,含32位和64位,直接开设配置web站、ftp站,以及sql server和mysql,是您开设和管理虚拟主机的绝好帮手。 但是对于新用户可能在使用上…

护卫神apache大师3.0.0 php,护卫神Apache大师(PHP环境套件)V3.2.0 官方免费版

护卫神Apache大师是一套为方便广大用户管理服务器而开发的软件,集成了多版本PHP环境、Apache、Tomcat、JSP、MySQL、PhpMyadmin、主机管理系统、FilaZilla FTP,支持开设和管理多个主机、MySQL数据库。 【软件性质】自主开发,完全免费。 【运行…

系统切换服务器方法,护卫神•主机管理系统更换服务器方法(移机)

本文主要介绍如何整体迁移主机管理系统和网站到新服务器。 一、备份数据 将老服务器上的主机管理系统数据库备份。 位置:在主机管理系统安装目录下的host/admin/database/my.asp 二、安装主机管理系统 在新服务器安装护卫神•主机管理系统,推荐安装最新版…

护卫神主机大师或者是主机管理系统中创建网站时提示开设失败的解决办法

一种情况:阿里云默认的系统一般会开启密码复杂度的功能,这样在使用护卫神主机大师或者是主机管理系统开设网站时,填写的密码如不符合系统的复杂度要求。那么将出出现以下的提示:解决办法如下:1、打开系统组策略 2、找到…

护卫神 主机大师 MySQL无法远程连接的解决方案

护卫神 主机大师 MySQL无法远程连接的解决方案 背景:服务器小厂独立ip,其他环境直接用护卫神一键安装,因为远程桌面不总是很方便,远程连接MySQL报错 解决办法: 1、各种搜索引擎一阵猛搓,无法解决&#xf…

服务器维护护卫神,护卫神主机重启服务器

护卫神主机重启服务器 内容精选 换一换 通过Web浏览器登录资源,会话连接断开,提示网络连接异常,连接已断开,请重试(Code:T_1006)。云堡垒机系统与资源服务器之间网络连接不稳定,导致连接断开。云堡垒机或资…

护卫神主机大师php,护卫神主机大师下载

护卫神主机大师支持一键安装网站运行环境(IISASPASP.netPHPMySQLFTP伪静态PhpMyAdmin),并可在线开设主机、SQLServer和MySQL;Web方式管理,拥有独立前台和后台面板。护卫神主机大师支持WindowsServer2008/2012,推荐在全新操作系统下安装。 软件…

护卫神mysql提权_护卫神主机大师提权漏洞利用分析

*本文原创作者:Freedom,本文属FreeBuf原创奖励计划,未经许可禁止转载 0x01 前言 护卫神主机大师支持一键安装网站运行环境(IISASPASP.netPHP5.2-5.6MySQLFTP伪静态PhpMyAdmin),并可在线开设主机、SQL Server和MySQL;We…

护卫神mysql提权_护卫神主机大师被提权漏洞利用(可千万不能乱装护卫神主机大师安装的软件)...

原标题:护卫神主机大师被提权漏洞利用(可千万不能乱装护卫神主机大师安装的软件) “护卫神主机大师支持一键安装网站运行环境(IISASPASP.netPHP5.2-5.6MySQLFTP伪静态PhpMyAdmin),并可在线开设主机、SQL Server和MySQL;Web方式管理&#xff0…