Мониторинг и сравнительная аналитика официальных соцсетей российских вузов.
M-Ranked собирает динамику публикаций вузов в Telegram, VK, MAX и Rutube, хранит наблюдения в PostgreSQL и показывает рейтинги, сравнения и историю.
Production-стек один:
- FastAPI в
api/— публичный и административный API; - платформенные Python-сборщики в
collector_target/иcollector_runtime/; - PostgreSQL 18 со схемой из
db/migrations/; - Next.js в
frontend/; - кэш ответов API: на одном сервере — в памяти процесса, в профиле двух
серверов — общий Redis; инвалидация через PostgreSQL
LISTEN/NOTIFY(ADR-011); - nginx в два слоя: кэш готовых страниц и шлюз рендера с пулами для людей и роботов (трафик и роботы).
Публичный адрес: m.funpin.org.
make venv
make stand # http://localhost:3000
make test # Python и frontendЛокальный стенд поднимает чистую PostgreSQL, FastAPI и Next.js. Демонстрационные
пароли лежат только в шаблоне infra/local/compose.env.example; собственный
файл можно указать через MRANKED_COMPOSE_ENV.
Сборщики запускаются отдельно:
.venv/bin/python -m collector_target --platform telegram
.venv/bin/python -m collector_target --platform vk
.venv/bin/python -m collector_target --platform max
.venv/bin/python -m collector_target --platform rutube.venv/bin/python -m pytest tests anomaly_analysis -q;cd frontend && pnpm check;- чистый bootstrap:
docker compose --env-file infra/local/compose.env.example -f infra/compose.yaml up -d --wait postgres.
Интеграционные PostgreSQL-тесты требуют DSN из .env.test; без них они
пропускаются. API-контракт зафиксирован в
contracts/openapi/m-ranked-v1.yaml и проверяется как Python-, так и
frontend-тестами.