PHP实现git部署的方法教程


Posted in PHP onDecember 19, 2017

背景

在小站点上,直接用git来部署php代码相当方便,你的远程站点以及本地版本库都有一个版本控制,追踪问题或者回滚是很轻松的事情。

因为在小公司上班,原先的系统还在使用传统的ftp上传部署,部署太麻烦,也不好管控线上的代码。在网上找了下git部署的教程,一路跟着下来碰到了不少坑,现在把整个过程发出来,希望可以帮助到大家,下面话不多说了,来一起看看详细的介绍吧。

账号相关

useradd -m git //新增git账号
ssh-keygen //密钥生成,如果已经有了可略过
su git //切换至git账号
cd ~ //切换到git账号根目录
mkdir .ssh //创建.ssh目录
cat /密钥存放目录/xxx.pub >> ~/.ssh/authorized_keys //设置公钥

此处一定要注意权限问题,否则密钥登入无法生效,各文件夹对应的权限如下

.ssh文件夹权限 700
id_rsa 600
id_rsa.pub 644
authorized_keys 600

文件权限设置

将git与站点运行nginx或者apache的用户放同一用户组,如www

vim /etc/passwd   找到git账号与www账号,将git账号的组标识变更为与www组标识一致

站点所属者设置为git,用户组设置为 www     //假设nginx与git 都归属于www用户组

目录权限设置775 ,文件权限设置为664

仓库代码

服务器端

cd 站点目录
git init //初始化目录

git配置

git config receive.denyCurrentBranch ignore //设置仓库接受代码提交

设置sudo免密

vim /etc/sudoers
# Defaults secure_path 中若没有你要的命令,要注意添加
# php的命令默认需要在 secure_path最后面添加 :/usr/local/php/bin"
在 root ALL=(ALL) ALL 下面一行添加
git ALL=(ALL) NOPASSWD:ALL 
# 保存退出 ,这样针对laravel 要重启队列命令就可以使用了.
# sudo php artisan queue:restart

钩子设置

cd .git/hooks //切换至站点钩子目录
touch post-receive //创建接收提交时钩子
// 钩子文件内容如下:
#!/bin/sh
# 设置账号创建文件的默认权限
umask 002 
unset GIT_DIR
cd ..
git checkout -f
# 执行PHP钩子逻辑
/usr/bin/curl http(s)://域名/钩子文字位置/hook.php
# 如果有使用laravel队列则需要重启队列进程,让新代码生效
# sudo php artisan queue:restart
exit 0

hook.php内容

<?php
/**
 * git上传执行钩子
 */
//TODO 安全限制
//TODO 其他钩子行为
// 清除opcache
if (version_compare(PHP_VERSION, '5.5.0', '>=')) {
 opcache_reset();
}

增加钩子可执行权限

chmod a+x .git/hooks/post-receive

本地代码

git remote add 远程仓库名称 ssh://git@IP地址:/站点目录 //添加远程仓库
git push 远程仓库名称 master

特别注意

用户上传的图片目录一定要做好文件忽视动作,否则有可能在清除未追踪文件时将此部分文件删除,造成灾难性结果

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
多文件上传的例子
Oct 09 PHP
PHP 手机归属地查询 api
Feb 08 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
php+memcache实现的网站在线人数统计代码
Jul 04 PHP
PHP Try-catch 语句使用技巧
Feb 28 PHP
PHP函数引用返回的实例详解
Sep 11 PHP
Zend Framework实现自定义过滤器的方法
Dec 09 PHP
PHP去除字符串最后一个字符的三种方法实例
Mar 01 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
PHP下载大文件失败并限制下载速度的实例代码
May 10 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 PHP
PHP7 foreach() 函数修改
Mar 09 PHP
PHP递归实现快速排序的方法示例
Dec 18 #PHP
Laravel框架中自定义模板指令总结
Dec 17 #PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 #PHP
PHP7下协程的实现方法详解
Dec 17 #PHP
浅谈PHP实现大流量下抢购方案
Dec 15 #PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 #PHP
PHP中OpenSSL加密问题整理
Dec 14 #PHP
You might like
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
js有序数组的连接问题
2013/10/01 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
python中bisect模块用法实例
2014/09/25 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
2018/08/03 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
详解Python 切片语法
2019/06/10 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
公司出纳岗位职责
2013/12/07 职场文书
股份合作协议书范本
2014/04/14 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
敬老院标语
2014/06/27 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
天那边观后感
2015/06/09 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书