Развертывание

Настройка headless-браузера BotBrowser на Ubuntu

Как настроить автоматизацию headless-браузера на Ubuntu с Xvfb, системными зависимостями, systemd-сервисами и конфигурацией для продакшена.

Документация

Нужна поддерживаемая продуктовая документация?

У этой статьи есть соответствующая страница в центре документации. Используйте docs для каноничного сценария настройки, актуальных флагов и долгосрочной справки.

Производственная основа

Запуск BotBrowser на headless-сервере Ubuntu - основа большинства производственных развертываний. Серверы не имеют физических дисплеев, графические драйверы отличаются от настольных систем, а минимальные образы не содержат все нужные библиотеки. Зафиксированная конфигурация хоста помогает получать стабильный результат и упрощает сопровождение.

Ниже описаны системные зависимости, выбор Xvfb, службы systemd и запуск BotBrowser с Playwright или Puppeteer.

Зачем нужна настройка headless-сервера

Десктопные среды автоматически предоставляют многие графические и системные зависимости. В минимальной установке Ubuntu Server необходимые библиотеки, шрифты и выбранный графический путь приходится настраивать явно. Xvfb остается полезным вариантом для сценариев, которым нужен X11-дисплей, но современный headless-режим следует сначала проверять без него.

Неполная настройка может вызвать явную ошибку «cannot open display», пустые снимки, отсутствующие символы или нестабильное воспроизведение медиа. Считайте такие результаты блокирующими для выпуска и исправьте конфигурацию хоста до промышленного запуска.

Переменная DISPLAY нужна только при использовании Xvfb или другого X11-сервера. Начните с поддерживаемого headless-режима и системных зависимостей. Добавляйте виртуальный дисплей, если этого требует приложение, графический backend или воспроизводимый эталон развертывания.

Требования к дисплею и системе

Xvfb (X Virtual Frame Buffer)

Xvfb предоставляет виртуальный сервер дисплея, реализующий протокол X11 без физического оборудования. BotBrowser подключается к Xvfb и корректно завершает инициализацию графики.

Ключевые параметры настройки:

  • Номер дисплея (:10): произвольный идентификатор. Использование :10 позволяет избежать конфликтов с :0, который может использоваться десктопными установками.
  • Спецификация экрана (1920x1080x24): ширина, высота и глубина цвета. Выберите параметры, соответствующие приложению и эталону развертывания.
  • Переменная окружения DISPLAY (DISPLAY=:10.0): передается процессам, которые используют выбранный Xvfb-дисплей, включая службы и скрипты Node.js.

Системные зависимости браузера

BotBrowser использует общие библиотеки для отображения, аудио, сети и доступности. В настольной установке Ubuntu большинство из них уже присутствует. В минимальном серверном образе их необходимо установить явно.

Критические категории:

  • Графика: libdrm2, libgbm1, libxcomposite1, libxdamage1, libxrandr2 для композитинга дисплея
  • Инструментарий UI: libgtk-3-0, libatk-bridge2.0-0, libatk1.0-0 для доступности и рендеринга виджетов
  • Безопасность: libnss3, libnspr4 для TLS и обработки сертификатов
  • Аудио: libasound2 для инициализации аудиоподсистемы (даже без воспроизведения аудио)
  • Шрифты: fonts-liberation для базовой доступности шрифтов
  • Интеграция с рабочим столом: xdg-utils для обработки MIME-типов

<svg viewBox="0 0 700 300" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="headless-ru-title headless-ru-desc" style={{maxWidth: '100%', height: 'auto'}}>

Развертывание на сервере без интерфейса BotBrowser работает с виртуальным дисплеем и необходимыми системными библиотеками Linux. Архитектура headless-сервера BotBrowser Браузер и профиль Режим headless Xvfb :10 Виртуальный дисплей 1920x1080x24 Системные библиотеки GTK, NSS, GBM Шрифты, аудио Ubuntu 22.04 LTS (Headless) DISPLAY=:10.0 задан в окружении

Частые ошибки настройки

Запуск без Xvfb

Современный headless-режим может работать без Xvfb. Это обычно наиболее простая конфигурация для контейнеров и серверных задач. Проверьте навигацию, шрифты, снимки экрана и графические функции на целевом образе Ubuntu.

