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 图像处理类1
Jun 15 PHP
兼容性比较好的PHP生成缩略图的代码
Jan 12 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
Mar 07 PHP
php实现过滤UBB代码的类
Mar 12 PHP
php备份数据库类分享
Apr 14 PHP
php脚本运行时的超时机制详解
Feb 17 PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
PHP session会话操作技巧小结
Sep 27 PHP
详解php与ethereum客户端交互
Apr 28 PHP
深入理解PHP+Mysql分布式事务与解决方案
Dec 03 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
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
解析strtr函数的效率问题
2013/06/26 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
javascript 特殊字符串
2009/02/25 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
jquery异步调用页面后台方法&amp;#8207;(asp.net)
2011/03/01 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
pandas通过索引进行排序的示例
2018/11/16 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
自动化专业个人求职信范文
2013/12/30 职场文书
机关出纳岗位职责
2014/04/03 职场文书
文案策划专业自荐信
2014/07/07 职场文书
初三数学教学反思
2016/02/17 职场文书
创业计划书之甜品店
2019/09/18 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
python中出现invalid syntax报错的几种原因分析
2022/02/12 Python
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL