用户登录
个人主页 用户中心 我的订单 添加授权 管理授权
退出登录
用户登录 用户注册
欢迎来到 UC建站系统

宝塔面板批量建站一条命令搞定20个站点:手动挨个点添加站点输入数据库密码创建FTP账号点到第十个手已经麻了,用命令行脚本一条跑完整批建站域名加数据库加FTP全部自动完成

20个域名要在宝塔上建站,手动点20次添加站点还得一个个输数据库密码,有能一条命令搞定的脚本吗?

手上有10个、20个甚至50个域名要在宝塔上建站,如果按常规操作——打开宝塔面板 → 点"添加站点" → 输入域名 → 选PHP版本 → 创建数据库 → 点提交 → 等几秒 → 再重复以上步骤——一个站大概要花1-2分钟。20个站就是半小时起步。中间还不算输错数据库密码、忘选伪静态、域名填漏了www版本这些意外情况。

其实宝塔从7.5版本开始就内置了批量建站功能,而且面板还开放了完整的API接口。一旦搞清楚这两条路,10个站、50个站的建站流程可以压缩到几十秒内完成,每个站的配置都是标准化的,不存在手滑点错的问题。

宝塔一键建站的三种实现路径

1宝塔内置批量建站:面板自带功能,不需要写代码,复制粘贴域名列表就行。适合建站格式统一的场景,比如全部是WordPress站、PHP版本都一样
2Shell脚本调用API:通过curl命令调宝塔API,适合Linux服务器上的自动化运维,可以集成到部署流水线里
3Python脚本调用API:灵活性最高,支持批量操作、错误处理、结果验证,适合需要深度定制的场景

一、宝塔内置批量建站:最简单,有手就行

宝塔7.5.27版本之后,网站管理页面右上角多了一个"批量创建"按钮。点进去,一个文本框,按照固定格式输入域名和路径,就能一次创建多个站点。

格式是每行一个站点:域名:网站根目录:PHP版本:FTP:数据库:数据库用户名:数据库密码。如果某项不需要,留空即可。最常用的用法是只填域名和PHP版本,让宝塔自动生成根目录和数据库。

# 批量建站格式(每行一个站)# 域名:根目录:PHP版本:FTP:数据库:数据库用户名:数据库密码# 最简用法——只指定域名和PHP版本site1.com: :74: :MySQL: : :www.site2.com: :74: :MySQL: : :# 完整用法——自定义所有参数site3.com:/www/wwwroot/site3:74:true:MySQL:site3_user:MyPass@123

批量建站文本框的填写要点

· PHP版本写法:7.4写74、8.0写80、8.1写81,纯静态站点写00或不填

1 - 宝塔面板批量建站一条命令搞定20个站点:手动挨个点添加站点输入数据库密码创建FTP账号点到第十个手已经麻了,用命令行脚本一条跑完整批建站域名加数据库加FTP全部自动完成 - UC建站系统

· 数据库密码留空:留空宝塔会自动生成随机密码。手动填容易设弱密码,反而不安全

· 域名要写完整:www和非www版本是独立的,建议两个都写上

· 根目录留空更省心:宝塔会自动在/www/wwwroot/下以域名创建目录,比手动指定更规范

· 建完后检查:到网站列表逐一检查域名绑定、PHP版本、数据库是否创建成功

内置批量建站的局限也很明显:只能按固定模板创建,不能自定义伪静态、不能自动申请SSL、不能上传网站源码。如果建完还需要手动一个一个去设置伪静态和证书,省下的时间又还回去了。

二、Shell脚本调API:先搞定签名,剩下就是curl的事了

宝塔API的调用分两步:生成签名 → 发POST请求。签名是门槛,也是最多人卡住的地方。打开宝塔面板 → 设置 → API接口,点"开启",复制接口密钥(api_sk)。然后用这个公式生成签名:

宝塔API签名生成公式(v11+版本)

· request_token = SHA256( request_time + request_rand + api_sk )

· request_time:当前Unix时间戳(秒)

· request_rand:随机字符串,建议用uuid或随机8位字母数字。服务器时间和宝塔面板时间必须同步,误差超过30秒签名会失效

创建站点的API接口是 /site?action=AddSite,参数包括域名、路径、PHP版本、端口、伪静态等。下面是完整的Shell批量建站脚本:

