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下使用strpos需要注意 === 运算符
Jul 17 PHP
PHP删除数组中特定元素的两种方法
Jul 02 PHP
php网站地图生成类示例
Jan 13 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 PHP
php查询ip所在地的方法
Dec 05 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
详解php与ethereum客户端交互
Apr 28 PHP
Laravel框架实现定时发布任务的方法
Aug 16 PHP
laravel 事件/监听器实例代码
Apr 12 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 PHP
PHP的new static和new self的区别与使用
Nov 27 PHP
PHP单元测试配置与使用方法详解
Dec 27 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验证复选框有效性的示例
2013/11/13 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
Javascript的&amp;&amp;和||的另类用法
2014/07/23 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
Vue程序调试的方法
2019/06/17 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
python 实现多维数组转向量
2019/11/30 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
财务负责人任命书
2014/06/06 职场文书
绘画专业自荐信
2014/07/04 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
大学生村官个人总结
2015/02/15 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python