Files
InviteMe/docs/PRODUCTION.md
T
2026-09-01 11:04:21 +03:00

91 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Развёртывание InviteMe в production
## 1. Сервер и DNS
Используйте отдельный Linux-сервер с актуальными Docker Engine и Docker Compose. Создайте `A`/`AAAA`-запись домена InviteMe и направьте её на сервер. Разрешите входящие TCP 80/443 и UDP 443. Не публикуйте наружу PostgreSQL, Redis и порт 8888.
## 2. Конфигурация
```bash
cp .env.example .env
openssl rand -hex 32
openssl rand -hex 32
openssl rand -hex 32
```
Запишите полученные значения в `SECRET_KEY`, `CREDENTIAL_ENCRYPTION_KEY` и `POSTGRES_PASSWORD`. В `DOMAIN` укажите публичное имя сервера без схемы и пути.
Ограничьте доступ к файлу конфигурации:
```bash
chmod 600 .env
```
`CREDENTIAL_ENCRYPTION_KEY` защищает сохранённые SMTP/EWS/IMAP-пароли. При его потере или изменении расшифровать эти пароли будет невозможно, поэтому сохраните ключ в менеджере паролей.
## 3. Первый запуск
```bash
docker compose up -d --build
docker compose ps
docker compose exec inviteme flask --app run.py create-admin
```
В `docker compose ps` должны быть запущены приложение, отдельный `worker`, PostgreSQL, Redis и Caddy. Массовая рассылка выполняется worker-процессом и не зависит от открытой страницы браузера.
Веб-страница первичной настройки в production отключена. Команда создания администратора проверяет сложность пароля и не принимает пароль аргументом командной строки.
Проверьте состояние приложения:
```bash
curl -fsS https://events.example.com/healthz
```
Замените адрес на значение `DOMAIN`.
После создания пользователей откройте каждое мероприятие и назначьте сотрудников на входе. Неназначенный сотрудник не видит мероприятие и его гостей.
## 4. Резервное копирование
Копируйте и PostgreSQL, и закрытый том приложения. Дамп базы не содержит фотографии гостей, QR-коды и сгенерированные билеты.
```bash
docker compose exec -T database pg_dump -U inviteme -d inviteme -Fc > inviteme.dump
docker run --rm --volumes-from "$(docker compose ps -q inviteme)" \
-v "$PWD":/backup alpine \
tar -czf /backup/inviteme-uploads.tar.gz -C /app/instance .
```
Храните резервные копии в зашифрованном виде и регулярно проверяйте восстановление. Никогда не добавляйте `.env` и бэкапы в Git.
## 5. Обновление
Сначала создайте свежую резервную копию, затем выполните:
```bash
git pull --ff-only
docker compose build --pull
docker compose up -d
docker compose ps
```
Перед запуском Waitress сервис автоматически выполняет `flask db upgrade`. При ошибке миграции приложение не стартует — восстановите резервную копию или исправьте миграцию до повторного запуска.
## 6. Переход с существующего SQLite
Не подключайте старый SQLite-файл к production-стеку. Сначала сохраните полную копию `instance/`. Новая версия при локальном запуске переносит старые файлы из `app/static/uploads` в закрытый каталог, но записи из SQLite в PostgreSQL нужно переносить как отдельную контролируемую операцию и проверять до переключения DNS.
После переноса данных назначьте сотрудников нужным мероприятиям: новая production-модель не даёт роли `staff` автоматический доступ ко всем событиям.
## 7. Эксплуатация
```bash
docker compose logs -f --tail=200 inviteme
docker compose logs -f --tail=200 worker
docker compose restart inviteme
docker compose restart worker
docker compose exec inviteme flask --app run.py routes
```
Контролируйте свободное место, ответы HTTP 5xx, состояние worker, неудачные входы, ошибки отправки почты и возраст последней резервной копии PostgreSQL. Ротацию секретов выполняйте только как плановое обслуживание.