English version: README.md
❗ Демо: https://anonimpython-private-school.hf.space/login (внешний вид может отличаться от скриншотов ниже)
Система управления школой для частных учебных заведений: расписание, оценки, домашние задания, чат, библиотека, аналитика, отчёты.
Полностью адаптивная мобильная версия — работает на телефонах, планшетах и компьютерах из коробки.
Большинство школьных систем — либо дорогой SaaS (тысячи $/год), либо устаревшее ПО, либо проприетарные лицензии. Этот проект:
- Бесплатный и open-source (MIT) — никаких скрытых платежей и оплаты за ученика
- Размещается на вашем сервере — полный контроль над данными, приватность
- Docker одной командой — не нужен DevOps-инженер
- Работает без интернета — после установки не зависит от внешних сервисов
- Полностью настраивается — любые триместры/четверти, шкала оценок, время уроков, название школы
| Проблема | Решение |
|---|---|
| Учителя часами считают средний балл | Автоматические итоги за четверть, печатные отчёты |
| Родители не видят успеваемость | Аналитика ученика с графиками Chart.js |
| Конфликты в расписании | Встроенная проверка на наложение уроков |
| Бумажные ДЗ теряются | Цифровые задания со сроками и фильтрами |
| Хаос в общении | Ролевой чат с индикацией непрочитанного |
| Дорогая бухгалтерия | Зарплатные ведомости, PDF через ReportLab |
| Приём новых учеников | Массовая генерация аккаунтов + карточки с логинами |
- Возможности
- Быстрый старт
- Начальные аккаунты
- Конфигурация
- Роли и доступ
- Структура проекта
- Скриншоты
- Технологии
- Лицензия
- Ролевая модель — Администратор, Директор, Секретарь, Учитель, Ученик с иерархией доступа
- Оценки — Календарная таблица с цветовой кодировкой (1–5), массовое выставление, отметки о пропусках (Н) и болезни (Б)
- Расписание — Версионированное, с проверкой конфликтов, настраиваемое время уроков, рабочие дни
- Домашние задания — С предметными тегами, сроками сдачи, фильтрацией, просрочками
- Чат — Ролевые контакты, уведомления о непрочитанных, адаптивная боковая панель для мобильных
- Библиотека — Загрузка PDF-учебников, просмотр в браузере без скачивания
- Аналитика учеников — Графики Chart.js (линейный, столбчатый, лепестковый, пончик) с адаптивной высотой на мобильных
- Триместры — 1–4 настраиваемых триместра с автоопределением по дате
- Отчёты — Итоги по школе, средние баллы классов, зарплатные ведомости с PDF через ReportLab
- Пароли — Генерация и печать карточек с логинами учеников, экспорт в DOCX
- Новости — Закреплённые записи, типы (каникулы, объявления, события), даты начала/окончания
- Тёмная тема — CSS-переменные, переключатель светлой/тёмной темы на всех страницах
- Мобильная версия — Нижняя навигация, таблицы → карточки на маленьких экранах, тактильные цели (≥44px), поддержка safe-area iOS. Работает на телефонах без установки приложения
- Docker — Развёртывание одной командой с PostgreSQL + MongoDB
git clone https://github.com/AnonimPython/Private-School.git
cd school-portal
cp .env.example .env
docker compose -p school up -d
docker exec school-app-1 python seed_data.py
open http://localhost:8000Требования: PostgreSQL 14+, MongoDB 6+, Python 3.11+
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reloaddocker compose -p school down -v
docker compose -p school up -d
sleep 10
docker exec school-app-1 python seed_data.pyПри первом запуске создаются автоматически:
| Роль | Пароль | |
|---|---|---|
| Директор | director@school.ru | director123 |
| Админ | admin@school.ru | admin123 |
| Секретарь | secretary@school.ru | secretary123 |
Обязательно смените пароли после первого входа!
После seed_data.py также появятся:
- 12 учителей (логин:
имя.фамилия@school.local, пароль:teacher123) - 40 учеников (по 5 на класс), пароль:
student123 - 8 классов (5А–8Б), 12 предметов, расписание, 420+ домашних заданий
- 4000+ оценок с 1 сентября по 31 мая, включая пропуски (Н) и болезни (Б)
- Новости, сообщения чата
Все настройки в config.py, переопределяются через .env или переменные окружения.
| Параметр | По умолчанию | Описание |
|---|---|---|
DATABASE_URL |
PostgreSQL | Подключение к основной БД |
MONGO_URL |
MongoDB | Подключение для логов |
JWT_SECRET |
(сменить!) | Ключ подписи JWT |
SCHOOL_NAME |
Частная школа | Название школы |
LESSON_START_TIME |
09:00 | Время начала первого урока |
LESSON_DURATION_MINUTES |
45 | Длительность урока |
WORKING_DAYS |
0,1,2,3,4,5 | Рабочие дни (Пн–Сб) |
TRIMESTER_COUNT |
3 | Количество триместров |
Полный список — в .env.example.
| Роль | Уровень | Полномочия |
|---|---|---|
| Админ | 0 | Полный доступ: пользователи, классы, предметы, расписание, ДЗ, логи, отчёты |
| Директор | 1 | Всё, кроме логов и управления пользователями |
| Секретарь | 2 | Только расписание, библиотека, чат |
| Учитель | 3 | Расписание, оценки, ДЗ, аналитика, чат, библиотека |
| Ученик | 4 | Свои оценки, ДЗ, расписание, чат, библиотека, аналитика |
├── app/
│ ├── main.py # Точка входа FastAPI
│ ├── auth.py # JWT + Argon2id аутентификация
│ ├── crypto.py # AES-256-GCM шифрование данных
│ ├── update_checker.py # Проверка обновлений через GitHub
│ ├── database.py # SQLModel + движок
│ ├── logger.py # Логирование действий в MongoDB
│ ├── models/models.py # 10 таблиц SQLModel
│ ├── routers/ # 9 модулей маршрутов
│ │ ├── admin.py # Пользователи, классы, предметы, отчёты, пароли
│ │ ├── teacher.py # Оценки, ДЗ, аналитика
│ │ ├── student.py # Дашборд ученика, оценки, расписание
│ │ ├── auth.py # Вход/регистрация
│ │ ├── chat.py # Сообщения
│ │ ├── library.py # PDF-библиотека
│ │ ├── news.py # Новости
│ │ └── api.py # REST API
│ ├── templates/ # 40+ Jinja2-шаблонов
│ └── static/ # CSS, JS, загрузки
├── config.py # Все настройки
├── seed_data.py # Генератор тестовых данных
├── docker-compose.yml # PostgreSQL + MongoDB + app
├── Dockerfile # Образ приложения
├── requirements.txt # Python-зависимости
└── .env.example # Шаблон .env
git clone https://github.com/your-org/school-portal.git
cp .env.example .envОтредактируйте .env — укажите название школы, город, JWT-секрет, пароли БД.
docker compose -p school up -dЗапускает 3 контейнера: app (FastAPI), PostgreSQL, MongoDB.
Тестовые данные после первого запуска:
docker exec school-app-1 python seed_data.pyВариант A — VPS с Docker (рекомендуется)
Подключитесь по SSH, затем:
# Установка Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Клонирование
git clone https://github.com/your-org/school-portal.git
cd school-portal
# Настройка
cp .env.example .env
nano .env # задать JWT_SECRET, пароли БД
# Запуск
docker compose -p school up -dОткрыть http://ip-вашего-сервера:8000 — готово.
Вариант B — Caddy / Nginx (домен + HTTPS)
Создайте Caddyfile:
vasha-shkola.ru {
reverse_proxy school-app-1:8000
}
Запустите Caddy в той же Docker-сети:
docker network ls # найдите "school_default"
docker run -d --network school_default -p 80:80 -p 443:443 \
-v $PWD/Caddyfile:/etc/caddy/Caddyfile \
-v caddy_data:/data caddyВариант C — Базы данных из Docker для локальной разработки
В docker-compose.yml уже есть PostgreSQL и MongoDB — ваше локальное приложение подключается к ним как к обычным базам.
Стандартные строки подключения для .env:
DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/school_db
MONGO_URL=mongodb://localhost:27017Порты проброшены на localhost — не нужно устанавливать PostgreSQL и MongoDB вручную.
Вариант D — Боевая эксплуатация
DEBUG=falseв.env- Надёжный
JWT_SECRET(openssl rand -hex 32) - Укажите
MONGO_URLиDATABASE_URLс логином/паролем - Перезапуск:
docker compose -p school restart
# Логи
docker compose -p school logs -f app
# Пересобрать после изменений кода
docker compose -p school up -d --build
# Сброс всех данных (⚠️ всё удалится)
docker compose -p school down -v
docker compose -p school up -d
docker exec school-app-1 python seed_data.py
# Бэкап базы
docker exec school-db-1 pg_dump -U postgres school_db > backup.sqlpython3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000Требования: PostgreSQL 14+ и MongoDB 6+ запущены локально.
- Бэкенд: Python 3.11, FastAPI, SQLModel, SQLAlchemy async
- Фронтенд: Jinja2, кастомный CSS (светлая/тёмная тема), Chart.js, ReportLab (PDF)
- Базы данных: PostgreSQL (основная), MongoDB (логи действий)
- Аутентификация: JWT (HTTP-only cookies), хеширование паролей через Argon2id (устойчив к GPU/ASIC-атакам)
- Шифрование: AES-256-GCM — личные данные (паспорта, телефоны, адреса) шифруются в БД с настраиваемым ключом
- Развёртывание: Docker, Docker Compose
После seed_data.py доступны следующие учётные записи:
| Роль | Пароль | |
|---|---|---|
| Директор | director@school.ru | director123 |
| Админ | admin@school.ru | admin123 |
| Учитель | петр.петров@school.local | teacher123 |
| Ученик | иван.иванов@school.local | student123 |
Первый учитель и первый ученик из seed_data — удобно для быстрого тестирования.
- Онлайн-уроки (WebRTC) — учитель показывает экран, ученики видят, чат, микрофон
- Excel-ведомости — выгрузка оценок класса с баллами и пропусками
- Характеристики на ученика — автогенерация с подстановкой баллов и поведения
- Замены учителей — администратор молча переназначает урок другому учителю
- Модуль питания — меню на неделю, отметки кто ел, отчёты за месяц
- Тесты и контрольные — учитель создаёт, ученики проходят онлайн, автопроверка
- QR-отметка посещаемости — учитель показывает QR, ученик сканирует
- Многоязычность (i18n) — английский, казахский и другие языки


