#!/bin/bash# 宝塔API一键建站脚本BT_URL="http://你的服务器IP:8888"API_SK="你的接口密钥"DOMAINS=("site1.com" "site2.com" "site3.com")for DOMAIN in "${DOMAINS[@]}"; do# 每次请求重新生成签名REQUEST_TIME=$(date +%s)REQUEST_RAND=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 8)REQUEST_TOKEN=$(echo -n "${REQUEST_TIME}${REQUEST_RAND}${API_SK}" | sha256sum | awk '{print $1}')echo "正在创建: ${DOMAIN}"RESPONSE=$(curl -s -X POST "${BT_URL}/site?action=AddSite"     -d "request_time=${REQUEST_TIME}"     -d "request_rand=${REQUEST_RAND}"     -d "request_token=${REQUEST_TOKEN}"     -d "webname={"domain":"${DOMAIN}","domainlist":[],"count":0}"     -d "path=/www/wwwroot/${DOMAIN}"     -d "type=PHP"     -d "version=74"     -d "port=80"     -d "ps=wordpress"     -d "ftp=false"     -d "sql=true"     -d "codeing=utf8")echo "结果: ${RESPONSE}"echo "---"sleep 1doneecho "全部站点创建完成"

Shell脚本调API容易出错的三个地方

· 签名每次都要重新生成:很多人以为算一次就够了,实际上每个请求的request_time和request_rand都不同,token必须重新算。循环里没重算签名是最高频的错误

· webname参数格式:不是直接传域名字符串,要传JSON对象。传错了返回"域名格式错误"

· IP白名单:宝塔API密钥默认只允许127.0.0.1。如果在另一台机器上远程调用,记得把调用方IP加到白名单

三、Python脚本调API:加了错误处理和结果验证,批量跑更稳

Shell适合快速验证,但如果要建50个站、要检查每个站的结果、要处理失败重试,Python是更合适的选择。核心逻辑一样——签名+POST,但多了结构化数据处理和异常处理。

#!/usr/bin/env python3import hashlib, time, uuid, requests, json, random, stringBT_URL = "http://你的服务器IP:8888"API_SK = "你的接口密钥"def get_sign():rt = str(int(time.time()))rr = str(uuid.uuid4())token = hashlib.sha256((rt + rr + API_SK).encode()).hexdigest()return rt, rr, tokendef create_site(domain, php_version="74", ps_rule="wordpress"):rt, rr, token = get_sign()db_pass = ''.join(random.choices(string.ascii_letters + string.digits, k=16))data = {"request_time": rt, "request_rand": rr, "request_token": token,"webname": json.dumps({"domain": domain, "domainlist": [], "count": 0}),"path": f"/www/wwwroot/{domain}","type": "PHP", "version": php_version, "port": "80","ps": ps_rule, "ftp": "false", "sql": "true", "codeing": "utf8",}try:resp = requests.post(f"{BT_URL}/site?action=AddSite", data=data, timeout=30)result = resp.json()return {"domain": domain, "db_pass": db_pass,"status": "ok" if result.get("status") else "fail","msg": result.get("msg", ""),}except Exception as e:return {"domain": domain, "status": "error", "msg": str(e)}def batch_create(domains):results = []for i, domain in enumerate(domains, 1):print(f"[{i}/{len(domains)}] {domain} ...", end=" ")r = create_site(domain)print(f"{'OK' if r['status']=='ok' else 'FAIL'} {r['msg']}")results.append(r)time.sleep(1)ok = sum(1 for r in results if r["status"] == "ok")print(f"总计 {len(domains)} | 成功 {ok} | 失败 {len(domains)-ok}")with open("bt_sites_result.json", "w", encoding="utf-8") as f:json.dump(results, f, ensure_ascii=False, indent=2)print("结果已保存至 bt_sites_result.json")return resultsif __name__ == "__main__":batch_create(["site1.com", "site2.com", "site3.com"])

Python版本比Shell多做了几件事:自动生成数据库密码、结构化记录每个站的创建结果(成功/失败/密码全保存到JSON)、try-except兜底异常(网络超时不会中断整个流程)。这些在批量操作里都是刚需。

Python脚本可以扩展的能力

