在同一个服务器上部署第二个隔离的宝塔面板(BT Panel)服务是完全可行的,但需要注意端口冲突、进程隔离和数据目录分离。以下是经过验证的安全部署方案:
✅ 核心原则
- 避免端口冲突:每个面板需使用不同的 HTTP/HTTPS/SSH 端口。
- 独立运行环境:通过不同用户、不同安装路径、不同配置文件实现隔离。
- 网络访问控制:建议通过 Nginx/Apache 反向X_X或防火墙规则限制访问。
🔧 推荐方案:手动安装第二实例(非官方多面板模式)
⚠️ 注意:宝塔官方不支持在同一服务器运行多个面板实例,因此需手动规避冲突。此方法适用于高级用户。
步骤 1:准备新系统用户
sudo useradd -m -s /bin/bash btuser2
sudo passwd btuser2 # 设置密码(可选)
步骤 2:下载并修改安装脚本
# 切换到新用户
su - btuser2
# 创建独立安装目录
mkdir -p /home/btuser2/bt2
cd /home/btuser2/bt2
# 下载宝塔安装脚本(保留原始版本)
wget -O install.sh https://download.bt.cn/install/install_6.0.sh
chmod +x install.sh
步骤 3:修改安装参数(关键!)
编辑 install.sh,找到以下行并修改:
| 原配置 | 新配置(示例) |
|---|---|
port=8888 |
port=8898(HTTP 管理端口) |
https_port=443 |
https_port=4443(HTTPS 端口) |
ssh_port=22 |
ssh_port=2222(如需 SSH 登录) |
install_path=/www/server |
install_path=/home/btuser2/www/server |
💡 提示:也可在安装时通过环境变量指定:
BT_PORT=8898 BT_HTTPS_PORT=4443 BT_SSH_PORT=2222 ./install.sh
步骤 4:执行安装
./install.sh --bt_user=btuser2 --bt_path=/home/btuser2/bt2
若脚本不支持自定义参数,可手动修改后运行:
sed -i 's/port=8888/port=8898/g' install.sh sed -i 's/https_port=443/https_port=4443/g' install.sh sed -i 's|/www/server|/home/btuser2/www/server|g' install.sh ./install.sh
步骤 5:启动服务并设置开机自启
# 以 btuser2 身份启动
sudo systemctl start bt2 # 若已注册为 systemd 服务
# 或手动启动(根据实际路径)
/home/btuser2/bt2/bin/bt start
# 添加开机自启(需创建 systemd 单元文件)
sudo tee /etc/systemd/system/bt2.service > /dev/null <<EOF
[Unit]
Description=BaoTa Panel Instance 2
After=network.target
[Service]
User=btuser2
Group=btuser2
ExecStart=/home/btuser2/bt2/bin/bt start
ExecStop=/home/btuser2/bt2/bin/bt stop
Restart=on-failure
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable bt2
sudo systemctl start bt2
🔐 安全加固建议
1. 防火墙开放新端口
# 假设第一面板用 8888,第二面板用 8898
sudo ufw allow 8898/tcp
sudo ufw allow 4443/tcp
sudo ufw allow 2222/tcp # 如启用 SSH
2. 反向X_X(推荐生产环境)
通过主面板的 Nginx 将子域名映射到第二实例:
- 主面板域名:
panel1.example.com→ 指向localhost:8888 - 子域名:
panel2.example.com→ 指向localhost:8898
Nginx 配置示例(在主面板的站点配置中):
server {
listen 443 ssl;
server_name panel2.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:8898;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3. 权限隔离
确保两个面板的数据目录无交叉:
chown -R btuser1:btuser1 /home/btuser1/www
chown -R btuser2:btuser2 /home/btuser2/www
chmod 750 /home/btuser1/www /home/btuser2/www
🚫 不推荐的做法
- ❌ 直接运行两个
python bt.py进程(易导致端口冲突、资源争抢) - ❌ 使用 Docker 容器(宝塔未官方支持容器化部署,维护复杂)
- ❌ 修改同一用户的配置覆盖安装(会导致数据混乱)
✅ 验证是否成功
- 访问
http://your-ip:8898应看到第二面板登录页 - 检查进程:
ps aux | grep bt应显示两个独立进程 - 查看日志:
/home/btuser2/bt2/logs/bt.log
如您希望更轻量级的隔离方案(例如仅用于测试),也可考虑:
- 使用 Docker + 宝塔镜像(需自行构建)
- 使用 LXC/LXD 容器 创建独立 Linux 环境再装宝塔
- 使用 VPS 分片(最稳妥但成本较高)
需要我提供完整的 systemd 服务模板或 Docker 构建脚本吗?
云小栈