4.9 KiB
4.9 KiB
Morozovka Platform
Единая платформа команды Никиты Сергеевича Морозова (30+ человек). Развёрнута на базе Gitea + собственный Flask-портал. Заменяет ручное управление расписанием, каталог проектов, файлохранилище, мастер-классы.
Что внутри
- Расписание с публичной страницей
/schedule, статусом-баннером, ICS-экспортом и rule-based ассистентом - Проекты с канбан-досками, granular-правами участников, интеграцией с Gitea
- Мастер-классы с регистрацией, посещаемостью, материалами
- Файлохранилище v2.0 — пространства → папки → файлы с версиями и ACL
- Общая лента
/feedиз всех проектов и МК - Дашборд участника
- Онбординг-тур для новичков
- Уведомления-колокольчик на всех страницах
Стек
| Слой | Технология |
|---|---|
| Backend | Python 3.11, Flask 3.1, SQLModel, Gunicorn |
| БД | PostgreSQL 15 |
| Миграции | Alembic |
| Reverse proxy | Nginx (внешний + внутренний) |
| Git/SSO | Gitea 1.22 |
| VPN | OpenVPN + socat (Малина) |
| Frontend | Jinja2 + vanilla JS + общий main.css |
Быстрый старт (для разработчика)
# 1. Клон репозитория
cd /opt
git clone http://192.168.50.3:3000/git_admin/morozovka-portal.git
cd morozovka-portal
# 2. venv + зависимости
python3 -m venv venv
./venv/bin/pip install -r requirements.txt
# 3. .env (см. INSTALL.md)
cp .env.example .env
nano .env
# 4. Миграции
export PATH=./venv/bin:$PATH
alembic upgrade head
# 5. Запуск (dev)
./venv/bin/flask --app app.main run --host 0.0.0.0 --port 8000
# 6. Тесты
bash tests/run_smoke.sh
Структура проекта
/opt/morozovka-portal/
├── app/
│ ├── main.py — Flask app, регистрация модулей, healthz
│ ├── config.py — все настройки (env + .env через python-dotenv)
│ ├── db.py — SQLAlchemy engine
│ ├── models.py — SQLModel: 27 таблиц
│ ├── helpers.py — общие фильтры, декораторы, permissions, email, upload
│ ├── auth.py — Gitea OAuth
│ ├── assistant.py — rule-based ассистент (regex)
│ ├── llm_assistant.py — LLM-ассистент (готов, но выключен)
│ ├── gitea_api.py — Gitea API client с in-memory кэшем
│ ├── google_sync.py — Google Calendar → Event (cron 15 мин)
│ ├── modules/ — 11 модулей роутов (register(app))
│ ├── static/
│ │ ├── main.css — общие стили (~38 КБ)
│ │ └── notif_bell.js — колокольчик уведомлений
│ └── templates/ — 26 Jinja2-шаблонов (25 extends base.html)
├── alembic/ — миграции (4 ревизии)
├── tests/
│ ├── run_smoke.sh — 94 автотеста без GUI
│ └── last_run.log — последний прогон
├── docs/ — документация (эта папка)
├── requirements.txt
└── .env — секреты (не коммитить!)
Документация
| Файл | О чём |
|---|---|
docs/INSTALL.md |
Установка с нуля |
docs/ARCHITECTURE.md |
Архитектура, модули, роли, фичи |
docs/API.md |
Все роуты (HTTP endpoints + JSON API) |
docs/DATABASE.md |
Схема БД, 27 таблиц, миграции |
docs/OPERATIONS.md |
Эксплуатация: логи, бэкапы, troubleshooting |
docs/USER_GUIDE.md |
Гайд для пользователей |
docs/SECURITY.md |
Что есть / чего нет / план |
docs/ROADMAP.md |
Что сделано / что дальше |
Тесты
cd /opt/morozovka-portal
bash tests/run_smoke.sh
Ожидаемо: PASS: 94, FAIL: 0 (за 3 секунды). Скрипт создаёт изолированного smoke_test_<ts> пользователя, прогоняет все модули, чистит за собой.
Лицензия
Внутренний проект команды morozovka-bridge. Не для распространения.