PHP实现git部署的方法教程

 更新时间:2017年12月19日 08:31:59   作者:hiber0385  
虽然一直用git做版本管理,以前也用过git项目的部署,但都没有坚持这种习惯,最近决定再学习下,下面这篇文章主要给大家介绍了关于PHP实现git部署的方法教程,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。

背景

在小站点上,直接用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设计模式之迭代器模式浅析

    迭代器(Iterator)模式,它在一个很常见的过程上提供了一个抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代。迭代有几种不同的具体执行方法:在数组属性,集合对象,数组,甚至一个查询结果集之上迭代
    2023-04-04
  • php empty()与isset()区别的详细介绍

    php empty()与isset()区别的详细介绍

    本篇文章是对php中empty()与isset()的区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php中socket的用法详解

    php中socket的用法详解

    这篇文章主要介绍了php中socket的用法,详细讲述了PHP进行socket通信的完整步骤,非常具有参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • php清除和销毁session的方法分析

    php清除和销毁session的方法分析

    这篇文章主要介绍了php清除和销毁session的方法,实例分析了unset()与session_destroy()清除及销毁session的技巧,需要的朋友可以参考下
    2015-03-03
  • PHP数组对象与Json转换操作实例分析

    PHP数组对象与Json转换操作实例分析

    这篇文章主要介绍了PHP数组对象与Json转换操作,结合实例形式分析了php数组对象与json相互转换的实现方法及相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • php 获取一个月第一天与最后一天的代码

    php 获取一个月第一天与最后一天的代码

    php获取一个月第一天与最后一天直接上代码,其实是个很简单的东东
    2010-05-05
  • 详解Laravel框架的依赖注入功能

    详解Laravel框架的依赖注入功能

    依赖注入不是让对象创建一个依赖关系,也不是让工厂对象去创建对象,而是将所需的依赖变成一个外部对象,使之成为一个"某些人的问题”,你为"某些人的问题”注入了类的依赖关系。在Laravel中,这个"某人”是服务容器,服务容器负责通过构造函数注入类的依赖关系。
    2021-05-05
  • 使用phpQuery采集网页的方法

    使用phpQuery采集网页的方法

    使用phpQuery轻松采集网页内容,像使用jQuery一样处理页面内容
    2013-11-11
  • php设计模式之单例模式代码

    php设计模式之单例模式代码

    这篇文章主要为大家详细介绍了php设计模式之单例模式的实现代码,具有一定的参考价值,感兴趣的朋友可以参考一下
    2016-06-06
  • PHP如何限制定时任务的进程数量

    PHP如何限制定时任务的进程数量

    这篇文章主要给大家介绍了关于PHP如何限制定时任务进程数量的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论