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+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
Dec 16 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
Jun 06 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 PHP
ThinkPHP开发框架函数详解:C方法
Aug 14 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
Dec 25 PHP
深入讲解PHP的Yii框架中的属性(Property)
Mar 18 PHP
php遍历解析xml字符串的方法
May 05 PHP
Yii CGridView用法实例详解
Jul 12 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
PHP基于DOMDocument解析和生成xml的方法分析
Jul 17 PHP
PHP实现一个限制实例化次数的类示例
Sep 16 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 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令牌 Token改进版
2008/07/18 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
php+mysql实现无限级分类
2015/11/11 PHP
PHP _construct()函数讲解
2019/02/03 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
JSON与String互转的实现方法(Javascript)
2016/09/27 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
python爬虫 requests-html的使用
2020/11/30 Python
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
金融行业务员的自我评价
2013/12/13 职场文书
校园报刊亭的创业计划书
2014/01/02 职场文书
yy司仪主持词
2014/03/22 职场文书
单位活动策划方案
2014/08/17 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
投标邀请书范本
2015/02/02 职场文书
个人自荐书范文
2015/03/09 职场文书
2016春季幼儿园小班开学寄语
2015/12/03 职场文书