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去掉URL网址中带有PHPSESSID的配置方法
Jul 08 PHP
php实现的常见排序算法汇总
Sep 08 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
Jan 30 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
Jan 07 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
Mar 01 PHP
yii通过小物件生成view的方法
Oct 08 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
thinkphp实现附件上传功能
May 26 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
基于Laravel-admin 后台的自定义页面用法详解
Sep 30 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/06/09 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
Javascript继承机制的设计思想分享
2011/08/28 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
selenium+python自动化测试之多窗口切换
2019/01/23 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
酒店办公室文员岗位职责
2013/12/18 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
上海世博会口号
2014/06/19 职场文书
暑期家教宣传单
2015/07/14 职场文书
强烈推荐:小学生:暑假作息时间表(值得收藏)
2019/07/09 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript