宝塔api不支持全量更新网站源码,需通过api触发shell脚本执行git pull等操作,因upload_file接口仅限单文件上传、无目录递归逻辑且不自动重载nginx。

不能直接用宝塔 API 全量更新网站源码——它不提供“覆盖上传整个目录”或“执行 git pull”的接口。你得自己写脚本,再用 API 触发执行。
为什么 /api/website/upload_file 不适合全量更新
这个接口设计用于单文件上传(比如改一个配置、传一张图),不是为部署整站代码准备的:
- 每次调用只能传一个
file字段,没地方塞整个dist/目录 - 没有递归创建子目录逻辑,
/static/js/app.js会因/static/js/不存在而失败 - 上传 100+ 文件就得发 100+ 次请求,超时、限流、签名过期全来一遍
- 返回成功不代表文件可访问——没触发 Nginx reload,旧缓存可能还在生效
真正可行的路径:用 API 触发 shell 脚本执行 git pull
宝塔支持「计划任务 → Shell 脚本」,且可通过 API 的 /task/add_task 接口动态添加并立即执行。这是目前最稳、最贴近 CI/CD 场景的方式:
部署一个包含 4 个智能体(agent)的数字孪生平台。在以下情况下使用该技能: 1. 用户希望为物理资产监控与预测性维护等场景搭建数字孪生系统……
- 脚本内容示例(保存为
/www/server/panel/script/deploy_project.sh):#!/bin/bash cd /www/wwwroot/myproject git pull origin main 2>&1 | logger -t "bt-deploy" chown -R www:www /www/wwwroot/myproject bt reload nginx
- 调用 API 添加并运行任务:
curl -X POST "https://your-panel:8888/task/add_task" -H "Content-Type: application/json" -d '{"name":"deploy-myproject","type":"shell","week":"","hour":"0","minute":"0","sType":"toShell","sBody":"/www/server/panel/script/deploy_project.sh","save":0}' - 注意:
sBody是脚本绝对路径,不是脚本内容;save:0表示执行完就删任务,避免堆积 - 必须确保
www用户对仓库有读权限,且git在其 PATH 中(可在脚本开头加export PATH="/usr/bin:/bin:$PATH")
CI/CD 流水线里怎么安全触发?绕开面板登录态
GitLab CI 或 GitHub Actions 无法带 Cookie 登录面板,必须走 API 鉴权。但别用 request_token + request_time + sign 这套——太重,时间戳偏差 >5 分钟就 401。更简单的是:
- 在面板「计划任务」里提前建好一条「定时任务」,类型为 Shell,执行周期设为「不循环」,勾选「仅执行一次」
- 记录下该任务的
id(从/task/get_task_list返回中取) - 流水线里只调一次
/task/start_task:curl -X POST "https://your-panel:8888/task/start_task" -d "id=123" - 这样不用算 sign,不依赖时间同步,也不暴露 API 密钥到 CI 日志里(密钥只在面板后台配置)
- 缺点:任务得提前配好,不能动态传参数(如分支名)。如需多环境,就提前建好
deploy-staging、deploy-prod两个任务
容易被忽略的关键点:权限、用户、路径三者必须对齐
90% 的 “脚本执行了但网站没变” 问题,都卡在这三处:
- Git 仓库属主必须是
www,否则git pull报错Permission denied (publickey)—— 别用 root 初始化裸库,要用sudo -u www git clone ... - 脚本里所有路径必须用绝对路径:
cd /www/wwwroot/myproject,不能写cd myproject - 宝塔的「网站根目录」和实际代码目录要一致。如果面板里站点设置的根目录是
/www/wwwroot/myproject,那脚本里的git pull就必须在这个目录下执行,不能拉到/tmp/build再 rsync - 执行完
git pull后,务必chown -R www:www /www/wwwroot/myproject,否则 Vue 的index.html可能因权限不足被 Nginx 拒绝读取
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