Если рабочий сценарий зависит от X11 или ранее был аттестован с виртуальным дисплеем, используйте Xvfb как часть зафиксированной конфигурации. Не добавляйте его автоматически: сравните оба поддерживаемых пути и выберите тот, который соответствует требованиям приложения.

Отсутствующие пакеты шрифтов

Ubuntu Server поставляется с минимальной поддержкой шрифтов. Установите документированные пакеты, затем проверьте рабочие страницы на отсутствующие символы, обрезанные подписи, переносы строк и разбивку документов на страницы. Сохраните утвержденный набор пакетов в серверном образе.

Некорректная глубина дисплея

При использовании Xvfb задайте глубину цвета, которую ожидает ваше приложение и эталон развертывания. Для обычных современных веб-интерфейсов разумной отправной точкой служит 24-битный режим. После изменения параметров повторите визуальные и функциональные проверки.

Запуск от root без флагов sandbox

Sandbox BotBrowser требует определённых возможностей ядра. В Docker-контейнере или при запуске от root настройте разрешения и sandbox по руководству по развертыванию.

Поведение выпуска

BotBrowser поддерживает серверные развертывания без физического дисплея. Профиль сохраняет выбранное семейство платформы, а хост предоставляет системные библиотеки и графический путь.

Оборудование и программная среда хоста все равно требуют проверки. Сравнивайте результат на целевом сервере с утвержденным эталоном выпуска и повторяйте эту проверку после обновлений системных библиотек, графического стека или BotBrowser.

Сервер должен предоставлять системные библиотеки и поддерживаемый графический путь, необходимые целевому сценарию. Работающий X11-сервер требуется только для конфигурации, которая действительно использует X11.

Установка и запуск

Шаг 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

Для Ubuntu 24.04 некоторые имена пакетов изменились. При возникновении ошибок выполните:

sudo apt-get install -y \
  libasound2t64 libatk-bridge2.0-0 libatk1.0-0 \
  libcups2t64 libgbm1 libgtk-3-0t64 \
  libnss3 libxcomposite1 libxdamage1 \
  libxrandr2 xvfb fonts-liberation xdg-utils

Шаг 2: Запуск Xvfb

Для быстрого тестирования:

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]
Type=simple
ExecStart=/usr/bin/Xvfb :10 -screen 0 1920x1080x24
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Включите и запустите сервис:

sudo systemctl daemon-reload
sudo systemctl enable xvfb
sudo systemctl start xvfb

Шаг 3: Установка BotBrowser

# Замените маркеры соответствующим Linux-архивом со страницы релизов
curl -fL -o botbrowser.tar.gz \
  "https://github.com/botswin/BotBrowser/releases/download/<release-tag>/<linux-archive>"

# Распакуйте в /opt
sudo mkdir -p /opt/botbrowser
sudo tar -xzf botbrowser.tar.gz -C /opt/botbrowser/
sudo chmod +x /opt/botbrowser/chrome

# Проверьте установку
DISPLAY=:10.0 /opt/botbrowser/chrome --version

Шаг 4: Загрузка профилей

sudo mkdir -p /opt/botbrowser/profiles
sudo install -m 600 /путь/к/<совместимому-профилю>.enc \
  /opt/botbrowser/profiles/profile.enc

Шаг 5: Тестовый запуск

Используйте минимальную задачу Playwright из шага 6 для проверки полного пути запуска. Выполняйте ее от имени сервисной учетной записи, с рабочим профилем, каталогом и графическим путем. Добавляйте DISPLAY=:10.0 только для конфигурации Xvfb. Проверка должна открыть разрешенную страницу, выполнить небольшое действие и корректно завершиться.

Шаг 6: Интеграция с 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/botbrowser/profiles/profile.enc',
      '--proxy-server=socks5://user:pass@proxy.example.com:1080',
    ],
    headless: true,
  });

  const context = await browser.newContext();
  const page = await context.newPage();
  await page.goto('https://example.com');
  console.log('Title:', await page.title());
  await browser.close();
})();

Запустите с переменной дисплея:

DISPLAY=:10.0 node script.js

Шаг 7: Systemd-сервис для автоматизации

Для постоянных воркеров автоматизации:

# /etc/systemd/system/botbrowser-worker.service
[Unit]
Description=BotBrowser Automation Worker
After=xvfb.service
Requires=xvfb.service

