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速度全攻略
Oct 09 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
php 数组排序 array_multisort与uasort的区别
Mar 24 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
Jul 01 PHP
5种PHP创建数组的实例代码分享
Jan 17 PHP
PHP empty函数报错解决办法
Mar 06 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
PHP获取数组长度或某个值出现次数的方法
Feb 11 PHP
Yii快速入门经典教程
Dec 28 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 PHP
Laravel 登录后清空COOKIE的操作方法
Oct 14 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
Smarty模板变量与调节器实例详解
2019/07/20 PHP
JavaScript之自定义类型
2012/05/04 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
常用的9个JavaScript图表库详解
2017/12/19 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
Python中的闭包实例详解
2014/08/29 Python
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Python快速从注释生成文档的方法
2016/12/26 Python
详解python调度框架APScheduler使用
2017/03/28 Python
Python中元组,列表,字典的区别
2017/05/21 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
Python数学形态学实例分析
2019/09/06 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
大学生思想汇报范文
2013/12/31 职场文书
个人实习生的自我评价
2014/02/16 职场文书
触电现场处置方案
2014/05/14 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
JavaScript实现栈结构详细过程
2021/12/06 Javascript