· 建站+SSL一步到位:建站成功后调 /site?action=SetSSL 批量申请Let's Encrypt证书

2 - 宝塔面板批量建站一条命令搞定20个站点:手动挨个点添加站点输入数据库密码创建FTP账号点到第十个手已经麻了,用命令行脚本一条跑完整批建站域名加数据库加FTP全部自动完成 - UC建站系统

· 建站+上传源码:建站完成后自动解压WordPress或网站源码到对应目录

· 建站+DNS解析:域名托管在阿里云或腾讯云的,建站后自动添加A记录解析

· 多服务器并行:3台服务器各建20个站,多线程同时调3个BT_URL,速度翻三倍

四、三种方案怎么选?看站数和定制需求

对比维度内置批量建站Shell脚本Python脚本
上手难度零门槛需要Linux基础需要Python基础
单次建站数量10个以内最合适10-50个50+也没问题
自定义程度只能设PHP版本和数据库可自定义API全部参数完全自由,可扩展
错误处理手动逐一检查需自己写日志自动记录、可重试
SSL证书需手动逐个申请可追加API调用一键集成
多服务器需分别登录需分别SSH多线程并行调用

选内置批量建站

一次建3-5个站 / 所有站配置一样 / 不想写代码 / 建完还需要手动设置伪静态和SSL

选Shell脚本

服务器上跑 / 需要自定义数据库参数 / 想集成到CI/CD / 熟悉Linux命令行

选Python脚本

站多(20+)/ 需要建站+SSL+上传一条龙 / 多服务器并行 / 需要结构化结果记录

五、建完站之后别忘了这些步骤

一键建站只是把站点框架搭好了,离"能用"还差几步。下面这几个操作,不管用哪种方式建站,都建议在脚本里一并处理掉。

设置伪静态规则

WordPress站必须设置伪静态,否则文章页全部404。API参数 ps=wordpress 可以在建站时同步设置,忘了就调 /site?action=SetPsr 补上

申请SSL证书

调 /site?action=SetSSL 申请Let's Encrypt免费证书。域名必须先解析到服务器IP,否则证书验证会失败

开放防火墙端口

宝塔默认开放80和443端口,但如果服务器有额外的云服务商安全组,需要手动放行。这个API管不到

上传网站源码

建站API只创建框架,不部署程序。站群管理可以用UC建站系统的源码模板功能,把标准化的WordPress配置打包成模板,建站后自动部署

六、站群场景下的建站效率差距

做站群的话,10个站、20个站甚至更多,手动建站和脚本建站的效率差距不是几倍,是数量级的差距。

操作环节手动操作(单个站)脚本批量(20个站总计)
创建站点约2分钟约25秒
设置伪静态约30秒建站时同步完成
申请SSL约1分钟约30秒(并行)
上传源码约5分钟模板部署约1分钟
安装WordPress约3分钟预设配置自动完成
20个站总耗时约230分钟(近4小时)约2分钟

这个对比还没算上手动容易出错的情况——数据库密码输错、域名少绑www版本、伪静态忘设置导致全站404、SSL漏申请导致浏览器报不安全。这些错误在手动操作20个站的过程中几乎必然出现,脚本不会。

持续扩展站群的系统化方案

如果每周都有新域名要建站、每批站配置要求相同——手动或临时写脚本会很快跟不上节奏。UC建站系统把建站流程固化成了产品能力:站点模板预设好WordPress版本、PHP版本、伪静态、插件列表、主题配置,新站一键套用;建站完成后自动触发百度API推送和IndexNow通知;多站看板上能统一查看每个站点的部署状态和运行情况

关键是独立部署——每个站独立IP、独立数据库、独立模板配色,建站脚本可以统一调度但输出结果是完全隔离的

宝塔面板+API的组合,已经足够覆盖90%以上的批量建站场景了。内置批量建站适合起步阶段,Shell脚本适合日常运维,Python脚本适合深度定制。选哪个方案取决于你当前站的数量和定制需求——但不管是哪个方案,告别手动一个个点"添加站点"的重复劳动,这个转变越早做越划算。

相关推荐
在线客服
👇找客服拿折扣
QQ咨询&售后
在线时间
11:00 ~ 5:30
QQ:3155555535
👇联系QQ
👇联系WX
首页 程序 帮助 登录