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
|
git@serverHost:~/repo/website.git |
git部署的更多相关文章
- 使用git部署服务器
每回上传服务器是把我的web项目打包成war上传到服务器根目录下,总是觉得很麻烦,并且每次就算只添加或修改了一个文件,都要把整个服务器war包上传.于是我学着用git部署我的web项目 下面是详情: ...
- 本地git部署web连接azure的git存储库
本地git部署web 创建本地存储仓库 输入以下命令创建git本地仓库(会在当前目录下生产一个.git的目录) git init 然后提交内容 在git仓库所在的目录下存放好需要的网页文件 将文 ...
- 通过本地Git部署网站到WebSite
玩过Azure WebSite(WebApp)的同学应该知道部署网站的方式非常多,今天我要讲的是如果通过本地Git部署网站到WebSite. 1.新建WebSite 创建WebSite非常简单,我这里 ...
- Git 部署 Web 网站
/*************************************************************************** * Git 部署 Web 网站 * 说明: * ...
- Git部署项目
前言 学习Git的目标是要学会如何部署项目.Git是一种版本控制系统,与之对应的还有CVS和SVN,其中CVS和SVN都是集中式的版本控制,而Git是一种分布式的,在现代项目开发中,大多使用Git来管 ...
- PHP实现git部署的方法,可以学学!
https://mp.weixin.qq.com/s/QFpKu8oKoxOEA1BmT7pNhg 在小站点上,直接用git来部署php代码相当方便,你的远程站点以及本地版本库都有一个版本控制,追 ...
- PHP实现git部署的方法教程
https://mp.weixin.qq.com/s/WH_JXah47BhQyviuuPAunw 背景 在小站点上,直接用git来部署php代码相当方便,你的远程站点以及本地版本库都有一个版本控制, ...
- 【应用服务 App Service】App Service使用Git部署时,遇见500错误
问题描述 Azure App Service在部署的时候支持多种方式,如Zip,VS 2019, VS Code,或者是Git部署,当使用Git部署遇见500错误时,可以通过其他的部署方式来验证是否也 ...
- 【Azure 应用服务】App Service 开启了私有终结点(Private Endpoint)模式后,如何来实现公网Git部署呢?
问题描述 因为中国区的App Service对外(公网访问)需要进行ICP备案,所以很多情况下,Web应用部署到App Service后,都是通过Application Gateway(应用程序网关) ...
- 测试人员如何使用Git部署测试环境
Git是分布式的版本控制系统. 作为一名Git的小白使用者,一开始接触很懵逼,因为总担心自己一不小心误操作影响代码仓库的代码,网络上关于Git的使用多从开发的角度,很少有人从测试的角度来介绍Git的使 ...
随机推荐
- init: wait for '/dev/block/bootdevice/by-name/cache' timed out and took 5007ms【学习笔记】
平台信息:内核:4.9.112系统:android one平台:qcom sdm439 作者:庄泽彬(欢迎转载,请注明作者) 一.android设备在开机的时候打印了如下的log,由于系统使用了AB分 ...
- hdu1358 Period kmp求循环节
链接 http://acm.hdu.edu.cn/showproblem.php?pid=1358 思路 当初shenben学长暑假讲过,当初太笨了,noip前几天才理解过来.. 我也没啥好说的 代码 ...
- (转)Redis & EhCache
(二期)6.redis与ehcache综合讲解 [课程六]ehcache简介.xmind0.1MB [课程六]redis的高可用.xmind0.1MB [课程六]redis的...结构.xmind0. ...
- js实现刷新iframe的方法汇总
https://www.jb51.net/article/65013.htm javascript实现刷新iframe的方法的总结,现在假设存在下面这样一个iframe,则刷新该iframe的N种方法 ...
- Unity3D学习笔记(二十九):AssetBundle
AssetBundle 什么是AssetBundle? AssetBundle是把一些资源文件或场景文件,以某种方式保存在一个文件中.一个AssetBundle可以包含模型.材质.图片或场景等.但是A ...
- Docker2之Service
Make sure you have published the friendlyhello image you created by pushing it to a registry. We’ll ...
- Ubuntu 14.04 上安装 Gurobi
参考: Installing Gurobi 7 on Linux Ubuntu 14.04 上安装 Gurobi 1.在gurobi上创建一个账户,并登陆: 2.从gurobi optimizer上下 ...
- PHP 时间函数time、date和microtime的区别
一.time.date 和 microtime函数 time----返回当前的 Unix 时间戳 date----格式化一个本地时间/日期 microtime----返回当前的 Unix 时间戳和微秒 ...
- Spring boot2.0 设置文件上传大小限制
今天把Spring boot版本升级到了2.0后,发现原来的文件上传大小限制设置不起作用了,原来的application.properties设置如下: spring.http.multipart.m ...
- Python安装第三方库的安装技巧
电脑:Windows10 64位. Python IDE 软件:JetBrains PyCharm Community Edition 2018.1.3 x64 Python version : Py ...