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的使 ...
随机推荐
- openwrt中在软件包中定义PKG_INSTALL将会发生什么?
答: 将会使用默认软件包安装方式,相关代码如下 . 在include/package.mk中: Build/Install=$(if $(PKG_INSTALL),$(call Build/Insta ...
- linux内核中的fuse是什么?
答: 一个用户态文件系统框架,属于内核的一种特性. 1.组成部分 fuse.ko(内核模块) + libfuse.*(用户空间库) + fusemount(挂载工具) 2.参考资料 fuse.txt
- linux内核中的两个标记GFP_KERNEL和GFP_ATOMIC是用来干什么的?
1. 作用 用来标记分配内核空间内存时的方式 2. 两个标记使用在什么场合? 如果内存不够时,会等待内核释放内存,直到可以分配相应大小的内存,也就意味着会发生阻塞,因此不能使用在中断处理函数中,而GF ...
- Mysql的timestamp字段默认值设置问题
参考: https://www.cnblogs.com/mxwz/p/7520309.html https://www.jb51.net/article/50878.htm https://blog. ...
- 不能安装64位office提示已安装32位的
安装64位office办公软件的时候提示已经安装32位的office办公软件所以无法继续安装,但实际上之前安装的32位的office办公软件已经卸载了.问题现象截图如下: 从问题描述中,我们其实已经能 ...
- c# 之系统环境安装
在重装系统后,对一些原有软件进行了卸载,不知道是什么原因总是提示vs2015 需安装IE10,但是又碰到ie10的一些插件不适合此系统.网上介绍的vs修复没有任何作用 最后找到方法是:重装系统,然后不 ...
- SAP FI CO模块常用事务代码
...
- php的Allowed memory size of 134217728 bytes exhausted问题
提示Allowed memory size of 134217728 bytes exhausted,出现这种错误的情况常见的有三种: 0:查询的数据量大. 1:数据量不大,但是php.ini配置的内 ...
- Spring-test单元测试
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test& ...
- JAVA中char和String/值类型和引用类型的区别
import java.util.*; class test { public static void main(String[] args) { char a[] = {'b', 'a', 'c'} ...