Об этом проекте
## Позиционирование проекта
«Мэнъя» (Mengya) — проект локального традиционного прямого развёртывания платформы контента о материнском и детском здоровье и уходе за детьми, ориентированный на локальную отладку разработчиками, разработку с горячей перезагрузкой исходного кода и развёртывание на лёгких хостах без среды Docker. В репозитории также предоставляется братский проект с версией для Docker.
## Особенности архитектуры
- **Монолитное интегрированное обслуживание**: производственная сборка фронтенда объединяется в каталоги templates и static Django, единый процесс Python централизованно обслуживает страницы SPA, статические ресурсы и серверный API; в рабочей среде не требуется постоянно работающий сервис Node.js.
- **Хранение данных**: локальный SQLite3 (backend/db.sqlite3), поддерживается автоматическая миграция.
- **Технологический стек**: Python 3.10+, Django + DRF, React + Vite (Node.js 18+ требуется только при вторичной разработке фронтенда).
- **Безопасная изоляция**: фронтенд и бэкенд привязаны к loopback-адресу, внешний доступ идёт через обратный прокси Nginx; поддерживается сосуществование на порту 443 с другими HTTPS-сайтами хост-машины через SNI, автоматически генерируется самоподписанный сертификат с расширением SAN, встроен переход с 80 на 443.
## Скрипт эксплуатации run.sh
Предоставляет команды start / restart / stop / status / add_nginx / init_data / help и другие, поддерживает настройку через параметры командной строки портов, логина, пароля и никнейма администратора, домена SNI, с автоматической записью в .env. Перед запуском автоматически очищает кэш и избыточные объекты .git, при отсутствии .env самовосстанавливается из шаблона.
## Функциональные модули
- **Управление учётной записью администратора**: при запуске выполняется ensure_admin, обеспечивается жизненный цикл единственного администратора, автоматически очищаются исторические учётные записи администраторов, данные обычных зарегистрированных пользователей сохраняются.
- **Контроль рисков безопасности входа**: счётчики ошибок пароля и контрольного вопроса, обратный отсчёт блокировки, графическая капча, ограничение числа попыток восстановления пароля; учётная запись администратора не замораживается, вызываются только ожидание и капча.
- **Матрица управления правами**: охватывает 6 крупных модулей и всего 31 тонкую настройку прав (меню страниц и операции CRUD), поддерживает глобальные значения по умолчанию и индивидуальную настройку для пользователя, рекурсивную связь родительских и дочерних прав; администратор обладает высшими правами, которые нельзя отключить.
- **Контент и бизнес**: недельный календарь беременности, истории для пренатального воспитания, рецепты для беременных, энциклопедия для малышей, список для роддома, база товаров и брендов, избранные товары, ссылки на каналы покупки.
- **AI-ассистент**: поддерживает настройку API Key личного или унаследованного от администратора и проверку подключения, отказоустойчивый переход между несколькими поисковыми системами (DuckDuckGo, Google, Bing, 360, Sogou, Baidu, Yahoo), при тайм-ауте переход к локальной базе знаний, ответы с указанием источников информации.
- **Профиль ребёнка**: поддерживает два режима — нерождённый (предполагаемая дата родов, имя плода) и рождённый (дата рождения, вес), двусторонняя синхронизация с этапом беременности и воспитания, для старших детей возраст отображается в формате «X лет X месяцев».
- **Журнал аудита**: охватывает аутентификацию, управление пользователями, изменение этапов, товары, избранное, здоровье, список для роддома, вопросы и ответы AI и другие действия, поддерживает фильтрацию и экспорт в CSV.
## Структура каталогов
backend (проект Django, apps, config, db.sqlite3, requirements.txt), frontend (исходный код Vite + React), logs (журналы и PID), .env, run.sh.
## Сценарии применения
Подходит для тех, кто хочет запустить платформу контента о материнстве и детях на одной машине или лёгком сервере с минимальными зависимостями и нуждается в тонкой настройке прав и возможностях контроля безопасности.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.