72 lines
4.2 KiB
Markdown
72 lines
4.2 KiB
Markdown
# 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 инструкция по эксплуатации
|
||
```
|
||
|
||
## Лицензия
|
||
|
||
Открытая лицензия не предоставляется. Исходный код предназначен только для разрешённого правообладателем использования.
|