部署
Ubuntu 无头服务器上部署 BotBrowser
在无头 Ubuntu 服务器上设置 BotBrowser 的完整指南,用于生产级浏览器自动化。
服务器要求
- 操作系统:Ubuntu 20.04 或 22.04 LTS
- 内存:最低 4GB(多实例建议 8GB+)
- CPU:2+ 核心
- 磁盘:10GB+ 可用空间
步骤 1:安装依赖
sudo apt-get update
sudo apt-get install -y \
wget ca-certificates fonts-liberation \
libasound2 libatk-bridge2.0-0 libatk1.0-0 \
libcups2 libdbus-1-3 libdrm2 libgbm1 \
libgtk-3-0 libnspr4 libnss3 \
libxcomposite1 libxdamage1 libxrandr2 \
xdg-utils xvfb
步骤 2:设置虚拟显示
Xvfb :10 -screen 0 1920x1080x24 &
export DISPLAY=:10.0
持久化设置,创建 systemd 服务:
# /etc/systemd/system/xvfb.service
[Unit]
Description=X Virtual Frame Buffer
After=network.target
[Service]
ExecStart=/usr/bin/Xvfb :10 -screen 0 1920x1080x24
Restart=always
[Install]
WantedBy=multi-user.target
步骤 3:安装 BotBrowser
wget https://github.com/botswin/BotBrowser/releases/download/latest/botbrowser-linux.tar.gz
tar -xzf botbrowser-linux.tar.gz -C /opt/botbrowser/
chmod +x /opt/botbrowser/chrome
DISPLAY=:10.0 /opt/botbrowser/chrome --version
步骤 4:使用 Playwright 运行
npm install playwright-core
const { chromium } = require('playwright-core');
(async () => {
const browser = await chromium.launch({
executablePath: '/opt/botbrowser/chrome',
args: [
'--disable-setuid-sandbox',
'--bot-profile=/opt/profiles/profile.enc',
],
headless: true,
defaultViewport: null,
});
const page = await (await browser.newContext()).newPage();
await page.goto('https://example.com');
console.log('Title:', await page.title());
await browser.close();
})();
运行:DISPLAY=:10.0 node script.js
生产提示
进程管理。 使用 PM2 或 systemd 保持自动化运行:
npm install -g pm2
DISPLAY=:10.0 pm2 start script.js --name botbrowser-worker
多实例。 每个实例需要独立的 --user-data-dir:
for i in $(seq 1 5); do
DISPLAY=:10.0 /opt/botbrowser/chrome \
--bot-profile="/opt/profiles/profile-${i}.enc" \
--user-data-dir="/tmp/bb-session-${i}" &
done
故障排除
"Cannot open display":确保 Xvfb 正在运行且 DISPLAY=:10.0 已设置。
启动时段错误:运行 ldd /opt/botbrowser/chrome | grep "not found" 查找缺失的库。
内存使用高:设置 --js-flags="--max-old-space-size=512" 限制 JS 堆。
僵尸进程:始终调用 browser.close() 并处理 SIGTERM。
#headless#ubuntu#server#deployment#linux