[Service]
Type=simple
Environment=DISPLAY=:10.0
WorkingDirectory=/opt/scripts
ExecStart=/usr/bin/node /opt/scripts/worker.js
Restart=always
RestartSec=10
User=botbrowser
Group=botbrowser

[Install]
WantedBy=multi-user.target

Одна рабочая нагрузка на сервис

Каждая служба должна отвечать за одну определенную нагрузку и один каталог данных. Приложение управляет запуском и остановкой браузера, чтобы супервизор получал однозначный статус процесса. Журналы, ограничения ресурсов и правила перезапуска тогда относятся к конкретной нагрузке.

Создавайте отдельные службы для приложений с разными графиками выпуска, графическими требованиями или границами доступа. Не запускайте несколько профилей из цикла shell. Такой цикл скрывает источник сбоя и может оставить дочерние процессы после завершения родительского процесса.

Настройте задержку между попытками и предел запусков. Недействительный профиль или поврежденный образ не должны создавать бесконечный цикл перезапуска. Состояние ошибки должно оставаться видимым до исправления конфигурации.

Проверка

После завершения настройки проверьте, что всё работает:

# Проверьте, что Xvfb запущен
systemctl status xvfb

# Проверьте доступность дисплея
DISPLAY=:10.0 xdpyinfo | head -5

# Проверьте, что зависимости BotBrowser удовлетворены
ldd /opt/botbrowser/chrome | grep "not found"

# Запустите браузер и проверьте навигацию
DISPLAY=:10.0 node -e "
const { chromium } = require('playwright-core');
(async () => {
  const b = await chromium.launch({
    executablePath: '/opt/botbrowser/chrome',
    args: ['--bot-profile=/opt/botbrowser/profiles/profile.enc'],
    headless: true,
  });
  const p = await (await b.newContext()).newPage();
  await p.goto('https://example.com');
  console.log('Navigation completed:', await p.title());
  await b.close();
})();
"

Браузер должен запуститься без видимого окна с подсказкой, завершить навигацию и корректно закрыться. Сохраняйте вывод терминала и код завершения вместе с журналами развертывания.

Готовность сервиса и контроль состояния

Определяйте готовность по результату рабочей нагрузки, а не только по наличию процесса. Полезная стартовая проверка подтверждает принятие конфигурации, создание сессии, открытие разрешенной страницы и выполнение небольшого действия приложения. При сбое любого этапа проверка должна завершаться быстро.

Отделите проверку от клиентского трафика. Используйте специальную тестовую учетную запись или публичную страницу без персональных данных. Результат должен отвечать, может ли приложение запуститься, выполнить переход и корректно закрыться.

Разделяйте готовность при запуске и постоянное состояние. Постоянный контроль включает движение очереди, недавнее завершение задач, код выхода, свободное место, давление памяти и состояние дисплейной службы. Живой процесс не гарантирует, что приложение продолжает работу.

Выберите срок проверки по обычной продолжительности задачи. Повторяющиеся тайм-ауты считайте отказом сервиса и сохраняйте последний завершенный этап. Слишком частые проверки не должны конкурировать с основной нагрузкой.

После сбоя исключите рабочий узел из новых назначений до перезапуска. Зафиксируйте прерванную задачу, остановите службу и верните каталог данных в утвержденное состояние. Повторная попытка не должна использовать поврежденные данные.

Журналы и восстановление

Направляйте вывод приложения и браузера в принятую систему журналов. Указывайте ревизию службы, выпуск BotBrowser, версию профиля, образ сервера и идентификатор задачи. Не сохраняйте содержимое страниц, учетные данные, секреты прокси и клиентские записи.

Настройте ротацию журналов и диагностических артефактов до заполнения диска. Храните достаточно истории для сравнения кандидата с последним утвержденным выпуском, затем применяйте обычную политику хранения и приватности.

Разделяйте сбои по необходимому действию. Ошибка конфигурации требует исправления службы или профиля. Ошибка зависимости требует нового образа. Нехватка ресурсов требует пересмотра нагрузки или емкости. Сбой приложения передается владельцу приложения.

Проверьте восстановление в тестовой среде. Остановите службу во время разрешенной задачи, перезагрузите хост и временно сделайте зависимость недоступной. Мониторинг должен указать правильную службу, а супервизор обязан соблюдать предел перезапусков и вернуть узел в утвержденное состояние.

Контроль изменений серверного образа

