三种脚本,对应三种场景
场景一:新服务器从零开始,装面板的同时就把WordPress建好 → 安装时自动部署
场景二:面板已经装好了,要批量创建几十个域名站点 → bt命令行批量脚本
场景三:站点建好了,要自动部署WordPress/Typecho等程序源码 → API一键部署脚本
一、场景一:安装面板的同时就把网站建好
2026年宝塔官方在安装流程里新增了"自动部署"选项。在宝塔官网的安装引导页面,你可以直接选好:Nginx版本、MySQL版本、PHP版本,以及要部署什么程序——WordPress、ThinkPHP-5.0、或者空站点(只搭环境不装程序)。页面会自动生成一条专属安装命令,你复制到服务器上执行,等脚本跑完,面板装好了,网站也建好了,SSL证书也自动配好了。
- 打开宝塔官网,进入"安装"页面
- 在"自动部署"区域选择:程序类型(WordPress / ThinkPHP / 空站点)、Nginx版本、MySQL版本、PHP版本
- 页面自动生成一条专属安装命令,直接复制
- SSH连上服务器,粘贴命令回车
- 等15-30分钟(取决于服务器性能和网络),安装完成
- 打开浏览器访问
https://服务器IP,WordPress已经在运行了
用IP访问时宝塔会自动配SSL证书。但后续绑定了域名访问时,证书不会自动配置,需要你手动在面板里申请。另外,这个方式适合"一台新服务器建一个主站"的场景,如果你想装完面板批量建几十个域名站点,往下看第二种方式。
2026年7月最新版宝塔面板通用安装命令(适用于CentOS/Debian/Ubuntu):
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系统兼容性方面,官方推荐顺序:Debian 12 > Ubuntu 22 > CentOS 9 / OpenCloud 9。Windows系统不能直接用,需要先重装Linux。
二、场景二:面板已装好,批量创建几十个域名站点
很多人搜"宝塔一键建站脚本",实际上搜的是这个:面板已经装好了,LNMP环境也配好了,现在要快速创建几十个域名站点——每个站点绑定独立域名、独立根目录、独立数据库、独立FTP账号。手动在面板里一个一个添加,10个站就要点几十次鼠标。
宝塔面板虽然没有官方的一键批量建站功能,但它内置了一个bt命令行工具,可以调用底层Python API来创建站点。配合一个简单的Shell脚本循环,就能实现批量建站。
2.1 批量创建域名站点的Shell脚本
第一步,创建一个域名列表文件 sites.txt,每行一个域名:

mysite1.commysite2.commysite3.comblog.example.comshop.example.com第二步,创建建站脚本 batch_create_sites.sh:
#!/bin/bash# 宝塔批量建站脚本# 用法: ./batch_create_sites.sh sites.txt 74# 参数1: 域名列表文件 参数2: PHP版本ID(74=PHP7.4, 80=PHP8.0, 82=PHP8.2)DOMAIN_FILE="$1"PHP_VER="${2:-74}"if [ ! -f "$DOMAIN_FILE" ]; thenecho "域名列表文件不存在: $DOMAIN_FILE"exit 1fiCOUNT=0while read domain; do# 跳过空行和注释行[[ -z "$domain" || "$domain" == \#* ]] && continueecho "正在创建站点: $domain (PHP$PHP_VER)..."bt add_site "$domain" "$PHP_VER"if [ $? -eq 0 ]; thenecho "✅ $domain 创建成功"COUNT=$((COUNT + 1))elseecho "❌ $domain 创建失败"fidone < "$DOMAIN_FILE"echo ""echo "========================"echo "批量建站完成,共创建 $COUNT 个站点"echo "========================"echo ""echo "⚠ 接下来请执行以下检查:"echo "1. nginx -t # 检查Nginx配置是否有错误"echo "2. bt 76 # 查看SSL证书状态"echo "3. 检查各站点 /www/wwwroot/域名/ 目录下的默认首页"第三步,赋予执行权限并运行:
chmod +x batch_create_sites.sh./batch_create_sites.sh sites.txt 74bt add_site 命令的默认行为是:创建站点、绑定域名、创建对应数据库、开启FTP、尝试申请SSL证书。一套操作下来,一个完整的独立站点就搭好了。
2.2 脚本跑完≠万事大吉,三项必查
批量创建后脚本不会自动帮你校验,下面三项检查每次都要做:
| 检查项 | 命令 | 看什么 |
|---|---|---|
| Nginx配置 | nginx -t | 是否有重复server_name或域名含非法字符导致的配置错误 |
| SSL证书 | bt 76 | 查看证书列表,状态为"未获取到证书"的需用bt 77强制续签 |
| 站点首页 | 检查目录 | /www/wwwroot/域名/ 下的index.html是否为预期内容,如需统一模板用rsync批量覆盖 |
2.3 如果你需要更精细的控制
bt add_site 是一条封装好的快捷命令,但它没法控制"不要自动创建数据库"或"不要自动申请SSL"这种细节。如果你需要更灵活的参数,可以直接调宝塔底层的Python API:
python /www/server/panel/class/web_api.py add_site 域名 PHP版本ID这个方法给的是原始API入口,可以传入更多自定义参数,适合有开发能力的用户做二次封装。
三、场景三:用API全自动部署程序源码
站点建好了,目录是空的,下一步要装WordPress、Typecho还是其他程序?宝塔面板内置了"一键部署"功能,在软件商店里可以直接装。但如果想脚本化、自动化——比如每次建站后自动部署WordPress——就需要调宝塔的部署API。
3.1 开启API并获取密钥
第一步,进宝塔面板后台 → 左侧菜单"设置" → "面板设置" → 找到"API接口"区域 → 勾选"启用API接口" → 保存。页面会显示API密钥(api_sk),把它记下来。

