git部署
Posted huay
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git部署相关的知识,希望对你有一定的参考价值。
1. 自动部署原理
先讲实现方法和原理。Git服务和仓库都是在服务器上的,服务器上的Web目录和本地都有完整的代码。Git有个叫hook的机制,可以在代码更新时执行回调(执行一段shell)。一般执行流程是开发完成后,通过git push将代码传到服务器git仓库上,这时git hook自动到Web目录git pull,将Web目录下的代码更新。这样就完成了自动部署。
2. 配置用户
本例Centos版本为7.0,,以apache作服务器。若没有安装git或apache,先安装:
1
2
|
# yum install httpd # yum install git |
修改git用户权限(执行命令权限、用户目录、组、改密码):
1
2
|
# usermod git -s /bin/bash -d /home/git -g apache # passwd git |
如果安装完git后没有git用户,把以上一句 usermod 改成 useradd 就行了。以上命令设置了git用户的家目录和组,把git归属到apache组是因为需要git管理网站目录的文件,同组方便操作。这里要注意的是网上很多教程使用/bin/git-shell作为命令权限,但个人认为不推荐,因为后续还要使用git用户做一些操作,需要基本的shell命令。
3. 创建仓库和网站代码
使用git用户身份,新建git仓库:
1
2
|
# su git $ git init --bare ~/repo/website.git |
以上表示在git用户的家目录repo文件夹中,建立website.git仓库。
到网站目录(/var/www/html),克隆一份website代码:
1
2
|
$ cd / var /www/html $ git clone ~repo/website.git |
这样网站目录就有一份仓库的完整代码。
接下来写hook文件:
1
2
|
$ cd ~/repo/website.git/hooks $ vim post-receive |
在post-receive钩子文件里写以下内容[1]:
1
2
3
4
|
#!/bin/sh unset GIT_DIR cd / var /www/html/website git pull |
编辑后保存退出。以上命令表示cd到网站目录,并git pull更新。随后还要把post-receive改成可执行:
1
|
$ chmod 775 post-receive |
可以看到,以上大部分命令都是以git身份执行的,是因为涉及很多文件操作,如果用其他用户执行则要改权限,以及chown把文件归属给git用户。
最后最后,完成所有操作,才把git的命令权限改回去(用root身份):
1
|
# usermod -s /bin/git-shell |
git用户专门管理git的所有事务,而不能用于登录系统。至于公钥密钥的配置,请自行参考其他资料。
如果要防止.git被访问,httpd.conf加入以下限制:
<Files ~ ".git" > Require all denied </Files> |
附上git仓库的地址,用于远程开发克隆,把serverHost换成服务器地址:
1
|
[email protected]:~/repo/website.git |
以上是关于git部署的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程