一、方案总览:三条路对号入座
| 方案 | 适合数量 | 技术门槛 | 一次建完的时间 | 推荐度 |
|---|---|---|---|---|
| 宝塔自带批量建站 | 5-20个 | ★☆☆☆☆ 零门槛 | 30秒 | ★★★★★ 首选 |
| Shell脚本+bt命令行 | 20-100个 | ★★☆☆☆ 会改脚本 | 1分钟 | ★★★★☆ 最灵活 |
| Python调用宝塔API | 100+个/跨服务器 | ★★★☆☆ 需要Python | 2分钟 | ★★★★☆ 企业级 |
二、方案一:宝塔自带批量建站(最省事,适合20个以内)
很多人不知道,宝塔面板从7.x版本开始就在"添加站点"功能里内置了批量建站的入口。不用装任何插件,也不用写一行代码。操作路径:宝塔面板 → 网站 → 添加站点 → 在弹窗顶部找到「批量建站」标签页。
批量建站的格式非常简单,每行一个站点,用竖线分隔参数:
域名|根目录|FTP|数据库|PHP版本# 示例:创建一个站点
www.shanghai-fenzhan.com|/www/wwwroot/www.shanghai-fenzhan.com|1|1|74
# 一行绑定多个域名(逗号分隔)
www.shanghai-fenzhan.com,shanghai-fenzhan.com|/www/wwwroot/www.shanghai-fenzhan.com|1|1|74
# 批量5个城市分站
www.shanghai-fenzhan.com|/www/wwwroot/www.shanghai-fenzhan.com|1|1|74
www.beijing-fenzhan.com|/www/wwwroot/www.beijing-fenzhan.com|1|1|74
www.guangzhou-fenzhan.com|/www/wwwroot/www.guangzhou-fenzhan.com|1|1|74
www.shenzhen-fenzhan.com|/www/wwwroot/www.shenzhen-fenzhan.com|1|1|74
www.chengdu-fenzhan.com|/www/wwwroot/www.chengdu-fenzhan.com|1|1|74
参数说明:
| 参数位置 | 含义 | 填法 |
|---|---|---|
| 第1列:域名 | 站点绑定的域名 | 多个域名用英文逗号分隔 |
| 第2列:根目录 | 网站文件存放路径 | 填具体路径,或填1自动生成 |
| 第3列:FTP | 是否创建FTP账号 | 1创建,0不创建 |
| 第4列:数据库 | 是否创建MySQL数据库 | 1创建,0不创建 |
| 第5列:PHP版本 | 站点使用的PHP版本 | 0=纯静态,74=PHP7.4,81=PHP8.1 |
="www."&A2&"-fenzhan.com|/www/wwwroot/www."&A2&"-fenzhan.com|1|1|74",下拉填充,全选复制粘贴到宝塔批量建站框里就行。这个方案最大的优点是零学习成本,鼠标操作,所见即所得。局限也很明显:一次最多处理几十个站,再多的话浏览器可能卡住;而且建完站后,SSL证书、伪静态、文件上传这些后续操作还是要一个一个手动搞。

