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

在宝塔面板上手动填50个域名建站,从下午两点干到晚上八点。三条路径和六步实操:从一行命令秒建50个站到API批量部署WordPress和SSL证书,把建站从手工作坊变成自动化流水线

一台服务器上要建50个站。打开宝塔面板→网站→添加站点→填域名→选PHP版本→勾选创建数据库→确定。然后下一个。再下一个。做到第15个的时候手开始酸了,做到第30个的时候开始怀疑人生——域名是填对了,但有两个站填错了PHP版本,三个站忘了勾数据库,四个站的根目录路径写错了。六个小时过去了,50个站终于建完。然后还要一个一个申请SSL证书,一个一个部署WordPress。这还没完。宝塔面板的网页后台本质上是"单站操作"的交互设计,它从来没考虑过你要一次建50个站。但宝塔提供了另一条路——命令行和API。你不需要手动点50次,只需要写好脚本,让它自己跑。

宝塔批量建站三条路径,从简单到复杂:
· 路径一:命令行 bt 指令——一行代码建一个站,用循环批量跑。零学习成本,适合临时需要。
· 路径二:宝塔API + 脚本——Python/PHP调用官方API,建站+数据库+SSL+部署一站式。适合日常运维。
· 路径三:开源图形化工具——下载即用,可视化操作,批量建站+批量SSL+批量部署。适合不想写代码的用户。

路径一:bt命令行——一行命令一个站,Shell循环批量跑

宝塔面板自带 bt 命令行工具,SSH登录服务器后可以直接用。这是最原始但最快上手的方式,不需要开API,不需要写签名。

# 单个站点:bt add_site 域名 PHP版本号
bt add_site test1.com 74

# PHP版本号对照:00=纯静态 74=PHP7.4 80=PHP8.0 81=PHP8.1 82=PHP8.2

# 批量建站:从sites.txt读取域名列表
while read domain; do
  bt add_site $domain 74
done < sites.txt

执行前先把域名列表放进 sites.txt,每行一个域名。PHP版本必须已在宝塔中安装(去软件商店确认)。跑完之后有三件事必须检查:

检查项命令说明
Nginx配置nginx -t重复域名或非法字符会导致Nginx配置错误
SSL证书bt 76查看证书列表,失败的单独重试
根目录文件ls /www/wwwroot/站点名确认index.html是自定义内容而非宝塔默认欢迎页

命令行方式的局限性:bt add_site 建出来的站点不带数据库、不带FTP、不带SSL。它只是创建了站点配置和根目录。如果你需要数据库+SSL+WordPress,这条路后面还需要手动补很多操作。所以bt命令更适合"先快速建好50个空站点占坑,后面再慢慢配置"的场景。

路径二:宝塔API + Python脚本——建站+数据库+SSL+部署全自动

这是最灵活、最完整的方式。宝塔API可以做到的事远不止"建站"——创建数据库、申请SSL证书、解压文件、设置伪静态,全部可以通过API调用。一次脚本跑下来,站点从创建到上线一条龙搞定。

第一步:开启宝塔API

登录宝塔面板 → 设置 → 面板设置 → 勾选底部的"开启API接口" → 保存 → 点击"API密钥管理"生成新密钥。生成后立刻复制 keysecret——secret刷新页面后不再显示,无法找回。同时在API设置中配置IP白名单,只允许你的脚本所在服务器的IP调用。

第二步:理解签名算法(90%的人卡在这一步)

宝塔API不是简单的Token认证。每次请求需要携带动态签名:

# 签名公式(四个要素拼接后SHA256)
sign = SHA256( key + secret + timestamp(秒级) + path + '?' + query_string(按字母序排列) )

三个关键点:①时间戳必须是UTC+8秒级整数,服务器时间误差超过5分钟即失败;②查询参数必须按字母序排序后再拼接;③POST的Body数据不参与签名,但路径和查询参数必须计算。

第三步:完整Python脚本——从域名列表到站点上线

import requests, time, hashlib, json

# ====== 配置区 ======
BT_URL = "https://你的服务器IP:8888"
API_KEY = "你的key"
API_SECRET = "你的secret"
PHP_VERSION = "74" # 00=静态 74=PHP7.4 82=PHP8.2

