乐于分享
好东西不私藏

AI写完代码还要手动部署?这个开源Skill打通个人AI开发部署最后一公里

AI写完代码还要手动部署?这个开源Skill打通个人AI开发部署最后一公里

需求说清楚,Codex之类的Agent已经能自己读项目、改代码、补测试,也能顺手把配置文件也整理好。

可真正做过网站的人都知道:代码改完,从不等于把事情做完。

文件要传到服务器,目录权限要检查,域名、证书、数据库、伪静态缺一不可。上线之后还得确认Nginx有没有报错、磁盘是不是快满了、备份任务有没有按时跑。

于是一个很割裂的场景出现了:AI在本地项目里干得飞快,到了服务器部署这一步,往往还是要切浏览器窗口打开终端、登录宝塔、手动上传文件、翻日志等等。部署和运维却常常停留在“人肉接力”,无法打通AI一站式开发部署的最后一公里

针对上述割裂场景,我整了个懒人笨方法将SSH pem私钥喂给Codex,由它建立SSH通道直连云服务器,自动化执行代码上传、全流程部署,相当于自建丐版CI/CD方案。 该方案初期运行稳定无异常,但一次部署脚本校验疏漏,导致Codex误删除站点Nginx配置文件,直接酿成一起Codex运维操作翻车事故。。。

我只好想办法另辟蹊径:寻找一个更安全、有效的办法 。其实现在市面上云服务器都自带云Agent,比如腾讯云Hermes Agent,但是要收费,不适合我这种穷鬼玩家,另外也没实在解决Codex完成开发部署割裂的痛点,于是方案被我pass掉了。不过还得感谢Hermes Agent,让我有了灵感,既然Hermes Agent本身是个智能体,所以它本身肯定也具备了Skill这些拓展能力,于是我开始搜寻它的能力代替方案。果不其然,其实宝塔面板团队官方早在github开源了aaPanel/btpanel-skills它做的事情很直接把宝塔面板已有的API能力,整理成AI Agent可以理解、调用并遵守约束的Skill。

它不是要重新发明一个运维面板,而是在Codex与宝塔之间搭一座桥

01

PART

AI 会写代码了,为什么部署和运维还得手动?

THE LAST MILE

宝塔面板已经把建站、数据库、SSL、计划任务和软件服务集中到了一个后台,对个人站长和小团队来说,确实大幅降低了服务器管理门槛。

