Skip to main content Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Un comando directo omite el prompt de revisión. Revisa el origen antes de ejecutarlo.
npx skills add https://github.com/tomevault-io/skills-registry --skill btpanel-phpsiteEl comando permanece en una sola línea. Desplázate horizontalmente para revisarlo antes de copiarlo.
¿Prefieres una copia local? Descarga los archivos que SkillsMP tiene disponibles ahora.
Ocupaciones relacionadasSOC
Basado en la clasificación ocupacional SOC
Explorador de archivos
2 archivos| name | btpanel-phpsite |
| description | 宝塔面板 PHP 网站管理技能,提供站点创建、删除、启停、PHP 版本切换、域名管理、SSL 证书管理、伪静态管理、数据库管理等功能 Use when this capability is needed. |
| metadata | {"author":"aaPanel"} |
宝塔面板 PHP 网站管理
宝塔面板 PHP 网站管理技能,提供完整的 PHP 网站生命周期管理功能,包括站点创建、删除、启停、PHP 版本切换、域名管理、SSL 证书管理、伪静态规则配置、数据库管理等。

图标资源
技能包提供以下图标文件,可在生成报告时引用:
| 文件 | 格式 | 用途 |
|---|
icon/bt-logo.svg | SVG | 矢量图标,适合缩放 |
AI 使用约束
本技能用于管理和修改服务器上的 PHP 网站,AI 应遵循以下原则:
- 操作前确认:删除、停用网站等操作前必须向用户确认
- 执行前告知:网站管理会影响线上服务,AI 应先向用户简述即将执行的操作步骤
- 数据安全:删除网站时提醒用户备份数据和数据库
- 隐私保护:不主动泄露敏感信息(如数据库密码、SSL 私钥等)
- 影响评估:修改 PHP 版本、SSL 证书等操作前,告知用户可能的影响
执行流程示例:
AI: 我将为您执行以下操作:
1. 创建新站点 example.com
2. 设置 PHP 版本为 8.2
3. 创建关联数据库
正在获取数据,请稍候...
[执行命令]
[展示结果和站点信息]
宝塔面板相关技能矩阵
当前宝塔面板技能包,共包含 3 个相互关联的技能:
| 技能名称 | 描述 | 依赖关系 |
|---|
| btpanel | 运维监控技能 | ✅ 基础技能,主要用于资源监控、网站状态检查、服务状态检查等 |
| btpanel-files | 文件管理技能 | ✅ 提供远程服务器文件辅助服务,可以读取文件列表和内容 |
| btpanel-phpsite | PHP 网站管理技能 | ✅ 提供远程服务器 PHP 网站管理功能,能够部署和管理php网站 |
⚠️ 常见问题
错误:未找到配置文件
解决:运行 python3 bt-config.py add 添加服务器配置
错误:无法下载或解压文件
解决:确保 btpanel-files 技能已安装,提供文件操作能力
**问题 3: PYTHONPATH 未设置**
```bash
# 运行脚本前需要设置
export PYTHONPATH=/path/to/btpanel-skills/src:$PYTHONPATH
检查命令
python3 -c "from bt_common.bt_client import BtClient; print('✅ 模块正常')"
ls -la ~/.openclaw/bt-skills.yaml
python3 {baseDir}/scripts/site.py list --server "你的服务器名"
python3 {baseDir}/../btpanel_files/scripts/download.py --help
完整安装验证
ls -la /path/to/btpanel-skills/src/
cat ~/.openclaw/bt-skills.yaml
python3 {baseDir}/scripts/site.py add -n "test.com:8080" --create-db --server "你的服务器名"
python3 {baseDir}/../btpanel_files/scripts/download.py --url "https://example.com/file.zip" --path "/tmp" --server "你的服务器名"
服务器配置管理
本技能复用 btpanel 技能的配置系统,使用 bt-config.py 工具管理服务器:
python3 {baseDir}/scripts/bt-config.py -h
python3 {baseDir}/scripts/bt-config.py add -n prod-01 -H https://panel.example.com:8888 -t YOUR_TOKEN
python3 {baseDir}/scripts/bt-config.py list
python3 {baseDir}/scripts/bt-config.py remove prod-01
- 登录宝塔面板
- 进入「面板设置」->「API 接口」
- 点击「获取 API Token」
重要提示 - SSL 证书验证配置:
添加服务器时,AI 应询问用户:
"您的宝塔面板是否使用了受信任的 SSL 证书(如 Let's Encrypt、商业 CA 证书)?"
- ✅ 是(受信任证书)→ 使用默认配置,无需额外参数
- ⚠️ 否(自签名证书)→ 添加
--verify-ssl false 参数
python3 {baseDir}/scripts/bt-config.py add -n prod-01 -H https://panel.example.com:8888 -t YOUR_TOKEN --verify-ssl false
python3 {baseDir}/scripts/bt-config.py add -n prod-01 -H https://panel.example.com:8888 -t YOUR_TOKEN
常用场景
场景一:创建新 PHP 网站
python3 {baseDir}/scripts/site.py add -n example.com -p /www/wwwroot/example.com -v 82
python3 {baseDir}/scripts/site.py add -n example.com -v 82 --create-db --db-user example_user --db-password "SecurePass123"
python3 {baseDir}/scripts/site.py add -n example.com -v 82 --create-ftp --ftp-user ftpuser --ftp-password "FtpPass123"
- "帮我创建一个新网站" → 执行
site.py add
- "新建一个 PHP 站点" → 执行
site.py add
- "创建网站并配数据库" → 执行
site.py add --create-db
场景二:查看网站列表和状态
python3 {baseDir}/scripts/site.py list
python3 {baseDir}/scripts/site.py info -n example.com
python3 {baseDir}/scripts/php.py versions
python3 {baseDir}/scripts/php.py get -n example.com
- "看看有哪些网站" → 执行
site.py list
- "查看网站状态" → 执行
site.py list 或 site.py info
- "支持哪些 PHP 版本" → 执行
php.py versions
场景三:切换 PHP 版本
python3 {baseDir}/scripts/php.py set -n example.com -v 82
python3 {baseDir}/scripts/php.py set -n example.com --static
- "把这个站点的 PHP 版本升级到 8.2" → 执行
php.py set -v 82
- "切换到 PHP 7.4" → 执行
php.py set -v 74
- "改为静态站点" → 执行
php.py set --static
场景四:停用/启用网站
python3 {baseDir}/scripts/site.py stop -n example.com
python3 {baseDir}/scripts/site.py start -n example.com
- "暂时关闭这个网站" → 执行
site.py stop
- "启用停用的站点" → 执行
site.py start
- "把这个站先停了" → 执行
site.py stop
场景五:删除网站
python3 {baseDir}/scripts/site.py delete -n example.com
python3 {baseDir}/scripts/site.py delete -n example.com --delete-path
python3 {baseDir}/scripts/site.py delete -n example.com --delete-db
python3 {baseDir}/scripts/site.py delete -n example.com --delete-path --delete-db --delete-ftp
- "删除这个网站" → 确认后执行
site.py delete
- "彻底删除网站和所有数据" → 确认后执行
site.py delete --delete-path --delete-db
重要:删除操作不可逆,必须先向用户确认并提醒备份。
场景六:管理域名绑定
python3 {baseDir}/scripts/domain.py list -n example.com
python3 {baseDir}/scripts/domain.py add -n example.com -d www.example.com
python3 {baseDir}/scripts/domain.py add -n example.com -d test.example.com,www2.example.com
python3 {baseDir}/scripts/domain.py delete -n example.com -d www.example.com
- "给这个站加个域名" → 执行
domain.py add
- "绑定新域名" → 执行
domain.py add
- "删除绑定的域名" → 执行
domain.py delete
场景七:管理 SSL 证书
python3 {baseDir}/scripts/ssl_cert.py info -n example.com
python3 {baseDir}/scripts/ssl_cert.py upload -n example.com --key /path/to/key.pem --cert /path/to/cert.pem
python3 {baseDir}/scripts/ssl_cert.py apply -n example.com -d example.com,www.example.com
python3 {baseDir}/scripts/ssl_cert.py https -n example.com --enable
python3 {baseDir}/scripts/ssl_cert.py https -n example.com --disable
python3 {baseDir}/scripts/ssl_cert.py close -n example.com
- "查看证书状态" → 执行
ssl_cert.py info
- "上传 SSL 证书" → 执行
ssl_cert.py upload
- "申请免费证书" → 执行
ssl_cert.py apply
- "开启强制 HTTPS" → 执行
ssl_cert.py https --enable
⚠️ 申请免费 SSL 证书重要提示
1. 域名验证方式(二选一)
- ✅ 域名必须能正常解析到服务器 IP
- ✅ 80 端口必须开放(未被防火墙阻止)
- ✅ 网站必须能正常通过 HTTP 访问
- ✅ 验证文件需要能被 Let's Encrypt 服务器访问
- ✅ 适合单个域名或不含通配符的多个域名
- ✅ 需要域名服务商支持 API 修改 DNS 记录
- ✅ 需要提供域名服务商的 API Key/Secret
- ✅ 适合通配符证书 (*.example.com)
- ✅ 不需要 80 端口开放
- ✅ 宝塔购买域名:如果在宝塔面板购买了域名服务,使用其内置 DNS 能力,相当于已配置域名服务商 API
- ⚠️ 配置方法:在宝塔面板 -> 网站 -> SSL -> DNS 验证 中配置 DNS 服务商 API 凭证
2. 域名要求
- ❌ 不支持 IP 地址申请证书(Let's Encrypt 仅支持域名)
- ❌ 不支持内网 IP(Let's Encrypt 无法访问验证)
- ✅ 域名必须已备案(中国大陆服务器)
- ✅ 一个证书最多包含 100 个域名
3. 证书限制
- ⚠️ Let's Encrypt 证书有效期 90 天
- ⚠️ 每 3 个月需要续期一次(宝塔支持自动续期)
- ⚠️ 每周申请次数限制(约 50 次/周/域名)
4. 常见错误场景
❌ 错误:申请 IP 地址 192.168.69.172 的证书
✅ 正确:必须使用域名,如 example.com
❌ 错误:域名解析到其他服务器
✅ 正确:域名必须解析到当前服务器 IP
❌ 错误:防火墙阻止 80 端口
✅ 正确:开放 80 端口用于 HTTP 验证
❌ 错误:申请 inner.local 等内网域名
✅ 正确:使用公网可访问的域名
❌ 错误:使用 DNS 验证但未配置 DNS 服务商 API
✅ 正确:先在面板中配置 DNS 服务商 API 凭证
5. 申请前检查清单
ping example.com
curl -I http://example.com
python3 {baseDir}/scripts/domain.py add -n example.com -d example.com
curl http://example.com
6. 推荐申请流程
python3 {baseDir}/scripts/domain.py add -n example.com -d example.com,www.example.com
python3 {baseDir}/scripts/ssl_cert.py apply -n example.com -d example.com,www.example.com
python3 {baseDir}/scripts/ssl_cert.py https -n example.com --enable
python3 {baseDir}/scripts/ssl_cert.py info -n example.com
"申请免费 SSL 证书需要满足以下条件:
- 使用域名(不能用 IP 地址)
- 域名已解析到当前服务器
- 80 端口开放(HTTP 验证方式)
- 如果是通配符证书或在宝塔购买了域名,可以使用 DNS 验证方式
- DNS 验证需要先在面板配置 DNS 服务商 API 凭证
请问您的域名是否已解析到当前服务器?"
📄 证书申请日志
日志路径: /www/server/panel/logs/letsencrypt.log
tail -50 /www/server/panel/logs/letsencrypt.log
python3 {baseDir}/scripts/ssl_cert.py apply -n example.com -d example.com
- 脚本会自动读取日志最后 50 行
- 过滤出错误相关的日志
- 显示最近 10 条错误信息
- 提供解决方案建议
Connection refused - 80 端口未开放或域名未解析
Invalid domain - 域名格式错误
DNS verification failed - DNS 验证失败(检查 API 配置)
Rate limit exceeded - 达到申请频率限制(等待一段时间)
场景八:管理伪静态规则
python3 {baseDir}/scripts/rewrite.py list -n example.com
python3 {baseDir}/scripts/rewrite.py get -n example.com
python3 {baseDir}/scripts/rewrite.py set -n example.com -t wordpress
python3 {baseDir}/scripts/rewrite.py set -n example.com -t thinkphp
python3 {baseDir}/scripts/rewrite.py set -n example.com --custom "location / { try_files $uri $uri/ /index.php?$query_string; }"
- "设置伪静态规则" → 执行
rewrite.py set
- "用 WordPress 的伪静态" → 执行
rewrite.py set -t wordpress
- "查看当前的伪静态" → 执行
rewrite.py get
场景九:管理数据库
python3 {baseDir}/scripts/database.py list
python3 {baseDir}/scripts/database.py info -d example_db
python3 {baseDir}/scripts/database.py add -n example_db -u example_user -P "SecurePass123"
python3 {baseDir}/scripts/database.py password -d example_db -P "NewPass123"
python3 {baseDir}/scripts/database.py access -d example_db -a %
python3 {baseDir}/scripts/database.py tables -d example_db
python3 {baseDir}/scripts/database.py optimize -d example_db
python3 {baseDir}/scripts/database.py repair -d example_db
python3 {baseDir}/scripts/database.py delete -d example_db
- "创建数据库" → 执行
database.py add
- "查看有哪些数据库" → 执行
database.py list
- "修改数据库密码" → 执行
database.py password
- "优化数据库" → 执行
database.py optimize
版本要求
- 宝塔面板: >= 9.0.0
- Python: >= 3.10
用法
站点管理
python3 {baseDir}/scripts/site.py list
python3 {baseDir}/scripts/site.py add -n example.com -p /www/wwwroot/example.com -v 82
python3 {baseDir}/scripts/site.py stop -n example.com
python3 {baseDir}/scripts/site.py start -n example.com
python3 {baseDir}/scripts/site.py delete -n example.com
PHP 版本管理
python3 {baseDir}/scripts/php.py versions
python3 {baseDir}/scripts/php.py get -n example.com
python3 {baseDir}/scripts/php.py set -n example.com -v 82
域名管理
python3 {baseDir}/scripts/domain.py list -n example.com
python3 {baseDir}/scripts/domain.py add -n example.com -d www.example.com
python3 {baseDir}/scripts/domain.py delete -n example.com -d www.example.com
SSL 证书管理
python3 {baseDir}/scripts/ssl_cert.py info -n example.com
python3 {baseDir}/scripts/ssl_cert.py upload -n example.com --key key.pem --cert cert.pem
python3 {baseDir}/scripts/ssl_cert.py apply -n example.com -d example.com
python3 {baseDir}/scripts/ssl_cert.py https -n example.com --enable
python3 {baseDir}/scripts/ssl_cert.py https -n example.com --disable
python3 {baseDir}/scripts/ssl_cert.py close -n example.com
伪静态管理
python3 {baseDir}/scripts/rewrite.py list -n example.com
python3 {baseDir}/scripts/rewrite.py get -n example.com
python3 {baseDir}/scripts/rewrite.py set -n example.com -t wordpress
数据库管理
python3 {baseDir}/scripts/database.py list
python3 {baseDir}/scripts/database.py add -n testdb -u testuser -P "Password123"
python3 {baseDir}/scripts/database.py password -d testdb -P "NewPass123"
python3 {baseDir}/scripts/database.py delete -d testdb
参数说明
site.py 参数
| 参数 | 说明 | 默认值 |
|---|
list | 查看站点列表 | - |
add | 创建站点 | - |
stop | 停用站点 | - |
start | 启用站点 | - |
delete | 删除站点 | - |
info | 查看站点详情 | - |
-n, --name | 站点名称 | 必填 |
-p, --path | 站点路径 | /www/wwwroot/域名 |
-v, --version | PHP 版本 | 82 |
--create-db | 创建数据库 | 否 |
--create-ftp | 创建 FTP | 否 |
--delete-path | 删除站点目录 | 否 |
--delete-db | 删除关联数据库 | 否 |
--delete-ftp | 删除关联 FTP | 否 |
php.py 参数
| 参数 | 说明 | 默认值 |
|---|
versions | 查看 PHP 版本列表 | - |
get | 查看站点 PHP 版本 | - |
set | 设置 PHP 版本 | - |
-n, --name | 站点名称 | 必填 |
-v, --version | PHP 版本号 | 必填 |
--static | 设为纯静态 | - |
domain.py 参数
| 参数 | 说明 | 默认值 |
|---|
list | 查看域名列表 | - |
add | 添加域名 | - |
delete | 删除域名 | - |
-n, --name | 站点名称 | 必填 |
-d, --domain | 域名(多个用逗号分隔) | 必填 |
ssl_cert.py 参数
| 参数 | 说明 | 默认值 |
|---|
info | 查看 SSL 信息 | - |
upload | 上传证书 | - |
apply | 申请证书 | - |
https | 设置强制 HTTPS | - |
close | 关闭 SSL | - |
-n, --name | 站点名称 | 必填 |
-d, --domain | 域名列表 | - |
--key | 私钥文件路径 | - |
--cert | 证书文件路径 | - |
rewrite.py 参数
| 参数 | 说明 | 默认值 |
|---|
list | 查看模板列表 | - |
get | 查看当前规则 | - |
set | 设置规则 | - |
-n, --name | 站点名称 | 必填 |
-t, --template | 模板名称 | - |
--custom | 自定义规则 | - |
database.py 参数
| 参数 | 说明 | 默认值 |
|---|
list | 查看数据库列表 | - |
add | 创建数据库 | - |
info | 查看数据库详情 | - |
password | 修改密码 | - |
access | 设置访问权限 | - |
tables | 查看表信息 | - |
optimize | 优化表 | - |
repair | 修复表 | - |
delete | 删除数据库 | - |
-n, --name | 数据库名称 | 必填 |
-u, --user | 数据库用户名 | 同数据库名 |
-P, --password | 密码 | 随机生成 |
-d, --database | 数据库名称 | 必填 |
-a, --access | 访问权限 | 127.0.0.1 |
支持的 PHP 版本
| 版本 | 说明 |
|---|
52 | PHP 5.2 (已淘汰) |
53 | PHP 5.3 (已淘汰) |
54 | PHP 5.4 (已淘汰) |
55 | PHP 5.5 (已淘汰) |
56 | PHP 5.6 |
70 | PHP 7.0 |
71 | PHP 7.1 |
72 | PHP 7.2 |
73 | PHP 7.3 |
74 | PHP 7.4 |
80 | PHP 8.0 |
81 | PHP 8.1 |
82 | PHP 8.2 |
83 | PHP 8.3 |
84 | PHP 8.4 |
00 | 纯静态 |
支持的伪静态模板
wordpress - WordPress
thinkphp - ThinkPHP
laravel5 - Laravel 5
dedecms - Dedecms
discuz - Discuz
ecshop - ECShop
typecho - Typecho
zblog - Z-Blog
drupal - Drupal
phpcms - PHPCMS
maccms - 苹果 CMS
crmeb - CRMEB
ShopWind - 商派
EmpireCMS - 帝国 CMS
EduSoho - EduSoho
场景十:完整部署 WordPress 网站(实战示例)
实战更新日期: 2026-04-02
测试环境: 内网 172 (192.168.69.172:8888)
WordPress 版本: 6.9.4 (最新中文版)
当用户需要从头部署一个完整的 WordPress 网站时,按以下步骤执行:
步骤 1:环境检查
python3 {baseDir}/scripts/php.py versions
python3 {baseDir}/scripts/site.py list
步骤 2:创建站点并配置数据库
python3 {baseDir}/scripts/site.py add -s "内网 172" \
-n "192.168.69.172:19101" \
-v 74 \
--create-db \
--db-user "wp_db_101"
✅ 站点创建成功:192.168.69.172:19101
路径:/www/wwwroot/192.168.69.172_19101
PHP 版本:74
站点 ID: 24
✅ 数据库创建成功
数据库名:wp_db_101
用户名:wp_db_101
密码:9q87Fbr8On41lzoT
步骤 3:下载 WordPress 源码
python3 ../btpanel_files/scripts/download.py -s "内网 172" \
download \
--url "https://cn.wordpress.org/latest-zh_CN.zip" \
--path "/www/wwwroot/192.168.69.172_19101" \
--wait \
--timeout 300
步骤 4:解压到临时目录
python3 ../btpanel_files/scripts/unzip.py -s "内网 172" \
unzip \
--source "/www/wwwroot/192.168.69.172_19101/latest-zh_CN.zip" \
--dest "/tmp/wp-extract"
步骤 5:复制文件到站点根目录
PYTHONPATH=/mnt/c/Work/lpanel2/btpanel-skills/src python3 -c "
from bt_common.bt_client import BtClient
from bt_common.config import get_servers
servers = get_servers()
for s in servers:
if s.name == '内网 172':
client = BtClient(name=s.name, host=s.host, token=s.token, timeout=s.timeout)
break
client.request('/files?action=CopyFile', {'sfile': '/tmp/wp-extract/wordpress', 'dfile': '/www/wwwroot/192.168.69.172_19101'})
"
步骤 6:配置 wp-config.php
python3 ../btpanel_files/scripts/files.py -s "内网 172" \
touch "/www/wwwroot/192.168.69.172_19101/wp-config.php"
python3 ../btpanel_files/scripts/files.py -s "内网 172" \
cat "/www/wwwroot/192.168.69.172_19101/wp-config-sample.php" > /tmp/wp-config.txt
sed -i 's/database_name_here/wp_db_101/g; s/username_here/wp_db_101/g; s/password_here/9q87Fbr8On41lzoT/g; s/localhost/127.0.0.1/g' /tmp/wp-config.txt
python3 ../btpanel_files/scripts/files.py -s "内网 172" \
edit "/www/wwwroot/192.168.69.172_19101/wp-config.php" \
-f /tmp/wp-config.txt
步骤 7:应用伪静态规则
python3 {baseDir}/scripts/rewrite.py -s "内网 172" \
set -n "192.168.69.172_19101" -t wordpress
步骤 8:验证访问
curl -I http://192.168.69.172:19101
HTTP/1.1 302 Found
X-Redirect-By: WordPress
Location: http://192.168.69.172:19101/wp-admin/install.php
部署完成信息
## 🎉 WordPress 部署完成!
| 项目 | 值 |
|------|------|
| 访问地址 | http://192.168.69.172:19101 |
| 数据库名 | wp_db_101 |
| 用户名 | wp_db_101 |
| 密码 | 9q87Fbr8On41lzoT |
| 数据库主机 | 127.0.0.1 |
关键注意事项
- 数据库参数自动传递 - 脚本已自动处理
sql=true 参数
- 下载大文件使用 --wait - 确保下载完成
- 解压到临时目录 - 避免子目录问题
- wp-config.php 配置 - 必须正确配置数据库连接
- 伪静态规则必需 - WordPress 正常工作必要条件
- 端口选择 - 建议使用 19000+ 避免冲突
注意事项
- 删除操作谨慎:删除站点、数据库等操作不可逆,操作前务必备份数据
- PHP 版本兼容:切换 PHP 版本前,确认网站代码兼容新版本
- SSL 证书申请:申请免费证书需要域名能正常解析且 80 端口开放
- 数据库权限:设置数据库访问权限时,
% 表示允许远程连接,127.0.0.1 表示仅本地访问
- 伪静态规则:应用伪静态规则前,建议先查看当前规则并备份
- API 参数要求:创建站点时宝塔 API 要求明确传递
sql 和 ftp 参数(脚本已自动处理)