111 lines
4.9 KiB
Markdown
111 lines
4.9 KiB
Markdown
# 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` |
|
||
|
||
## Быстрый старт (для разработчика)
|
||
|
||
```bash
|
||
# 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` | Что сделано / что дальше |
|
||
|
||
## Тесты
|
||
|
||
```bash
|
||
cd /opt/morozovka-portal
|
||
bash tests/run_smoke.sh
|
||
```
|
||
|
||
**Ожидаемо:** `PASS: 94, FAIL: 0` (за 3 секунды). Скрипт создаёт изолированного `smoke_test_<ts>` пользователя, прогоняет все модули, чистит за собой.
|
||
|
||
## Лицензия
|
||
|
||
Внутренний проект команды morozovka-bridge. Не для распространения.
|