# ====== 签名函数 ======
def make_sign(path, query_str):
    ts = int(time.time())
    raw = API_KEY + API_SECRET + str(ts) + path + "?" + query_str
    sign = hashlib.sha256(raw.encode()).hexdigest()
    return ts, sign

# ====== 添加站点 ======
def add_site(domain):
    path = "/site?action=AddSite"
    params = {
        "webname": json.dumps({"domain": domain, "domainlist": [], "count": 0}),
        "type": "PHP",
        "version": PHP_VERSION,
        "port": "80",
        "ps": "批量建站",
        "path": "/www/wwwroot/" + domain
    }
    query_str = "&".join(sorted([f"{k}={v}" for k,v in params.items()]))
    ts, sign = make_sign(path, query_str)
    url = f"{BT_URL}/site?action=AddSite&{query_str}&sign={sign}&time={ts}"
    r = requests.post(url, timeout=30)
    return r.json()

# ====== 批量执行 ======
sites = ["site1.com", "site2.com", "site3.com"]
for site in sites:
    result = add_site(site)
    print(f"{site}{result.get('msg', 'OK')}")
    time.sleep(1) # 请求间隔,避免触发频率限制

第四步:建站只是开始——后面还有四件事

创建数据库

API路径:/database?action=AddDatabase。参数:name(数据库名)、username(用户名)、password(密码)。建议数据库名用域名去点加下划线,如 site1_com_db。

1 - 在宝塔面板上手动填50个域名建站,从下午两点干到晚上八点。三条路径和六步实操:从一行命令秒建50个站到API批量部署WordPress和SSL证书,把建站从手工作坊变成自动化流水线 - UC建站系统

申请SSL证书

走Let's Encrypt,但注意频率限制:同一域名每周最多5次申请。批量申请时一定要用time.sleep(5)间隔,否则会被ACME服务器限流。

部署网站程序

先用文件管理API上传WordPress压缩包到根目录,再调用解压API。或者更简单的:在服务器上统一放一份WordPress,用cp -r批量复制到各站点根目录,然后批量修改wp-config.php中的数据库连接信息。

设置伪静态

WordPress需要伪静态规则。API路径:/site?action=SetRewriteRule。或者最省事的办法:在宝塔中把一个站配置好伪静态,然后在 /www/server/panel/vhost/rewrite/ 目录下复制规则文件。

2 - 在宝塔面板上手动填50个域名建站,从下午两点干到晚上八点。三条路径和六步实操:从一行命令秒建50个站到API批量部署WordPress和SSL证书,把建站从手工作坊变成自动化流水线 - UC建站系统

路径三:开源图形化工具——不想写代码,下载即用

如果你不想碰命令行和代码,GitHub上有一个叫 baota_BT_SSL 的开源工具(作者xiaocaiji61),专门解决这个痛点:

功能模块能做什么操作方式
批量建站导入域名列表,一键批量创建站点,自动配置PHP版本和根目录粘贴域名 → 选择PHP版本 → 点击"批量添加"
批量SSL证书一键申请并部署Let's Encrypt证书,建站时同步开启HTTPS强制跳转勾选域名 → 点击"申请证书"
批量续签到期前自动续签所有证书,不用一个一个手动续点击"批量续签"
批量文件操作批量解压、复制、移动文件到各站点根目录选择文件 → 选择目标站点 → 执行

使用方式:从GitHub Release页面下载 BaoTaApi.exe(Windows单文件,免安装),输入宝塔面板地址和API密钥即可连接。工具同时显示服务器CPU、内存等状态。完全免费开源,MIT许可。适合"需要可视化操作、不想写脚本、站点数量几十到几百个"的用户。

五个翻车现场,每一个都能让你重新建50个站

翻车一:API签名报401,调了三个小时才发现服务器时间差5分钟

宝塔API签名里带了时间戳,服务器时间误差超过5分钟直接报"签名错误"。你在本地写好脚本测试没问题,放到另一台服务器上跑就401——因为两台机器时间不同步。解决办法:执行脚本的服务器先跑一次 ntpdate ntp.aliyun.com 同步时间。或者把脚本直接放在宝塔服务器本地执行。