三、方案二:Shell脚本 + bt命令行(最灵活,适合20-100个站)
宝塔面板底层有一个bt命令行工具,所有你在网页上能做的操作,基本上都能用命令完成。写一个Shell脚本循环调用这些命令,就能实现真正的自动化批量建站。# 宝塔批量建站脚本
# 用法:把域名列表放进domains.txt,每行一个域名,然后执行此脚本
PHP_VERSION="74"
WEB_ROOT_BASE="/www/wwwroot"
while IFS= read -r domain; do
# 跳过空行和注释行
[[ -z "$domain" || "$domain" == \#* ]] && continue
site_path="${WEB_ROOT_BASE}/${domain}"
echo "正在创建站点: ${domain}"
# 调用宝塔命令行API创建站点
bt 14 "${domain}" "${site_path}" "1" "1" "${PHP_VERSION}"
if [ $? -eq 0 ]; then
echo "✓ ${domain} 创建成功"
else
echo "✗ ${domain} 创建失败"
fi
# 避免请求过快
sleep 1
done < domains.txt
echo "批量建站完成!"
用这个脚本的前提操作:
- SSH登录到你的服务器
- 创建一个
domains.txt文件,每行写一个主域名 - 把上面的脚本保存为
batch_site.sh chmod +x batch_site.sh && ./batch_site.sh
bt命令的常用编号对照表:
| 命令 | 功能 |
|---|---|
bt 14 | 添加网站(参数:域名 目录 FTP 数据库 PHP版本) |
bt 15 | 删除网站 |
bt 19 | 显示面板日志 |
bt 22 | 显示面板错误日志 |
bt 23 | 关闭BasicAuth认证 |
Shell脚本方案的优势是可以和任何Linux工具链结合——你可以把域名列表从数据库里导出、从CSV文件读取、甚至调用域名注册商API自动获取。建站完成后,你还能在同一脚本里继续写:自动上传网站源码、自动导入数据库、自动配置伪静态。
bt 14命令在不同宝塔版本中可能已经变化,如果发现不生效,可以输入bt回车查看当前版本支持的命令列表。四、方案三:Python调用宝塔API(企业级,跨服务器批量管理)
如果你有几百个站要建,或者要同时管理多台服务器,那最好的方案是调用宝塔官方的API接口。宝塔面板提供了一个完整的RESTful API,可以程序化地完成建站、数据库管理、SSL部署、文件操作等几乎所有操作。第一步:开启宝塔API

宝塔面板 → 设置 → API接口 → 开启 → 设置密钥 → 添加IP白名单。
你会得到一个接口地址(形如 https://你的服务器IP:8888)和一个64位的API密钥。这两个东西要保管好,有它们就能完全控制你的宝塔面板。
import json
import hashlib
import time
class BTPanel:
def __init__(self, api_url, api_key):
self.api_url = api_url.rstrip('/')
self.api_key = api_key
def _make_sign(self):
# 生成请求签名
now = int(time.time())
sign_str = self.api_key + str(now)
sign = hashlib.md5(sign_str.encode()).hexdigest()
return {'request_time': now, 'request_token': sign}
def create_site(self, domain, path, php_version='74', ftp=True, db=True):
# 创建站点
url = f"{self.api_url}/site?action=AddSite"
data = {
'webname': json.dumps({'domain': domain, 'domainlist': [], 'count': 0}),
'path': path,
'type_id': '0',
'type': 'PHP',
'version': php_version,
'port': '80',
'ps': domain,
'ftp': str(ftp).lower(),
'sql': str(db).lower(),
'codeing': 'utf8mb4',
'datauser': 'true',
}
data.update(self._make_sign())
resp = requests.post(url, data=data, verify=False)
return resp.json()
def batch_create_sites(self, domains_file, php_version='74'):
# 批量创建站点
results = []
with open(domains_file, 'r') as f:
domains = [line.strip() for line in f if line.strip() and not line.startswith('#')]
for i, domain in enumerate(domains, 1):
path = f"/www/wwwroot/{domain}"
print(f"[{i}/{len(domains)}] 创建 {domain} ...")
result = self.create_site(domain, path, php_version)
status = '✓' if result.get('status') else '✗'
print(f" {status} {result.get('msg', '')}")
results.append({'domain': domain, 'result': result})
time.sleep(1)
return results
# 使用示例
if __name__ == '__main__':
api = BTPanel(
api_url='https://你的服务器IP:8888',
api_key='你的64位API密钥'
)
api.batch_create_sites('domains.txt', php_version='74')
print("全部完成!")
五、建站只是第一步,批量管理才是重头戏
站点建好了,事情才刚开始。如果你批量建了50个站,接下来每个站都需要:部署SSL证书、设置伪静态、上传网站文件、导入数据库、配置定时备份。这些事情如果还是一个一个手动搞,批量建站省下的时间全搭回去了。批量部署SSL证书
宝塔面板9.4.0以上版本支持SSL自动部署功能:先在宝塔云端上传证书,然后在官网后台创建同步任务,多台服务器的站点就能自动拉取证书。如果你的版本较低,可以用Let's Encrypt的ACME协议写脚本批量申请:
# 批量申请Let's Encrypt证书
while IFS= read -r domain; do
[[ -z "$domain" || "$domain" == \#* ]] && continue
echo "申请证书: ${domain}"
# 调用宝塔API申请Let's Encrypt证书
curl -k -X POST "https://面板地址:8888/ssl?action=ApplyDVSSL" \
-d "domain=${domain}&auth_type=http&auth_to=主域名" \
--header "X-Sign: $(生成签名)"
sleep 5
done < domains.txt
批量设置伪静态
如果所有站点用同一套程序(比如全部是WordPress),伪静态规则是一样的。最直接的方法不是逐个站点设置,而是直接操作Nginx配置文件:

cd /www/server/panel/vhost/nginx
# 遍历所有站点配置文件,批量替换伪静态规则
for conf in *.conf; do
# 检查是否已包含WordPress伪静态,没有就追加
if ! grep -q "index.php" "$conf"; then
echo "添加伪静态: $conf"
fi
done
# 重载Nginx使配置生效
nginx -s reload
nginx -t测试语法,确认没问题再reload。批量操作时如果有一个站点配置出错,整个Nginx都会起不来,所有站点全部挂掉。六、三种方案的成本和限制,给你算清楚了
| 对比维度 | 自带批量建站 | Shell脚本 | Python API |
|---|---|---|---|
| 上手时间 | 5分钟 | 30分钟 | 1-2小时 |
| 建站速度 | 一次性提交 | 逐条循环 | 逐条+多线程 |
| 跨服务器 | 不支持 | 需写多份脚本 | 天然支持 |
| 错误处理 | 人工检查 | 脚本判断 | 完善的异常处理 |
| SSL批量部署 | 手动 | 可扩展 | API一键 |
| 日志和记录 | 无 | 可输出文本 | 结构化日志 |
七、一个很多人忽略的关键细节
批量建站的时候,域名解析和DNS要提前搞定。如果你在宝塔里批量建了50个站点,但域名的A记录还没解析到服务器IP,宝塔仍然会成功创建站点——但后续申请SSL证书的时候会失败,因为Let's Encrypt需要验证域名解析。正确的顺序是:
- 先在DNS服务商处批量添加A记录解析(大部分DNS服务商支持批量导入)
- 等10-30分钟解析生效(可以用
nslookup或dig命令验证) - 确认解析生效后再在宝塔批量建站
- 建站完成后立即批量申请SSL证书
- 最后上传网站文件、导入数据库
还有一个容易被忽略的:宝塔面板默认会给每个站点创建一个同名的MySQL数据库和FTP账号。如果你批量建了100个站,就会有100个数据库和100个FTP账号。这些资源本身不占多少空间,但MySQL连接数上限是有限的——如果每个数据库都有持续连接,可能会触发MySQL的max_connections限制。建议批量建站后检查MySQL配置,必要时调大连接数上限。
八、UC建站系统怎么解决批量建站问题
🚀 可视化批量建站
UC建站系统内置了批量站点管理功能,上传一个域名列表就能自动完成建站、数据库创建、程序部署、SSL证书申请的全流程。不用写一行代码,也不用登录宝塔面板。
📋 批量运维面板
所有站点统一管理——批量更新程序、批量备份、批量检查死链、批量提交搜索引擎收录。100个站和1个站的操作复杂度一样,不需要逐站点登录操作。
批量建站的本质不是"省点鼠标的时间",而是让你有精力去做更有价值的事。花一下午写好脚本,以后每次批量建站只需要跑一行命令,这才叫真正的自动化。
