Initial commit: InviteMe production redesign

This commit is contained in:
InviteMe Developer
2026-09-01 10:52:35 +03:00
commit 1d85518957
72 changed files with 6931 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
# InviteMe
Production-система регистрации гостей, рассылки приглашений, выпуска QR-билетов и контроля входа на мероприятия.
## Возможности
- Мероприятия и ролевая модель: администратор, организатор и сотрудник на входе.
- Импорт гостей из `.xlsx`, закрытое хранение фотографий и генерация QR-кодов.
- Фоновая рассылка через SMTP, EWS или локальный Outlook с индивидуальными статусами доставки.
- Персональная страница приглашения: RSVP, комментарий, особенности питания, билет и календарь `.ics`.
- Сканирование на входе, отчёты о посещаемости и журнал аудита.
- PostgreSQL, общие лимиты запросов через Redis, автоматический HTTPS и миграции базы.
## Запуск в production
Нужны Linux-сервер с Docker Compose, домен, направленный на сервер, и открытые входящие порты 80/443.
```bash
git clone https://git.mycloud24.ru/insight/InviteMe.git
cd InviteMe
cp .env.example .env
# Заполните DOMAIN и сгенерируйте три секрета в .env.
docker compose up -d --build
docker compose exec inviteme flask --app run.py create-admin
```
Caddy автоматически получает и продлевает TLS-сертификат. Контейнер приложения напрямую наружу не публикуется.
Полная инструкция по установке, резервному копированию и обновлению: [docs/PRODUCTION.md](docs/PRODUCTION.md).
## Локальная разработка
```bash
python -m venv venv
venv/bin/pip install -r requirements-dev.txt
venv/bin/python run.py
```
На Windows замените `venv/bin/` на `venv\Scripts\`. Локальный режим использует SQLite и разрешает создание первого администратора через веб-страницу.
## Безопасность
- Production не запускается без уникальных секретов и обязательных безопасных настроек.
- Фотографии, QR-коды, билеты и отчёты находятся вне `static` и выдаются только после проверки доступа.
- Организатор видит только собственные мероприятия, а сотрудник на входе — только назначенные ему.
- Двойная отметка входа блокируется базой, ошибочный вход отменяется с обязательной записью в аудит.
- Изображения ограничиваются по размеру, декодируются, проверяются и сохраняются заново. SVG и анимация запрещены.
- Почтовые пароли шифруются перед записью в базу.
- Включены CSRF, защищённые cookies, HTTPS, security headers и лимиты запросов через Redis.
- Контейнер работает без root, с файловой системой только для чтения и без Linux capabilities.
## Проверка
```bash
python -m pytest -q
pip-audit -r requirements.txt
```
## Структура
```text
app/ Flask-приложение
instance/uploads/ закрытые файлы в локальном режиме
migrations/ миграции Alembic
tests/ регрессионные тесты безопасности
docs/PRODUCTION.md инструкция по эксплуатации
```
## Лицензия
Открытая лицензия не предоставляется. Исходный код предназначен только для разрешённого правообладателем использования.