加油
努力

如何在已有一个宝塔面板的服务器上部署第二个隔离的面板服务?

在同一个服务器上部署第二个隔离的宝塔面板(BT Panel)服务是完全可行的,但需要注意端口冲突进程隔离数据目录分离。以下是经过验证的安全部署方案:


✅ 核心原则

  1. 避免端口冲突:每个面板需使用不同的 HTTP/HTTPS/SSH 端口。
  2. 独立运行环境:通过不同用户、不同安装路径、不同配置文件实现隔离。
  3. 网络访问控制:建议通过 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 容器(宝塔未官方支持容器化部署,维护复杂)
  • ❌ 修改同一用户的配置覆盖安装(会导致数据混乱)

✅ 验证是否成功

  1. 访问 http://your-ip:8898 应看到第二面板登录页
  2. 检查进程:ps aux | grep bt 应显示两个独立进程
  3. 查看日志:/home/btuser2/bt2/logs/bt.log

如您希望更轻量级的隔离方案(例如仅用于测试),也可考虑:

  • 使用 Docker + 宝塔镜像(需自行构建)
  • 使用 LXC/LXD 容器 创建独立 Linux 环境再装宝塔
  • 使用 VPS 分片(最稳妥但成本较高)

需要我提供完整的 systemd 服务模板或 Docker 构建脚本吗?

云服务器