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 相关文章推荐
PHP中str_replace函数使用小结
Oct 11 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
Oct 09 PHP
那些年一起学习的PHP(一)
Mar 21 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
Mar 17 PHP
php实现图片上传时添加文字和图片水印技巧
Apr 18 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
Jul 06 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
几行代码轻松实现PHP文件打包下载zip
Mar 01 PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 PHP
设定php简写功能的方法
Nov 28 PHP
PHP实现递归的三种方法
Jul 04 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 include,include_once,require,require_once
2008/09/05 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
ExtJS 入门
2010/10/29 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
python入门教程之识别验证码
2017/03/04 Python
python安装twisted的问题解析
2018/08/21 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
HTML的form表单和django的form表单
2019/07/25 Python
python实现网站微信登录的示例代码
2019/09/18 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
python如何更新包
2020/06/11 Python
实习自我鉴定范文
2013/10/30 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书