宝塔面板 v11.7.0 的API认证方式使用的是双重MD5签名,请求格式为POST,Content-Type为application/x-www-form-urlencoded。
3.2 Python全自动建站+部署WordPress脚本
下面这个脚本做了三件事:①创建站点 → ②一键部署WordPress → ③输出站点信息。复制后改三个变量就能用:
#!/usr/bin/env python3# 宝塔面板全自动建站+部署WordPress脚本# 环境: Python 3.6+import requestsimport hashlibimport timeimport json# ========== 修改下面三个变量 ==========PANEL_URL = "https://你的服务器IP:8888" # 宝塔面板地址API_KEY = "你的api_sk密钥" # 面板设置→API接口中获取DOMAIN = "your-site.com" # 要创建的域名PHP_VERSION = "74" # PHP版本: 74/80/81/82/83/84# =====================================# 构造签名request_time = str(int(time.time()))token_raw = request_time + hashlib.md5(API_KEY.encode()).hexdigest()request_token = hashlib.md5(token_raw.encode()).hexdigest()# 公共请求头headers = {"Content-Type": "application/x-www-form-urlencoded"}def bt_api(action, data=None):"""调用宝塔面板API"""if data is None:data = {}data["request_time"] = request_timedata["request_token"] = request_tokenurl = f"{PANEL_URL}/{action}"resp = requests.post(url, data=data, headers=headers, verify=False)return resp.json()# 关闭SSL警告(自签名证书场景)import urllib3urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)print(f"=== 开始自动建站: {DOMAIN} ===\n")# 步骤1: 创建站点print("[1/3] 正在创建站点...")result = bt_api("site?action=AddSite", {"webname": json.dumps({"domain": DOMAIN, "domainlist": [], "count": 0}),"path": f"/www/wwwroot/{DOMAIN}","type_id": "0","type": "PHP","version": PHP_VERSION,"port": "80","ps": DOMAIN,"ftp": "true","sql": "true","codeing": "utf8","dataass": "true"})print(f" 创建站点结果: {result.get('msg', result)}")if result.get("status") != True:print("❌ 创建站点失败,终止脚本")exit(1)site_id = result.get("siteStatus", {}).get("siteId", "")print(f" 站点ID: {site_id}")# 步骤2: 获取可部署的软件包列表print("\n[2/3] 正在获取一键部署包列表...")result = bt_api("deployment?action=GetList")packages = result.get("data", [])wp_package = Nonefor pkg in packages:if "wordpress" in pkg.get("name", "").lower():wp_package = pkgbreakif not wp_package:print("❌ 未找到WordPress部署包")exit(1)print(f" 找到WordPress包: {wp_package.get('name')}")# 步骤3: 部署WordPress到目标站点print("\n[3/3] 正在一键部署WordPress...")result = bt_api("deployment?action=SetupPackage", {"id": str(wp_package.get("id")),"site_id": str(site_id),"sitename": DOMAIN})print(f" 部署结果: {result.get('msg', result)}")print(f"\n=== 建站完成 ===")print(f"站点域名: {DOMAIN}")print(f"站点目录: /www/wwwroot/{DOMAIN}")print(f"访问地址: http://{DOMAIN}")print(f"请访问上述地址完成WordPress初始化配置(设置管理员账号密码等)")- 先在服务器上安装Python requests库:
pip3 install requests urllib3 - 修改脚本顶部的三个变量:面板地址、API密钥、目标域名
- 运行:
python3 bt_auto_deploy.py - 脚本会自动创建站点→部署WordPress→输出访问地址
- 首次访问域名进入WordPress安装向导,设置管理员账号即可
3.3 部署其他程序的API要点
上面脚本的核心是/deployment?action=SetupPackage这个接口。如果你要部署的不是WordPress,而是Typecho、可道云、ThinkPHP等,只需要改第2步里匹配的包名即可。宝塔面板一键部署目前支持的程序包括:
| 程序 | 类型 | 适用场景 |
|---|---|---|
| WordPress | CMS/博客 | 企业站、博客、商城(插件生态最丰富) |
| Typecho | 轻量博客 | 个人博客、轻量内容站(比WP省资源) |
| ThinkPHP-5.0 | PHP框架 | 自研项目、二次开发 |
| 可道云 | 私有云盘 | 搭建私有网盘、团队文件共享 |
| 帝国CMS | CMS | 中文内容管理系统,适合资讯站 |
你也可以在脚本的第2步加一个循环,先调GetList接口打印所有可部署的包名和ID,方便你选:
# 列出所有可一键部署的程序result = bt_api("deployment?action=GetList")for pkg in result.get("data", []):print(f"ID: {pkg['id']}, 名称: {pkg['name']}")四、三种方式怎么选?一张表说清楚
| 对比维度 | 安装时自动部署 | bt批量脚本 | API全自动 |
|---|---|---|---|
| 门槛 | ⭐ 零基础 | ⭐⭐ 会复制粘贴即可 | ⭐⭐⭐ 需懂Python基础 |
| 适用时机 | 新服务器,面板还没装 | 面板已装,需批量建域名站点 | 需要全流程自动化 |
| 建站数量 | 1个站 | 无限(取决于服务器性能) | 无限(可循环调用) |
| 支持程序 | WordPress / ThinkPHP / 空站 | 仅建空站点,程序需手动装 | WordPress / Typecho / 可道云 / ThinkPHP等 |
| 自动化程度 | 半自动(需手动复制命令) | 半自动(需准备域名列表) | 全自动(可集成到CI/CD) |
| 灵活度 | 低 | 中 | 高(可自定义所有参数) |
五、新手最容易踩的4个坑
六、几个能让你少折腾的技巧
如果你有一份CSV文件包含域名、PHP版本、是否需要数据库等信息,可以用Python的csv模块读取后循环调用API,比纯Shell脚本更灵活,也方便做错误重试。
bt add_site创建的站点默认首页是宝塔的欢迎页。如果你有统一的模板首页,建完站后一条rsync命令批量覆盖所有站点目录:for d in /www/wwwroot/*/; do cp template.html "$d/index.html"; done
在宝塔面板的软件商店安装"Webhook"插件,配置Git仓库地址和部署脚本。代码push到GitHub/Gitee后,服务器自动git pull更新代码,不用每次手动上传。
GitHub上有一个ifui/baota项目,把宝塔面板封装到Docker容器里。每次测试建站脚本前,起一个新的Docker容器做实验,搞坏了直接删容器重建,不影响生产环境。
七、宝塔面板常用bt命令速查
以下命令在SSH连接服务器后直接输入即可,不需要进面板Web界面:
| 命令 | 功能 |
|---|---|
bt | 显示命令行工具箱菜单 |
bt default | 查看面板登录地址、账号、密码(忘记时用) |
bt 5 | 修改面板密码 |
bt 8 | 修改面板端口 |
bt 14 | 查看面板默认登录信息 |
bt 1 / 2 / 3 | 重启 / 停止 / 启动面板 |
bt 9 | 清除面板缓存 |
bt 10 | 清除面板登录限制(输错密码被锁时用) |
bt 22 | 显示面板错误日志 |
bt 76 / 77 | 查看SSL证书列表 / 强制续签证书 |
注意:bt命令主要管理面板本身(重启、改密码、清缓存等),bt add_site 是底层Python API的封装,不在bt工具箱菜单里显示,但可以直接用。
八、如果你用的是腾讯云/阿里云,还有一个更简单的办法
腾讯云和阿里云的轻量应用服务器在购买时可以直接选"宝塔面板"镜像。重装系统选这个镜像,系统装好宝塔就已经在里面了,省去手动安装面板这一步。镜像版本可能不是最新的,登录后去面板右上角点"更新"即可。
然后再配合本文的第二种或第三种脚本方式,就能实现"买服务器 → 开机 → 跑脚本 → 网站上线"的全自动流程。
最后说一句
宝塔面板的"一键建站"不是一个按钮能搞定的事,而是三种场景三条路:装面板时顺手建站适合新手单站场景,bt批量脚本适合批量域名站群,API全自动脚本适合有开发能力、想做CI/CD自动化的场景。选对方法,10分钟能搞定的就别花两小时点鼠标。唯一要记住的是:脚本跑完一定手动检查Nginx配置、SSL证书、站点首页三项,别偷这个懒。

