# 宝塔面板部署

> 通过 SSH 队列部署 WordPress、宝塔面板和 LNMP 运行环境。

Source: https://docs.vxras.com:3000/docs/installation/deployment
Resource: zibll-docs://docs/installation/deployment



## 宝塔面板部署 [#宝塔面板部署]

这个页面用于在线队列部署 WordPress、宝塔面板和 LNMP 运行环境。交互思路参考 [quick-build-wp](https://github.com/Qinver-china/quick-build-wp) 与 [zibll.com/quick-build-wp](https://www.zibll.com/quick-build-wp)，但部署策略面向已有服务器做了调整：

* 支持 SSH 密码登录和 SSH 私钥登录，用户自行选择。
* 支持链接检测、宝塔安装检测、LNMP 环境检测。
* 宝塔安装支持正式版、稳定版、历史指定版本、企业版以及自定义/企业定制脚本。
* 不强制全新服务器。已安装宝塔就跳过宝塔安装；Nginx、PHP、MySQL、Redis 可以分别选择是否安装。
* PHP Redis 扩展和 PHP OPcache 独立检测、独立安装，适合已经装过部分环境的服务器。
* 队列状态显示在部署表单下方，方便连续查看日志和步骤结果。
* 当前任务 ID 会写入浏览器 Cookie，离开页面后返回仍可继续查看队列进度。

<Callout type="info" title="当前实现阶段">
  当前页面已经接入真实 SSH Worker，可通过密码或私钥连接服务器，执行链接检测、宝塔检测、LNMP 检测、按开关补装和 WordPress 初始化。任务状态不会回显 SSH 密码和 SSH 私钥；安装完成后会通过弹窗显示宝塔、WordPress 的访问地址与生成账号信息。
</Callout>

<DeployQueueConsole mode="baota" />

## 队列流程 [#队列流程]

1. 链接检测：验证 SSH 地址、端口、用户和认证方式。
2. 宝塔检测：检查 `bt` 命令、`/www/server/panel`、面板进程和常用端口。
3. LNMP 检测：检查 Nginx、PHP、MySQL/MariaDB、Redis 和 PHP 扩展。
4. 按开关补装：只安装用户选择的缺失组件，PHP Redis 与 OPcache 会作为独立步骤处理。
5. 创建网站：通过宝塔面板内部 Python API 创建站点和数据库，同步到宝塔网站列表与数据库列表。
6. 安装 WordPress：写入管理员账号、固定链接和基础配置。
7. 申请 SSL：失败不阻断主流程，只标记为需要人工处理。

## 面板账号 [#面板账号]

队列会在安装宝塔时把用户填写的面板账号和密码传给官方安装脚本；安装完成后，还会使用宝塔面板自带的 Python 运行时执行 `tools.py panel` 设置密码，并通过 `tools.py` 中的 `set_panel_username()` 同步用户名。

这样做比直接调用 `bt 5`、`bt 6` 更稳定。不同宝塔版本的 `bt` 交互命令可能变化，直接传参容易出现用户名或密码设置失败；面板内部工具会同时更新面板数据库和 `default.pl`，最终登录信息以部署结果弹窗显示的账号密码为准。

## 宝塔版本 [#宝塔版本]

未检测到宝塔面板时，队列会按用户选择调用对应安装脚本：

```bash
# 正式版 11.8.0
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec

# 稳定版 10.0.2
url=https://download.bt.cn/install/installStable.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O installStable.sh $url;fi;bash installStable.sh ed8484bec

# 历史版本示例
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_nearest.sh;else wget -O install_nearest.sh https://download.bt.cn/install/install_nearest.sh;fi;bash install_nearest.sh latest960

# 企业版 11.8.0
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_ltd.sh;else wget -O install_ltd.sh https://download.bt.cn/install/install_ltd.sh;fi;bash install_ltd.sh ed8484bec
```

如果使用企业定制版或私有镜像，可以选择“自定义/企业定制脚本”，填写脚本地址和参数。脚本执行完成后，后续 LNMP、扩展、宝塔建站和 WordPress 安装流程仍由队列接管。

## API [#api]

当前页面使用这些接口：

```txt
POST /api/deploy/check
POST /api/deploy/tasks
GET  /api/deploy/tasks/:id
POST /api/deploy/tasks/:id/cancel
```

任务接口不会回显 SSH 密码和 SSH 私钥。宝塔账号密码、WordPress 管理员账号密码只会在部署成功结果里返回，用于当前用户查看与复制。
