在linux下搭建git服务器,并实现web目录同步更新

2017-08-02 Jgw、无尘 1923次

git作为php开发者常用的一款分布式版本控制系统,在工作中我们可能会遇到要自己搭建git服务器的情况,在此简单介绍下在linux系统下如何搭建git服务器,希望对大家有所帮助。

1、安装git

Linux服务器端:#yum install -y git

安装完后,查看 Git 版本

[root@localhost ~]# git --version

git version 1.8.3.1


Windows客户端:

下载地址:https://git-for-windows.github.io/

安装完之后,鼠标右键可以使用 Git Bash 作为命令行客户端。

未命名截图

安装完之后,查看 Git 版本

$ git --version

git version 2.10.2.windows.1


2、服务器端创建git用户并设置密码

[root@localhost home]# id git

id: git:无此用户

[root@localhost home]# useradd git

[root@localhost home]# passwd git


3、在服务器端创建裸仓库

设置 /git/gittest.git 为 Git 仓库

然后把 Git 仓库的 owner 修改为 git

[root@localhost ~]# mkdir /git

[root@localhost ~]# git init --bare /git/gittest.git

Initialized empty Git repository in /git/gittest.git

[root@localhost ~]# cd /git

[root@localhost git]# chown -R git:git gittest.git


4、在客户端clone远程仓库

在你需要存放项目文件的目录下鼠标右键,打开Git Bash,输入clone命令

$ git clone git@192.168.1.100:/git/gittest.git

由于还没有配置公钥,首次克隆会提示输入git用户密码。


5、配置公钥

在Windows用户主目录下,先看看有没有.ssh目录,如果有再看看有没有id_rsa和id_rsa.pub两个文件。如果没有,那就打开Git Bash,输入命令进行创建:

$ ssh-keygen -t rsa -C "56402240@qq.com"

此时 C:\Users\用户名\.ssh 下会多出两个文件 id_rsa 和 id_rsa.pub

未命名截图


接下来要打开linux服务器的rsa认证,进入 /etc/ssh 目录,编辑 sshd_config,打开以下三个配置的注释:

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys


保存并重启 sshd 服务:

[root@localhost ssh]# /etc/rc.d/init.d/sshd restart  (注意:部分系统版本可能会报文件不存在的错误,因为不同系统其重启sshd的命令不同,如centos7的命令应为:systemctl restart sshd.service


由AuthorizedKeysFile得知公钥的存放路径是 .ssh/authorized_keys,实际上是$Home/.ssh/authorized_keys,由于管理Git服务的用户是git,所以实际存放公钥的路径是/home/git/.ssh/authorized_keys,在/home/git/下创建目录.ssh,然后把.ssh文件夹的owner修改为git.

回到客户端的 Git Bash 下,导入文件:$ ssh git@192.168.1.100 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

此时需要输入服务器端 git 用户的密码(注意这里的ip地址为你们自己服务器的ip地址

回到服务器端,查看 .ssh 下是否已经存在 authorized_keys 文件。(其实也可以自己新建authorized_keys文件,然后将id_ras.pub文件里的公钥复制进去就可以,一般多客户端操作就是直接在后面追加各个客户端的公钥在后面)

authorized_keys文件其实就是这样子的,每一行放一个客户端的公钥

未命名截图


重要:为了服务器的安全,我们需要设置一下文件的权限

修改 .ssh 目录的权限为 700

修改 .ssh/authorized_keys 文件的权限为 600


[root@localhost git]# chmod 700 .ssh

[root@localhost git]# cd .ssh

[root@localhost .ssh]# chmod 600 authorized_keys 

 完成以上操作后,以后我们再clone就不需要输入密码了。


6、实现自动同步到站点目录

至于网站的运行环境怎么搭建这里就不赘述了,我们假如你在home/wwwroot下有个网站目录kaky,我们现在要做的就是当git仓库gittest.git发生更新时自动同步到我们的网站目录kaky上。

为了完成这个功能我们需要用到git的钩子功能(hooks),关于hooks更深入的知识大家就自行去搜索学习吧。

服务器端:进入我们的裸仓库:/git/testgit.git 


cd /git/testgit.git

cd hooks

//这里我们创建post-receive文件

vim post-receive

//在该文件里输入以下内容,wq保存后退出

#!/bin/bash

git --work-tree=/home/wwwroot/kaky checkout -f

//将该文件用户及用户组都设置成git

chown git:git post-receive

//由于该文件其实就是一个shell文件,我们还应该为其设置可执行权限

chmod +x post-receive


现在我们就可以更新客户端的文件,然后push到服务器端试试,看看文件是否会同步到网站目录kaky上。

如果你在Git推送的工程中发现推送成功 但是在www目录下并没有自己的代码,这时候你可要注意了:这是由于文件夹的权限的原因造成的!

假设你的www目录的所属的用户组为root,你可以将你的git用户加入这个组;并给git添加写入权限,或者其他解决方法,反正你要服务器上的git用户有权限进入www文件夹。





声明:
1.本站的资源收集于互联网,仅供大家学习交流,请勿用于非法用途,否则后果自负!
2.如转载本站的原创文章,请勿必注明文章来源,对于不尊重原创的行为我们将追究责任