composer私有仓库搭建之系列二:web页面实现仓库列表更新
诉求:在仓库列表显示的页面上,添加一个更新的按钮,实现仓库更新
分析:仓库生成或者更新的列表的命令是
全量生成或者更新: php bin/satis build satis.json public/ 指定生成或者更新 php bin/satis build satis.json public/ test/test1 test/test2
可以通过php的shell_exec函数实现此功能
主要代码如下:
全量生成或者更新:
<?php $output = shell_exec('php /data/wwwroot/satis/bin/satis build /data/wwwroot/satis/satis.json /data/wwwroot/satis/public/'); echo "<pre><p style='backgroud-color:#ccc;'>$output</p></pre>";
exit();
指定生成或者更新
<?php //获取包名,注意此处的安全性处理,我这里就略过了 if (! empty($_REQUEST)) { $packName = $_REQUEST['packName']; //指定包生成或者更新 $output = shell_exec('php /data/wwwroot/satis/bin/satis build /data/wwwroot/satis/satis.json /data/wwwroot/satis/public/ ' . $packName); echo "<pre><p style='backgroud-color:#ccc;'>$output</p></pre>"; exit(); }
注意几点问题
1.权限问题
因为网页版更新,是通过nginx+php-fpm来处理,所以注意php-fpm服务的启动用户,我的是www用户
a.首先确保你有www用户,没有的话需要提前创建www用户,这里就不赘述了;
b.其次要确保www用户有php的可执行权限,可以通过shell_exec('php -i');测试是否有可执行权限
c.是否有目录的可执行权限,涉及到的目录有
/data/wwwroot/satis/bin/satis /data/wwwroot/satis/satis.json /data/wwwroot/satis/public/
2.用户密码问题
首次执行之前,需要在服务器上通过php的cli模式手动触发一次,这个主要目的就是存储账号和密码,因为命令在执行时候会拉取代码,这个时候会提示输入gitlab的账号和密码,记得选择yes就行了,账号或者密码一般会存储在用户的家目录下.composer目录里面
这样在网页点击更新按钮的时候就可以正常更新了。
如果过程中遇到问题,主要可能是shell_exec,执行报错,可以通过输出错误结果进行排查
<?php
//命令行后面跟上2>&1,中间有空格,就可以输出整个命令执行的结果
$output = shell_exec('php /data/satis/composer/bin/satis build /data/wwwroot/satis/satis.json /data/wwwroot/satis/public/ 2>&1');
print_r($output);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~