Files
InviteMe/docs/PRODUCTION.md
T
2026-09-01 10:37:40 +03:00

5.1 KiB
Raw Blame History

Развёртывание InviteMe в production

1. Сервер и DNS

Используйте отдельный Linux-сервер с актуальными Docker Engine и Docker Compose. Создайте A/AAAA-запись домена InviteMe и направьте её на сервер. Разрешите входящие TCP 80/443 и UDP 443. Не публикуйте наружу PostgreSQL, Redis и порт 8888.

2. Конфигурация

cp .env.example .env
openssl rand -hex 32
openssl rand -hex 32
openssl rand -hex 32

Запишите полученные значения в SECRET_KEY, CREDENTIAL_ENCRYPTION_KEY и POSTGRES_PASSWORD. В DOMAIN укажите публичное имя сервера без схемы и пути.

Ограничьте доступ к файлу конфигурации:

chmod 600 .env

CREDENTIAL_ENCRYPTION_KEY защищает сохранённые SMTP/EWS/IMAP-пароли. При его потере или изменении расшифровать эти пароли будет невозможно, поэтому сохраните ключ в менеджере паролей.

3. Первый запуск

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 отключена. Команда создания администратора проверяет сложность пароля и не принимает пароль аргументом командной строки.

Проверьте состояние приложения:

curl -fsS https://events.example.com/healthz

Замените адрес на значение DOMAIN.

После создания пользователей откройте каждое мероприятие и назначьте сотрудников на входе. Неназначенный сотрудник не видит мероприятие и его гостей.

4. Резервное копирование

Копируйте и PostgreSQL, и закрытый том приложения. Дамп базы не содержит фотографии гостей, QR-коды и сгенерированные билеты.

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. Обновление

Сначала создайте свежую резервную копию, затем выполните:

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. Эксплуатация

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. Ротацию секретов выполняйте только как плановое обслуживание.