搭建Git服务器并使用HOOK自动部署

GitHub 的服务器同步的时候太慢了也有可能会完全访问不了,为了避免影响平常工做开发,决定在公司服务器上搭建一个 Git 服务端,并记录下来全过程。
本文服务端环境为 CentOS7(3.10.0-957.21.3.el7.x86_64)git

安装 Git 服务端

如下命令在服务器里运行github

查看 Git 版本

yum info git
 # git version 1.8.3.1
复制代码

能够看到,到目前为止(2020年01月20日),yumGit 版本才 1.8.3.1,而最新的已经 2.9.2 了。shell

更新 Git

# 依赖库安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker
 # 卸载低版本的 Git
yum remove git
 # 下载新版的 Git 源码包(/usr/local/git)
cd /usr/local/git
wget https://github.com/git/git/archive/v2.9.2.tar.gz
tar -xzvf v2.9.2.tar.gz
复制代码

执行如下命令进行编译和安装vim

# 若是有下载最新版,请按照最新版文件夹名
cd git-2.9.2

make prefix=/usr/local/git all
make prefix=/usr/local/git install
复制代码

添加到环境变量安全

vim /etc/profile
复制代码

添加上这一条 export PATH="/usr/local/git/bin:$PATH"bash

# 使环境变量当即生效
source /etc/profile
 # 查看版本号
git --version
复制代码

Git 设为默认路径,避免克隆的时候报错服务器

ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack 
ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack 
复制代码

建立 Git 用户

useradd git
password *******
复制代码

禁止 Git 用户使用 Shell 登陆系统(为了服务器安全)ssh

vi /etc/passwd
复制代码

在最后一行将 git 用户修改为一下配置并保存curl

git:x:1000:1000::/home/git:/usr/bin/git-shell
复制代码

配置远程仓库

建立一个空仓库

cd /home
mkdir git
cd git
git init --bare blog.git
复制代码

执行完毕后会建立一个空仓库,仓库的路径为:/home/git/blog.gitpost

为 Git 用户赋予仓库的文件权限

chown -R git:git /home/git/blog.git
复制代码

打开 RSA 认证

编辑 /etc/ssh/sshd_config 文件

vi /etc/ssh/sshd_config
复制代码

找到如下三项,并关闭注释。若是没找到相应项,直接补全就好。
注:vim 模式下向下搜索 /搜索的内容,向上搜索 ?搜索的内容

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
复制代码

保存完毕后重启 sshd 服务

/etc/rc.d/init.d/sshd restart
 # 若是上面的命令出现错误能够尝试使用下面的
service sshd restart
复制代码

打完收工!Git 的服务端配置完毕。

客户端

如下命令在客户端里运行

建立 Git 的使用者

git config --global user.name "NanSHanJi"
git config --global user.email "coder.htt@gmail.com"
复制代码

建立和服务器通讯的秘钥

ssh-keygen -t rsa -C "coder.htt@gmail.com"
复制代码

一路回车下去就行了,完成后会输出秘钥的路径,进入秘钥的文件夹

秘钥文件目录

id_rsa 是秘钥,打死也不要告诉别人, id_rsa.pub是公钥,能够公开。

将公钥添加到服务器中

方法一

  1. 直接打开文件 id_rsa.pub 复制里面的内容。
  2. 而后粘贴到服务器 ~/.ssh/authorized_keys 文件里。

方法二

ssh git@172.168.162.40 'cat >> .ssh/authorized_keys' < 你的文件路径/id_rsa.pub
复制代码

克隆远程仓库到本地

如下命令在客户端里运行

# 找一个文件夹,执行如下命令
# x.x.x.x 是服务器 ip 地址
git clone git@x.x.x.x:/home/git/blog.git
复制代码

push/pull 项目

# 在本地的 blog 文件夹中随便弄点文件进去
git add .
git commit -m 初始化项目
git push origin master
复制代码

如下命令在服务端里运行
进入服务器查看远程仓库 commit 记录,若是看到有记录就算成功了

cd /home/git/blog.git
git log
复制代码

注:若是没有成功,能够检查下是否防火墙没有开放 22 端口,或者 SSH 不在 22 端口上,若是不在 22 端口上,克隆的时候须要改下地址

git clone ssh://git@x.x.x.x:端口/home/git/LearnProject.git

Git HOOK 自动部署代码

在服务器 /home/git/blog.git 文件夹里是不能直接看到我门提交的代码
因此须要咱们把项目 clone 到一个地方

cd /data/wwwwroot
git clone /home/git/blog.git
复制代码

后面的自动部署都会基于这个文件夹

设置 HOOK

仓库每次被 push 的时候会触发这个 post-receive 这个文件里的脚本内容

cd /home/git/blog.git/hooks

cp post-update.sample post-receive
vim post-receive
复制代码

post-receive 里面输入代码自动部署的操做流程

unset GIT_DIR
cd /var/www/blog
git pull --allow-unrelated-histories
复制代码

第一行代码相当重要 Git 的 hooks 里面默认有一些环境变量,会致使不管在哪一个语句以后执行git命令都会有一个默认的环境路径,因此须要 unset 掉默认的 GIT 环境变量。

到此,整个搭建流程都完成了

做者:@NanShanJi

相关文章
相关标签/搜索