3 - 在宝塔面板上手动填50个域名建站,从下午两点干到晚上八点。三条路径和六步实操:从一行命令秒建50个站到API批量部署WordPress和SSL证书,把建站从手工作坊变成自动化流水线 - UC建站系统

翻车二:批量申请SSL证书,跑到第20个就被ACME服务器封了

Let's Encrypt对同一IP每小时有证书申请次数限制(约50个/小时,具体看服务器类型)。50个域名一口气申请,跑到一半就开始报错。解决办法:在循环里加 time.sleep(30)——每申请一个证书等30秒。50个域名大概25分钟跑完。或者用通配符证书(一个证书覆盖所有子域名),减少申请次数。

翻车三:域名DNS没解析就批量建站,50个站建好了全打不开

宝塔建站不检查DNS是否已解析。你脚本跑完50个站全建好了,但域名DNS还指着别的地方,或者根本没解析。SSL证书申请也会因此失败(ACME验证需要DNS能解析到服务器)。解决办法:批量建站前先确认所有域名的A记录都指向这台服务器IP。用 nslookupping 批量验证一遍。

翻车四:宝塔版本更新后API参数名变了,老脚本全挂

宝塔官方文档明确写了"API接口可能随面板版本变更,不保证稳定性"。7.x到8.x版本间API参数名可能变化(比如建站参数从webname变成别的)。解决办法:重大版本更新后先在测试服务器上跑一遍脚本,确认参数兼容。生产环境的批量建站脚本保留版本注释,注明在哪个面板版本测试通过。

翻车五:50个站同一台服务器,一个站被打所有站跟着挂

批量建站之前就要想好的问题。50个站在同一台服务器上,共享同一个CPU、内存、带宽、IP。一个站被CC攻击,CPU跑满,50个站全挂。或者一个站被搜索引擎判定为垃圾站,同一个IP上的其他站点也可能受影响。解决办法:建站之前做好资源规划,每个站点设置CPU/内存限制(宝塔有"网站资源限制"功能)。如果有预算,把核心站和长尾站放在不同服务器上。

六种场景,选什么路径对号入座

你的场景推荐路径理由
临时需要建10-20个站,不需要数据库路径一:bt命令行零配置,一条Shell循环跑完,5分钟搞定
日常运维,经常批量建站,需要数据库+SSL+WordPress路径二:API + Python脚本全自动一条龙,脚本写好以后每次改域名列表就行
不想写代码,想要可视化操作路径三:baota_BT_SSL工具下载即用,免费开源,建站+SSL+部署一站式
WordPress站群,需要批量部署+批量配置路径二+路径三组合API脚本建站+数据库,工具批量部署WP+SSL
多个服务器分散建站路径二:API脚本(集中管理)脚本支持配置多台服务器,从一台机器管理所有面板
第一次用宝塔,只想先建一个站试试宝塔网页后台手动建先搞清楚一个站的完整流程,再考虑批量

三种路径全维度对比速查表

维度路径一:bt命令路径二:API脚本路径三:图形工具
上手难度低(一条命令)中(需理解签名)低(下载即用)
功能完整度低(仅建站,无数据库/SSL)高(建站+数据库+SSL+部署)中(建站+SSL+文件操作)
批量上限无限制(受服务器资源约束)无限制(需处理频率限制)数万域名
是否需要开API不需要需要需要
SSL自动申请不支持支持(需控制频率)支持(一键批量)
数据库自动创建不支持支持需配合API
价格免费免费免费开源

宝塔批量建站的核心不在于"会不会写脚本"——Shell循环一句话的事,API调用的签名也有现成模板可以抄。真正决定效率的是建站前有没有想清楚:域名DNS都解析了吗?SSL证书申请频率限制怎么处理?数据库和FTP要不要自动创建?网站程序要不要一起部署?这些前置问题想清楚了,批量建站就是复制粘贴改域名列表的事。没想清楚就开跑,跑完才发现一半的站缺这缺那,一个一个补花的时间比手动建还多。脚本跑得快,坑踩得也快——先想清楚,再跑脚本。

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