Назад к блогу
Развертывание

Настройка headless-сервера для BotBrowser на Ubuntu

Полное руководство по настройке BotBrowser на headless-сервере Ubuntu для продакшен-автоматизации браузера.

Требования к серверу

  • ОС: Ubuntu 20.04 или 22.04 LTS
  • ОЗУ: минимум 4 ГБ (8 ГБ+ для нескольких экземпляров)
  • CPU: 2+ ядра
  • Диск: 10 ГБ+ свободного места

Шаг 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 установлен.

Segfault при запуске: выполните ldd /opt/botbrowser/chrome | grep "not found" для поиска отсутствующих библиотек.

Высокое потребление памяти: установите --js-flags="--max-old-space-size=512" для ограничения JS-кучи.

Зомби-процессы: всегда вызывайте browser.close() и обрабатывайте SIGTERM.

#headless#ubuntu#server#deployment#linux