Считайте образ системы, выпуск браузера, пакет профиля, службу и приложение одной зарегистрированной комбинацией. Изменение любого слоя может повлиять на запуск, отображение, медиа или расход ресурсов.

Проводите системные обновления через тот же тестовый путь, что и изменения приложения. Языковые пакеты, графические библиотеки, среда контейнеров и политики безопасности должны проходить репрезентативную задачу.

Продвигайте небольшие группы изменений. Сохраняйте предыдущую комбинацию и порядок отката. Откат должен восстанавливать полностью утвержденный набор, а не соединять старый браузер с непроверенным профилем или сервисом.

После развертывания наблюдайте завершение задач, частоту перезапусков, рост диска и давление ресурсов. Кандидат, который запускается, но ухудшается при обычной работе, должен быть исключен из пула до расширения развертывания.

Запишите владельца и источник каждой части комбинации. Образ поддерживает инфраструктура, профиль имеет собственный цикл выпуска, а приложение отвечает за рабочую задачу. При сбое оператор должен сразу понимать, кому передать результат и какую утвержденную версию можно восстановить.

Проверяйте права сервисной учетной записи после изменения образа. Она должна читать нужные файлы, писать только в рабочие каталоги и запускать требуемые зависимости. Интерактивный запуск от администратора не подтверждает, что служба получит те же разрешения после перезагрузки.

Контролируйте остановку так же внимательно, как запуск. Служба должна прекратить прием новых задач, завершить или отметить текущую задачу, закрыть браузер и вернуть код состояния. Принудительное завершение допустимо после срока ожидания, но событие должно быть видно в журнале.

Для контейнерной среды фиксируйте лимиты памяти, размер общего пространства, подключенные каталоги и политику завершения. Кандидат проверяется с теми же ограничениями, которые получит в рабочей среде. Запуск без лимитов на отдельном сервере не заменяет эту проверку.

Откат также проходит короткую проверку. После возврата предыдущего образа выполните утвержденную задачу и подтвердите восстановление очереди. Это исключает ситуацию, когда версия формально возвращена, но служба использует оставшийся файл кандидата.

Плановое обслуживание должно учитывать активные задачи. Сначала остановите прием новой работы, дождитесь безопасной точки завершения и только затем останавливайте службу. После обновления откройте прием задач после короткой проверки, а не сразу после появления процесса.

Согласуйте оповещения с владельцами приложения и инфраструктуры. Повторный выход, отсутствие завершенных задач, заполнение диска и недоступность требуемого дисплея требуют разных действий. Уведомление должно содержать комбинацию выпуска и последний успешный этап, но не содержимое страницы.

Периодически проверяйте, что инструкция восстановления соответствует текущему сервису. Устаревшая команда, удаленный каталог или измененный пользователь могут сделать план отката бесполезным. Проверка в тестовой среде поддерживает процедуру в рабочем состоянии.

Результат такой проверки храните рядом с описанием образа. Укажите дату, владельца, использованную рабочую задачу и подтвержденный путь возврата. Следующий оператор сможет выполнить тот же порядок без догадок.

После проверки удалите временные материалы по правилам среды и верните сервис к обычной очереди. Запись выпуска сохраняет итог, а не рабочее содержимое тестовой сессии.

Запуск headless и проверка профиля

BotBrowser 150.0.7871.46 не открывает видимое окно для сообщений о профиле при запуске headless. Отсутствующий, недействительный, просроченный или несовместимый с версией пакет отмечается в выводе терминала, после чего процесс следует обычному пути отказа запуска. Запуск с интерфейсом сохраняет видимые подсказки для пользователя.

Процессы Playwright, службы systemd и контейнеры должны сохранять stdout, stderr и код завершения. Проверяйте пакет профиля до создания первой страницы. Исправный сервис должен создать сессию, выполнить утвержденную короткую задачу и корректно закрыться.

При параллельной нагрузке запускайте рабочие процессы партиями и закрывайте страницы, контексты и процессы после каждой задачи. Выделяйте память, /dev/shm и файловые дескрипторы с учетом реальных страниц. Одно количество процессов не отражает потребление рабочей нагрузки.

Правила эксплуатации

Задавайте DISPLAY только для конфигурации с Xvfb. Храните значение в файле сервиса рядом с настройками виртуального дисплея. Для запуска без X11 эта переменная не требуется.

Фиксируйте глубину цвета Xvfb. Для современных веб-интерфейсов обычно начинают с 24-битного режима и подтверждают его визуальной проверкой.

