Go-порт FlareSolverr с совместимыми endpoint'ами /, /health, /v1 и встроенным web UI для управления настройками.
sessions.createsessions.listsessions.destroyrequest.getrequest.post- постоянные browser-сессии
- cookies, screenshot,
waitInSeconds,disableMedia,tabs_till_verify - браузерный слой полностью на Go
- при наличии
chromedriverпо умолчанию используется WebDriver backend с patchedchromedriver - если
chromedriverне найден, проект пытается автоматически скачать matching driver через Chrome for Testing - если авто-скачивание недоступно, проект откатывается к
chromedp - proxy auth через DevTools
Fetch.authRequired, без Python helper-а - Prometheus exporter на отдельном порту и Go-плагины
logger,error,prometheus - web UI на
/settingsи JSON API на/api/settings - сохранение
init.yamlиз UI с атомарной записью на диск - live-apply настроек для новых запросов и новых browser-session без перезапуска процесса
- hot-reload Prometheus exporter при смене
prometheus_enabled/prometheus_port
- HTTP API, session/storage и browser runtime реализованы на Go
- основной код модуля находится в каталоге
server/ - browser runtime разнесён по
server/browser/chromedpиserver/browser/webdriver, общий слой лежит вserver/browser - основной runtime: Chrome/Chromium + patched
chromedriverчерез WebDriver - если системного
chromedriverнет, драйвер подбирается по версии локального Chrome и кэшируется локально - fallback runtime:
chromedp, еслиchromedriverнедоступен и auto-download не сработал - на Linux при
HEADLESS=trueиспользуется скрытый headful-режим черезDISPLAYилиXvfb, иначе проект откатывается к обычному Chrome headless
- Go
1.26+ - установленный Chrome/Chromium
- установленный
chromedriverнеобязателен Xvfbопционально для LinuxHEADLESS=true, если нет активногоDISPLAY
Запуск сервера:
go run ./cmd/flaresolverrПосле старта доступны:
- API index:
http://127.0.0.1:8191/ - healthcheck:
http://127.0.0.1:8191/health - совместимый API:
http://127.0.0.1:8191/v1 - web UI настроек:
http://127.0.0.1:8191/settings
Пример запроса:
curl -sS -X POST http://127.0.0.1:8191/v1 \
-H 'Content-Type: application/json' \
--data '{"cmd":"request.get","url":"https://example.com","maxTimeout":60000}'Пример чтения текущих настроек:
curl -sS http://127.0.0.1:8191/api/settingsПрограмма читает init.yaml:
- сначала из текущей рабочей директории
- если там файла нет, рядом с бинарником
Приоритет настроек:
- встроенные defaults
init.yaml- переменные окружения
- CLI flags
Если init.yaml отсутствует, битый или содержит неверный YAML, программа не падает. Файл будет проигнорирован, а предупреждение уйдёт в лог при старте.
В репозитории лежит пример/дефолтный файл init.yaml.
Страница /settings позволяет:
- просмотреть текущую runtime-конфигурацию
- изменить параметры и сохранить их в
init.yaml - сразу применить новые настройки для новых запросов
- перезапустить Prometheus exporter на новом порту без рестарта процесса
Что применяется сразу после сохранения:
- browser/runtime-настройки для новых ephemeral browser и новых
sessions.create default proxy- уровень логирования
- настройки
disable_media,headless,driver_*,chrome_for_testing_url prometheus_enabledиprometheus_port
Что требует рестарта основного процесса:
hostport
При сохранении через UI существующие browser-session закрываются специально, чтобы новые настройки гарантированно начали использоваться для следующих запросов.
Важно: при следующем старте процесса приоритет конфигурации не меняется. Если HOST, PORT, HEADLESS, LOG_LEVEL или другие значения заданы через environment / CLI flags, они снова перекроют сохранённый init.yaml.
HOST,PORTBROWSER_PATHDRIVER_PATHDRIVER_AUTO_DOWNLOADDRIVER_CACHE_DIRCHROME_FOR_TESTING_URLHEADLESSDISABLE_MEDIALOG_HTMLPROMETHEUS_ENABLEDPROMETHEUS_PORTPROXY_URL,PROXY_USERNAME,PROXY_PASSWORDLOG_LEVEL
У web UI и /api/settings сейчас нет встроенной аутентификации.
Если сервис доступен не только локально:
- не публикуй
/settingsи/api/settingsнапрямую в интернет - ограничивай доступ firewall'ом, reverse proxy ACL или VPN
- при необходимости выноси UI только на внутренний интерфейс
Скрипт build_all.sh собирает бинарники для поддерживаемых платформ в каталог ./Dist:
./build_all.shТекущая матрица:
linux:amd64,arm64,arm,386darwin:amd64,arm64windows:amd64,arm64,386freebsd:amd64,arm64
Готовый unit лежит в flaresolverr-go.service.
Для серверов без реального дисплея предпочтителен именно внешний xvfb-run, а не внутренний автозапуск Xvfb внутри процесса. Это ближе к Linux-режиму original FlareSolverr и обычно стабильнее на сложных Cloudflare challenge.
Ожидаемая раскладка на сервере:
- бинарник:
/opt/flaresolverr-go/flaresolverr - конфиг:
/opt/flaresolverr-go/init.yaml - рабочий каталог:
/opt/flaresolverr-go - данные Chrome/XDG:
/var/lib/flaresolverr - пользователь:
flaresolverr Xvfbдолжен быть установлен в/usr/bin/xvfb-run
Минимальная установка:
sudo useradd --system --home /var/lib/flaresolverr --shell /usr/sbin/nologin flaresolverr
sudo mkdir -p /opt/flaresolverr-go /var/lib/flaresolverr
sudo chown -R flaresolverr:flaresolverr /var/lib/flaresolverr
sudo cp ./Dist/flaresolverr-linux-amd64 /opt/flaresolverr-go/flaresolverr
sudo cp ./init.yaml /opt/flaresolverr-go/init.yaml
sudo chmod +x /opt/flaresolverr-go/flaresolverr
sudo cp ./flaresolverr-go.service /etc/systemd/system/flaresolverr-go.service
sudo systemctl daemon-reload
sudo systemctl enable --now flaresolverr-goПроверка:
curl -sS http://127.0.0.1:8191/health
sudo systemctl status flaresolverr-goВ этом unit переменные HOST / PORT / HEADLESS / LOG_LEVEL не заданы специально, чтобы их задавал init.yaml. Если нужно переопределение через systemd, добавляй отдельные Environment= строки осознанно: они имеют более высокий приоритет, чем файл.