搜索
首页后端开发PHP问题git自动化部署php脚本怎么实现

git自动化部署php脚本的实现方法:1、安装git;2、克隆仓库代码;3、更改linux权限,修改配置;4、将www用户加入sudoers;5、生成密钥;6、填写webhook域名,上传php脚本即可。

git自动化部署php脚本怎么实现

本文操作环境:linux5.9.8系统、Git 2.30.0版、DELL G3电脑

git自动化部署php脚本怎么实现?

git+php部署webhook自动化脚本 实现代码同步

本文将介绍git+php部署webhook自动化脚本 实现代码同步
git配合webhook自动化部署不算是个高深的技术,但是第一次自己部署中走了很多弯路,主要自己在linux方面算是个菜鸡,本文记录一下容易出错的问题点,遇到的坑
准备
lnmp环境下部署可访问的web域名,服务端php脚本,仓库码云gitee

自动化流程,本地push->gitee仓库webhook->linux服务器php脚本pull
首先在gitee码云上创建仓库
本地使用ssh协议与仓库进行通讯,我的本地是windows,这里就不介绍怎么生成ssh公钥,下面linux下将会介绍

1.安装git

yum install git

2.克隆仓库代码《注意一定要使用ssh协议,后面都是基于ssh》

git initgit clone git@gitee.com:zhuyanbin/HiAdmin.git

3.更改linux权限,修改配置
因为我们webhook去通知服务端属于外部访问,所以这里的管理员用户默认是www用户,所以要给定www足够的权限才行

vim /etc/passwd
添加下面的一行
www:x:1001:1001::/home/www:/bin/bash

1001是用户组的id,使用以下命令可查看用户www的id

cat /etc/group

将www用户加入sudoers并可以无密码执行shell

#(1)为当前用户添加写入sudoers的权限

chmod u+w /etc/sudoers

#(2)编辑sudoers

vim /etc/sudoers

#(3)搜索Allow root to run any commands anywhere,在root用户对应行下写入如下内容:

www     ALL=(ALL)       NOPASSWD:/usr/bin/git

#(4)收回对sudoers的写入权限

chmod u-w /etc/sudoers

在这里插入图片描述
修改php-fpm.conf配置设置访问者,我这里是www,也就是php已经默认的配置

在这里插入图片描述
4.最后生成密钥(此步必须是www用户生成密钥,ps:在这个地方卡了两天,一直使用root管理员账号生成,百度了好几天,尝试各种方法,后来切换到www用户生成密钥之后一切ok)

生成公钥密钥

mkdir -p /home/www/.ssh
chown -R www.www /home/www/.ssh
ssh-keygen -t rsa

查看公钥密钥

cat /home/www/.ssh/id_rsa.pub

将生成好的公钥复制到gitee码云仓库公钥填写处
https://gitee.com/profile/sshkeys
在这里插入图片描述
补充:gitee填写公钥的地方有两个,一个是仓库的公钥,如果填写到仓库的公钥,服务端git权限将只有pull的权限,另一个是账号的公钥,如果填写到个人账号的公钥,将会有pull,push等权限,我这里直接使用的个人账号公钥
5.最后填写webhook域名,上php脚本
填写webhook通知地址域名(密码设置的空,后面php中没有密码验证,如果考虑安全,请在后面设置密码)
在这里插入图片描述
上php脚本处理程序hook.php(执行linux命令)

    chdir("/home/wwwroot/default/HiAdmin");
    exec("git pull origin master 2>&1", $out);
    foreach($out as $v)
    {
        echo iconv( 'GB2312','UTF-8', $v)."<br>";
    }

到此,配置完以上服务端代码可自动同步,完成自动化部署

出现问题

1.php脚本不执行
原因php.ini中php很多函数是默认没打开包括执行linux脚本函数exec(),shell_exec()等等
找到php.ini,找到disable_functions那一行删除相应的函数即可,或者整行注释掉
在这里插入图片描述
2.无法执行git pull命令

问题一

Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

归根结底还是因为linux权限的问题,我遇到的是出现一下问题
在这里插入图片描述
到这里的原因是因为root生成git公钥密钥,而切换到www后生成公钥密钥后就成功了(上述第四小步生成公钥,一定使用www生成公钥密钥)

问题二

error: insufficient permission for adding an object to repository database .git/objects
fatal: failed to write object
fatal: unpack-objects failed

这个还是没有权限执行git命令,只需要执行以下

第一步:cd .git/objects  定位到git下的objects文件下
第二步: ls -al 查看git库的所有者(git用户 git组)
第三步: chown -R yourname:yourgrounp * 或者sudo chmod 777 -R .git/objects 提交

最后解决完以上问题,大功告成,上一张成功的截图
在这里插入图片描述
自己的后端语言是php,这里可以用多种方式去实现执行linux脚本,nodejs,python等等

推荐学习:《PHP视频教程

以上是git自动化部署php脚本怎么实现的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
github是什么github是什么Mar 24, 2023 pm 05:46 PM

​GitHub是一个面向开源及私有软件项目的托管平台,可以让开发者们在这里托管自己的代码,并进行版本控制。GitHub主打的是开源项目与协作,通过这个平台上的开源项目,开发者们可以查看其他开发者的项目源代码,并进行交流和学习。

git中push -u是什么意思git中push -u是什么意思Jul 01, 2022 am 10:36 AM

在git中,“push -u”的意思是将本地的分支版本上传到远程合并,并且记录push到远程分支的默认值;当添加“-u”参数时,表示下次继续push的这个远端分支的时候推送命令就可以简写成“git push”。

如何在GitLab上进行第一次登录并更改密码如何在GitLab上进行第一次登录并更改密码Mar 24, 2023 pm 05:46 PM

GitLab是一种基于Web的Git版本控制库管理软件,旨在帮助开发团队更好地协同工作,提高工作效率。当您第一次登录GitLab时,系统会提示您要更改初始密码以确保账户安全。本文将为大家介绍如何在GitLab上进行第一次登录并更改密码。

git的pack文件有什么用git的pack文件有什么用Jun 30, 2022 pm 05:41 PM

在git中,pack文件可以有效的使用磁盘缓存,并且为常用命令读取最近引用的对象提供访问模式;git会将多个指定的对象打包成一个成为包文件(packfile)的二进制文件,用于节省空间和提高效率。

git中pull失败了怎么办git中pull失败了怎么办Jun 30, 2022 pm 04:47 PM

git中pull失败的解决方法:1、利用“git reset --hard”强制覆盖掉自己的本地修改;2、利用“git stash”推送一个新的储藏,拉取之后利用“git stash pop”将修改保存到暂存区;3、若依然出现问题,则将文件保存到暂存区并提交注释即可。

git分支能改名字吗git分支能改名字吗Jun 16, 2022 pm 05:55 PM

git分支能改名字。改名方法:1、利用git中的branch命令修改本地分支的名称,语法为“git branch -m 旧名字 新名字”;2、利用“git push origin 新名字”命令,在删除远程分支之后将改名后的本地分支推送到远程;3、利用IDEA直接操作修改分支名称即可。

用三行代码使你的git提交记录变干净用三行代码使你的git提交记录变干净Feb 28, 2023 pm 04:19 PM

本篇文章给大家带来了关于git的相关知识,其中主要跟大家聊一聊怎么让你的git记录保持整洁,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

git怎么删除某个分支git怎么删除某个分支Jun 24, 2022 am 11:11 AM

git删除某个分支的方法:1、利用“git branch --delete dev”命令删除本地分支;2、利用“git push origin --delete branch”命令删除远程分支;3、利用“git branch --delete --remotes”命令删除追踪分支。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中