Мониторьте использование диска. BotBrowser записывает дампы сбоев и данные кеша в --user-data-dir. Настройте ротацию логов или периодическую очистку для предотвращения исчерпания диска.

Поддерживайте зависимости актуальными. Периодически запускайте apt-get upgrade. Несоответствие версий библиотек может вызвать незаметные проблемы рендеринга.

Установите ограничения ресурсов. Используйте MemoryLimit и CPUQuota systemd для предотвращения потребления всех ресурсов сервера вышедшими из-под контроля экземплярами.

Утверждение выпуска

Утверждайте серверный образ и выпуск BotBrowser как одну комбинацию. Запишите версии Ubuntu, BotBrowser, пакета профиля, графический путь, выбор Xvfb, службу и приложение. Выполните рабочую задачу после холодного старта, перезапуска службы и перезагрузки хоста.

Проверьте обычную страницу, страницу с большим объемом текста, снимок или документ, а также используемые продуктом медиа. Повышайте параллелизм постепенно и сохраняйте запас для системы. Убедитесь, что супервизор регистрирует контролируемый сбой и возвращает рабочий процесс в известное состояние. Продвигайте образ только после проверки каждого целевого класса хостов.

Часто задаваемые вопросы

Работает ли BotBrowser на Ubuntu 24.04?

Да. Некоторые имена пакетов изменились (например, libasound2 стал libasound2t64). Альтернативная команда установки в шаге 1 учитывает эти изменения.

Можно ли использовать более высокое разрешение Xvfb?

Да. Вы можете установить Xvfb :10 -screen 0 2560x1440x24 или любое необходимое разрешение. Сопоставьте его с разрешением экрана профиля для лучших результатов.

Нужен ли GPU на сервере?

Не всегда. Многие headless-сценарии работают без физического GPU, но графический backend хоста влияет на доступные функции и производительность. Выберите поддерживаемый backend и проверьте целевой сценарий на каждом типе сервера.

Почему бы просто не использовать --headless=new без Xvfb?

Начните с --headless=new без Xvfb. Если приложение требует X11, выбранный графический backend не инициализируется или эталон развертывания включает виртуальный дисплей, добавьте Xvfb и повторите проверку. Решение должно опираться на наблюдаемое поведение целевой нагрузки.

Почему при ошибке headless-запуска не появляется окно?

В режиме headless сообщения запуска записываются в терминал вместо открытия окна. Сохраните этот вывод в журнале рабочего процесса и исправьте профиль или хост до повторной попытки.

Сколько экземпляров можно запустить на одном сервере?

Зависит от страниц, графического пути и ресурсов сервера. Измерьте память на репрезентативном сценарии, оставьте запас для ОС и вспомогательных служб, затем повышайте параллелизм поэтапно. При устойчивом использовании swap снизьте число одновременных экземпляров.

Как проверить отсутствующие библиотеки?

Выполните ldd /opt/botbrowser/chrome | grep "not found". Все библиотеки, указанные как «not found», необходимо установить. Используйте apt-file search libname.so для нахождения пакета, предоставляющего конкретную библиотеку.

Можно ли запустить BotBrowser на Ubuntu-серверах с архитектурой ARM?

BotBrowser предоставляет сборки Linux для x86_64. Поддержка ARM зависит от конкретного релиза. Проверьте страницу релизов GitHub на предмет доступных архитектур.

Как обновить BotBrowser?

Подготовьте новый выпуск вместе с соответствующим пакетом профиля. До развертывания повторно проверьте службу, зависимости, графический путь и репрезентативную нагрузку. Сохраняйте предыдущую утвержденную комбинацию до завершения обычного периода наблюдения.

Решение о развертывании

Настройка BotBrowser на headless-сервере Ubuntu начинается с системных зависимостей, отдельного каталога данных и проверки поддерживаемого графического пути. Xvfb добавляется только там, где нужен X11 или такой путь закреплен в эталоне. Допустимый параллелизм определяйте измерениями памяти, процессора, /dev/shm и файловых дескрипторов на реальной нагрузке.

Для контейнерных сред смотрите развертывание в Docker. Планирование нагрузки описано в руководстве по производительности, а сочетания параметров запуска собраны в рецептах командной строки.

#headless#Ubuntu#сервер#развертывание#Linux

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.