Об этом проекте
OpenAnalytics — это открытый продукт веб‑аналитики, поставляемый как pnpm‑монрепо, выпущенный под лицензией AGPL-3.0 и предназначенный для самостоятельного размещения на собственном оборудовании. Его заявленная конструкция — privacy‑first, cookieless измерение с чтением только агрегированных данных: нет cookie, нет отслеживания по отпечатку, нет межсайтовых идентификаторов, а сырые IP‑адреса никогда не сохраняются. Идентичность посетителя представляет собой солёный хеш, который ротируется каждую ночь, поэтому след посетителя равен длине визита и никогда не равен длине личности. Сигналы Do Not Track и Global Privacy Control соблюдаются на коллекторе до записи чего‑либо, а геолокация на уровне города является opt‑in на сайт и разрешается против базы данных на хосте, так что никакой запрос не покидает машину. Хостинговый экземпляр, управляемый авторами, запускает тот же код по адресу getopen.so.
Монрепо делит продукт на отдельные приложения: небольшой фрагмент трекера для браузера, чей байтовый бюджет контролируется CI; коллектор, который валидирует, санитизирует, ограничивает скорость и ставит в очередь; воркер, который опустошает очередь в ClickHouse и обрабатывает сеансы, агрегаты, экспорт, почту и удаления; плоскость управления API, охватывающая аутентификацию, сайты, ключи, совместный доступ, определения событий, воронки, виджеты, доход, AI‑ассистент и сервер MCP; шлюз запросов — единственный процесс, допущенный к чтению ClickHouse, который также проверяет подписанные Ed25519 конверты запросов; приложение реального времени, предоставляющее поток SSE за живой панелью управления; панель управления на Next.js; и CLI `oa` для настройки сайта, статистики и входа по device‑flow. Общие пакеты покрывают доменную логику, схемы Postgres и ClickHouse с миграциями, Redis/Valkey, аутентификацию, контракты OpenAPI, наблюдаемость и интеграции.
Хранилище разделено тремя способами: Postgres — для плоскости управления, ClickHouse — для событий и агрегатов, и два экземпляра Valkey — один надёжный очереди событий и один одноразовый кэш реального времени. Заявленная функциональность включает просмотры страниц, пользовательские и событий, driven by attributes, сеансы, веб‑метрики, воронки, удержание на сайт, встраиваемые виджеты, публичные ссылки для совместного использования, аналитику дохода из собственного аккаунта Stripe, импорт и экспорт CSV/JSON, сервер MCP и CLI. Панель управления также показывает список посетителей в реальном времени, взятый из кэша присутствия, маршруты посетителей и необязательный живой глобус с городскими локациями.
Несколько архитектурных правил обеспечиваются CI, а не соглашением: веб‑приложение может импортировать только общий пакет контрактов, при этом документ OpenAPI является единственным швом между фронтендом и бэкендом; ClickHouse доступен только через шлюз запросов; изменение, превышающее бюджет размера трекера, приводит к падению сборки; и задача CI проверяет на реальной базе данных, что схема Postgres не содержит таблиц биллинга.
Самостоятельное размещение описано в SELF-HOSTING.md, используя генератор скрипта и одну команду `docker compose up -d` с автоматическим TLS. Требуется хост под Linux с Docker, четыре DNS‑записи (поддомены app, api, c и rt), примерно 4 ГБ ОЗУ и 25 ГБ свободного места на диске. Релизы публикуют десять образов в ghcr.io, поэтому установка — это pull, а не сборка; для хостов arm64 или веток сборки образы компилируются локально. Скрипт `upgrade.sh` переходит между релизами и делает снимок, необходимый `rollback.sh`, поскольку миграции необратимы, а документированный путь назад — восстановление. Запуск из исходников требует сборки перед запуском скомпилированных миграций. Только AI‑ассистент и объектное хранилище являются опциональными; при их отключении соответствующие поверхности сами себя деактивируют. Набор тестов и проверок в стиле CI запускается без инфраструктуры.
Геоданные не включены в поставку (в README указано, что это загрузка около 60 МБ, которая устаревает в течение месяца); вспомогательный скрипт скачивает базу DB‑IP, распространяемую под лицензией CC BY 4.0. Вклад в проект осуществляется через pull‑requests, которые сливаются непосредственно в этот репозиторий, с одноразовым CLA, оставляющим авторские права у участника. Код распространяется под лицензией AGPL-3.0, о чём README отмечает, что любой, кто запускает модифицированную версию как сетевой сервис, обязан предоставить изменённый исходный код своим пользователям; название проекта и домен хостинг‑сервиса не входят в предоставление лицензии.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.