Минимальный вынос сканера searchPublicPosts и визуализатора роста просмотров.
config/paths.js— читает.env, задаёт дефолтные пути (по умолчанию вdata/), прокидывает env переменные.data/— runtime данные: SQLite (data/db/public-search.sqlite),growth-sets.json, TDLibdata/tdlib/*, выгрузки ссылок, конфиг аккаунтов, ClickHousedata/clickhouse. В гите игнорируется.tdlib-helpers.js— обёртка вокругtdl(login, создание клиента, delay, ensureDirectories).scripts/:search-public-posts.js— сканерsearchPublicPostsс мультиаккаунтами, SQLite (public_search,channel_messages,runs), метрикиmessage_metricsв ClickHouse, сохранение ссылок.metrics-visualize.js— HTTP API + статика growth viewer/builder, сохранённые подборки вdata/growth-sets.json, метрики читаются из ClickHouse.init-accounts.js— создаёт конфиг аккаунтов для публичного поиска.
visualizer/— фронтенд growth builder/viewer (growth-builder/viewer.html|js|css, редиректgrowth.html).tmp/— резерв под временные файлы (если понадобится).
npm install
npm run public-search # запуск сканера (см. ENV ниже)
npm run visualize-growth # сервер growth viewer на PORT=3100 (по умолчанию)
npm run init-accounts # создать/перезаписать конфиг аккаунтов- Базовый каталог:
DATA_DIR(по умолчанию./data). - TDLib:
TELEGRAM_API_ID,TELEGRAM_API_HASH,TDLIB_PATH(опциональный путь к tdjson),TDLIB_DATABASE_DIR,TDLIB_FILES_DIR. - Публичный поиск:
PUBLIC_SEARCH_QUERY(по умолчаниюerid),PUBLIC_SEARCH_LIMIT,PUBLIC_SEARCH_DELAY_MS,PUBLIC_SEARCH_STAR_SPEND,PUBLIC_SEARCH_DB_PATH,PUBLIC_SEARCH_ACCOUNTS_CONFIG. - Визуализатор:
PORT(по умолчанию 3100),PUBLIC_SEARCH_DB_PATH,GROWTH_SETS_PATH. - ClickHouse (метрики):
CLICKHOUSE_URL(по умолчаниюhttp://localhost:8123),CLICKHOUSE_DATABASE,CLICKHOUSE_USER,CLICKHOUSE_PASSWORD,CLICKHOUSE_METRICS_TABLE,CLICKHOUSE_INSERT_CHUNK,CLICKHOUSE_READ_CHUNK,CLICKHOUSE_MINPOINTS_SCAN_LIMIT.
- Скопировать
.env.exampleв.env, вписать своиTELEGRAM_API_IDиTELEGRAM_API_HASH(остальное можно оставить по умолчанию). - Создать
data/public-search-accounts.json:npm run init-accounts -- --name acc --count 3. Скрипт добавит аккаунты (существующий файл не перезаписывается без--force), создаст отдельные каталоги для каждого (data/tdlib/<name>/database|files) и проведёт интерактивный логин (телефон/код/2FA), после логина проставитusernameв JSON. Флаг--skip-login— если нужно только сгенерировать конфиг. - Положить tdlib файлы в каталоги из
config/paths.jsили переопределитьTDLIB_*(по умолчаниюdata/tdlib/<name>/...для новых аккаунтов). npm run public-search— данные в SQLitedata/db/public-search.sqlite(файл ссылок не пишется по умолчанию, включить можно envPUBLIC_SEARCH_OUTPUT).npm run visualize-growthи открытьhttp://localhost:3100/growth-builder.html.
Пример юнита для сканера (/etc/systemd/system/erid-public-search.service):
[Unit]
Description=erid-parser public search
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/opt/erid-parser
EnvironmentFile=/opt/erid-parser/.env
ExecStart=/usr/bin/node scripts/search-public-posts.js
Restart=always
RestartSec=5
StandardOutput=append:/opt/erid-parser/logs/search.log
StandardError=append:/opt/erid-parser/logs/search.err.log
[Install]
WantedBy=multi-user.target
Визуализатор аналогично (ExecStart=/usr/bin/node scripts/metrics-visualize.js, можно добавить Environment=PORT=3100). Перед запуском sudo systemctl daemon-reload && sudo systemctl enable --now erid-public-search.service.