这些事情并不难,却非常碎。服务器只有一台时还能靠记忆,多到三五台以后,登录、切换、对比和汇总就会变成稳定的时间消耗。(翻各种应用台账、检索散落各处配置文件、日志文件等等都是一件非常痛苦的事情。。。

更麻烦的是AI编程之后的“最后一公里”。

假设你对Codex说:“修复上传接口,并调整Nginx的请求体限制。”它可以修改本地代码,也可以给出一段正确的Nginx配置。但如果没有服务器工具和授权,它并不知道生产环境的配置文件在哪里,更不能擅自连接服务器、备份旧文件、写入新配置并检查服务是否正常。

开发者只能接过接力棒

  • 在本地确认代码修改
  • 打开终端或宝塔面板
  • 找到远程目录并上传文件;
  • 调整权限和配置
  • 重载服务
  • 再回到日志页面确认有没有新错误。

这条链路里,Codex知道“改了什么”,宝塔知道“线上是什么状态”,但两边互不相通。

btpanel-skills 正是从这个断点切入。它让Agent不只会给建议,还能在用户授权和确认之后,调用宝塔API获取真实数据、执行明确操作,并把结果带回对话。

02

PART

Skill是什么,它与普通脚本有什么不同?

SKILL, NOT JUST SCRIPT

第一次看到Skill,很多人的直觉是:“不就是把几个Python脚本打包吗?”(即前面自述的翻车方案QAQ)

只说对了一半

普通脚本解决的是“怎么调用接口”。Skill还要告诉AI:什么时候调用、先做什么、哪些操作必须确认、哪些敏感信息不能碰,以及结果应该怎样解释给用户。

以仓库里的btpanel 为例,它不只提供资源监控、网站检查和日志读取脚本,还在 SKILL.md中写明了AI的行为约束:

  • 展示数据时保持中立,不夸大告警;
  • 建议必须基于实际监控结果,不能臆测
  • 不主动泄露IP、Token和域名等敏感信息;
  • 获取数据前先说明准备执行哪些检查;
  • 涉及修改与高风险操作时,先告知影响并取得确认。

这就是Skill与“扔给AI一堆脚本”的区别。脚本负责确定性执行,Skill负责把执行能力放进一套Agent可理解的工作流程

整个项目可以看成三层

  • 自然语言层用户直接说“检查所有服务器有没有异常”“看看证书快过期了吗”。
  • Skill决策层:Agent根据说明选择监控、网站、日志或文件脚本,并补齐服务器名称、筛选条件等参数。
  • 宝塔API层:Python客户端读取配置,调用真实面板接口,再把结果结构化返回。

因此,它既不是让大模型直接“猜”服务器状态,也不是把整台服务器的Shell权限毫无保留地交给AI。它走的是一条更安全、更容易控制的路径:围绕宝塔已经开放的能力,提供范围明确的操作工具。相比于Agent使用SSH直连服务器的“裸奔”方案,这个Skill方案给服务器多了一层宝塔API沙盒保护。

03

PART

三个 Skill,组成一套宝塔运维工具箱

THREE-SKILL MATRIX

仓库目前包含三个相互关联的Skill,分别覆盖“看状态”“管文件”和“管网站”。

CAPABILITY1.btpanel:负责看懂服务器现在怎么样

这是基础运维监控Skill,也是最适合第一次上手的部分。

它可以汇总CPU、内存、磁盘、网络和系统负载,检查网站是否运行、SSL 证书是否即将到期,还能查看Nginx、Apache、MySQL、Redis等服务状态。

当服务出现异常时,它可以继续读取 Nginx、Apache、Redis、MySQL、PostgreSQL 等日志;安全侧可以查看 SSH 服务状态、分析登录记录和失败尝试。

更实用的是多服务器支持。你可以给每台面板配置一个名称,例如 prod-01blog-02,再让Agent汇总所有服务器,而不是逐台登录。

CAPABILITY2.btpanel-files:把远程文件操作交给受控工具

Codex修改完代码之后,最容易卡住的就是远程文件

btpanel-files 提供目录浏览、文件读取、编辑、创建、删除、状态查看和权限修改,还支持让服务器从指定 URL 下载文件、解压 ZIP。

这些能力意味着Agent可以帮助完成部署链路中的一部分实际操作,例如:

  • 查看 /www/wwwroot下的站点目录
  • 读取 Nginx 配置或错误日志的最后几十行;
  • 修改文件前先拉取原内容进行比较;
  • 创建发布目录或空文件
  • 下载程序包并解压
  • 检查或修正文件权限与所有者。

但它没有把风险藏起来。Skill 明确要求:编辑前先读原文件,重要配置修改前建议备份,删除前确认目标路径,不主动读取 /etc/shadow.envconfig.php等可能包含敏感信息的文件。

仓库实现中的删除操作会优先进入回收站,而不是直接永久抹除。即便如此,线上文件操作依然应该谨慎确认。

CAPABILITY3.btpanel-phpsite:覆盖PHP网站的完整管理链路

第三个 Skill 更像一套面向PHP网站的“建站操作台”。

它可以创建、删除、启用和停用网站,查看站点详情,切换PHP版本或改为纯静态站点;也可以添加、删除绑定域名,申请或上传 SSL 证书,开启强制HTTPS。

对于常见建站需求,它还提供伪静态规则管理和数据库管理,仓库列出的模板包括WordPress、ThinkPHP、Laravel、Discuz、Typecho、DedeCMS等常见程序。

如果你对Agent说:“创建一个PHP8.2 的站点,绑定域名并创建数据库”,Skill可以把这句话拆成站点、PHP和数据库操作。但删除站点、切换运行环境、处理证书私钥等动作,仍然必须经过影响确认

三个Skill放在一起,形成了清晰的分工:

btpanel负责观察,btpanel-files负责文件,btpanel-phpsite负责网站生命周期。

04

PART

五个最实用的真实场景

REAL-WORLD SCENARIOS

功能列表看起来很多,真正落到日常工作里,我个人用的最多的下面五个场景

USE CASE 01场景一:解决Codex改代码后的服务器部署操作

这是本文最想强调的场景。

Codex在本地完成修改后,Agent可以继续查看远程目录、读取线上配置、下载或解压发布包、调整文件内容与权限,并在操作后检查服务和日志。

这不等于仓库已经提供一条完整的自动发布流水线,却补上了很多过去必须人工点击的服务器步骤。对个人项目和轻量自建站点而言,这座“桥”非常实用。

USE CASE 02场景二:一句话完成多服务器巡检

你可以说:“检查所有服务器的CPU、内存、磁盘、网站和核心服务,按风险排序。”

Agent会组合资源、网站和服务检查,再根据设定阈值标出异常。相比逐台登录面板,它更适合每天例行巡检,也方便把结果整理成固定格式的报告。

USE CASE 03场景三:提前找出快过期的 SSL 证书

证书问题最让人头疼的地方,不是不会续期,而是经常到过期才发现。

sites.py 支持筛选 30 天内即将到期或已经过期的证书。我的方案是给Codex建个定时任务执行这类检查,可以把“用户反馈网站打不开”变成“提前看到待处理清单”。

USE CASE 04场景四:服务异常时联动状态与日志

额额,举个最常见的例子:“网站502了”,只看Nginx是否运行远远不够

更合理的顺序是先curl各种指令检查网站和服务状态,再读取对应错误日志,最后结合CPU、内存和磁盘判断问题来自应用、服务还是资源。Skill把这些原本分散的入口组织成一次连续对话。

USE CASE 05场景五:确认备份任务不是“看起来存在”

配置了备份任务,不代表备份真的可用

通过计划任务和执行日志,可以检查备份任务是否启用、最近是否执行、有没有报错。对于数据库和站点文件,这种检查往往比“看到计划任务列表里有一行”更可靠。

05

PART

从安装到第一次巡检

QUICK START

仓库使用Python实现,公开说明要求宝塔面板版本不低于9.0.0Python不低于3.10

Skill依赖的工具版本安装、升级,可以一句话让Codex代为安装,例如:

先安装基础依赖

bash

pip install requests pyyaml rich

如果使用OpenClaw,README推荐通过ClawHub安装基础监控Skill:

bash

clawhub install btpanel

在本地开发或离线环境中,也可以从仓库的 skills/目录手动复制相应技能。若要同时使用文件管理和PHP站点能力,应一并部署对应的 btpanel_filesbtpanel_phpsite目录以及公共模块

接下来,到宝塔面板的“面板设置→API接口”中开启接口并获取Token,IP白名单应填运行Codex/Skill这台机器访问公网时使用的IP,如果配置失败,Codex也会帮你揪出正确IP,这个问题后面我也会提一嘴

然后添加服务器配置:

bash

python3 ~/.codex/skills/btpanel/scripts/bt-config.py add \

  -n 服务器别名\

  -H https://你的面板地址:端口 \

  -t 你的API_TOKEN

运行结果:

如果面板使用Let’s Encrypt或商业CA签发的受信任证书,保留默认SSL 校验。如果使用宝塔默认的自签名证书,可以在确认风险后增加:

bash

--verify-ssl false

配置信息默认写入~/.openclaw/bt-skills.yaml它包含面板地址和PI Token,绝不能提交到Git仓库,也不应该复制进聊天截图或公开文档。

配置完成后,可以先做一次资源巡检

bash

python3 ~/.codex/skills/btpanel/scripts/monitor.py --format table

检查即将过期的SSL 证书

bash

python3 ~/.codex/skills/btpanel/scripts/sites.py --filter ssl-warning

排查指定服务器的Nginx错误:

bash

python3 ~/.codex/skills/btpanel/scripts/logs.py --server 自定义服务器名称 --service nginx --lines 200

到了Agent环境里,用户通常不必记住这些命令,只需要表达目标,例如:“巡检prod-01,重点看磁盘、证书和Nginx错误。”Skill会据此选择脚本和参数。

尝试第一次巡检:“巡检prod-01,重点看磁盘、证书和Nginx错误。

如果IP白名单添加失败,Codex会查询真实的公网访问IP,然后回到宝塔面板的“面板设置→API接口“。

第一次巡检成功结果:

06

PART

安全边界:AI能执行,但不能替你承担责任

SAFETY BOUNDARIES

只要工具具备服务器写入能力,安全就不能作为文末一句轻描淡写的提醒。

第一,保护Token。 宝塔API Token代表面板操作权限。配置文件应限制访问范围,不进入代码仓库;面板API也应设置合理的访问白名单,不要把接口无差别暴露到公网。

第二,不要随意关闭SSL校验。--verify-ssl false是为自签名证书准备的兼容选项,不是遇到连接问题时的万能开关。能使用受信任证书时,应优先保持校验开启。

第三,读后再改,改前备份。 无论是Nginx配置、站点文件还是伪静态规则,先读取真实内容、明确差异、保留可恢复版本,再执行写入。

第四,危险操作必须确认。删除网站、删除数据库、停用线上站点、递归修改权限,都可能造成服务中断或数据损失。Agent应说明目标、范围和影响,再等待用户明确授权。

第五,敏感文件默认不碰。.env数据库配置、SSL私钥、系统口令文件不应因为“排查方便”就被主动读取并回显到对话。

最理想的协作方式不是让AI获得无限权限,而是:

给它完成任务所需的最小能力,让每个高风险动作都可见、可确认、可追踪。

07

PART

适合谁,又不适合谁?

WHO IT IS FOR

如果你已经在使用宝塔面板,并且符合以下任一情况,这套Skill值得研究

  • 管理一台或多台个人网站、企业展示站、博客或轻量业务服务器;
  • 经常在Codex、终端和宝塔面板之间切换;
  • 希望用自然语言完成巡检、日志读取和证书检查;
  • 主要维护PHP、WordPress、ThinkPHP、Laravel 等站点;
  • 想把固定运维步骤沉淀为Agent可重复执行的流程。

但它也有清晰的边界

它不是Prometheus、Zabbix这类持续采集与告警平台,不负责长时间指标存储和复杂可视化;它不是完整的DevOps 或 CI/CD系统,没有代码变更监听、流水线编排、灰度发布和自动回滚。

因此,最准确的定位是它是一套面向宝塔面板的 Agent 运维工具箱。

对于个人站点和小团队,它可以减少重复切换,让Codex从“只负责改代码”向“协助完成部署相关操作和日常运维”再往前走一步;对于需要严格审批、审计、分权和发布治理的大型生产环境,它更适合作为辅助工具,而不是绕过现有运维体系。

///

END

安全老话题:AI可以接管操作,但不能接管责任

CLOSING THOUGHTS

btpanel-skills 最有意思的地方,不是又增加了多少条命令,而是拉通了AI编程开发和部署的最后一公里

得益于这个Skill,Agent有机会以更安全的方式继续读取线上状态、执行范围明确的宝塔操作。

虽然这让开发和运维之间的切换路径更短,却不会让风险凭空消失

真正值得采用的AI运维,不是“把最高权限交出去,然后期待它永远不犯错”,而是把能力拆小、把边界写清、把确认留给人。

最后唠叨一句,AI可以接管操作,但不能接管责任。

项目采用MIT许可证。本文依据2026年7月25日仓库公开内容整理,具体能力请以项目后续版本为准。

关注账号,避免错过更新。