Skip to content

Latest commit

 

History

History
221 lines (156 loc) · 6.01 KB

File metadata and controls

221 lines (156 loc) · 6.01 KB

Руководство по деплою EmoTrack

✅ Исправленные проблемы с ресурсами

Проблемы, которые были решены:

  1. Постоянное хранилище файлов

    • ✅ Добавлен Docker volume uploads для сохранения загруженных файлов
    • ✅ Файлы теперь не удаляются при перезапуске контейнеров
  2. Правильная структура путей

    • ✅ Используются относительные пути (только имя файла в БД)
    • ✅ Полный путь формируется динамически при скачивании
  3. Совместимость dev/prod

    • ✅ В dev-режиме: bind mount ./back/uploads:/app/uploads
    • ✅ В prod-режиме: named volume uploads:/app/uploads

🚀 Запуск в production

1. Подготовка окружения

Убедитесь, что установлены:

  • Docker Engine 20.10+
  • Docker Compose 2.0+

2. Настройка переменных окружения

Создайте файл .env в корне проекта:

# Database
POSTGRES_DB=emotrack
POSTGRES_USER=emotrack
POSTGRES_PASSWORD=<НАДЁЖНЫЙ_ПАРОЛЬ>

# Backend
SECRET_KEY=<СЛУЧАЙНАЯ_СТРОКА_32+_СИМВОЛА>
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
DATABASE_URL=postgresql+psycopg2://emotrack:<ПАРОЛЬ>@db:5432/emotrack

3. Запуск без override файла (production)

# Остановить dev-версию если запущена
docker-compose down

# Запустить production версию БЕЗ override файла
docker-compose -f docker-compose.yml up -d

# Применить миграции
docker-compose exec backend alembic upgrade head

4. Проверка volumes

# Убедитесь что созданы volumes
docker volume ls | grep emotrack

# Должны быть:
# emotrack_pgdata
# emotrack_uploads

5. Мониторинг

# Проверить статус
docker-compose ps

# Логи
docker-compose logs -f

# Только backend логи
docker-compose logs -f backend

📁 Структура хранения файлов

Development

./back/uploads/
  └── resources/
      ├── 1_20260202093045_document.pdf
      ├── 1_20260202093145_image.jpg
      └── ...

Production (внутри volume)

/var/lib/docker/volumes/emotrack_uploads/_data/
  └── resources/
      ├── 1_20260202093045_document.pdf
      ├── 1_20260202093145_image.jpg
      └── ...

🔒 Безопасность

Рекомендации для production:

  1. Смените SECRET_KEY

    # Генерация безопасного ключа
    python -c "import secrets; print(secrets.token_urlsafe(32))"
  2. Смените пароль БД

    • Используйте сложный пароль
    • Обновите в .env и docker-compose.yml
  3. Настройте CORS

    • Укажите конкретные домены вместо *
    • Отредактируйте back/app/main.py
  4. Ограничения размера файлов

    • По умолчанию: 50MB
    • Настраивается в back/app/routers/resources.py
  5. HTTPS/SSL

    • Используйте nginx как reverse proxy
    • Настройте SSL сертификаты (Let's Encrypt)

📊 Бэкап

Backup базы данных

docker-compose exec db pg_dump -U emotrack emotrack > backup_$(date +%Y%m%d).sql

Backup файлов

docker run --rm -v emotrack_uploads:/data -v $(pwd):/backup alpine tar czf /backup/uploads_$(date +%Y%m%d).tar.gz -C /data .

Восстановление базы данных

docker-compose exec -T db psql -U emotrack emotrack < backup_20260202.sql

Восстановление файлов

docker run --rm -v emotrack_uploads:/data -v $(pwd):/backup alpine tar xzf /backup/uploads_20260202.tar.gz -C /data

🔧 Обновление приложения

# 1. Остановить приложение
docker-compose down

# 2. Получить обновления
git pull

# 3. Пересобрать образы
docker-compose -f docker-compose.yml build

# 4. Запустить с новыми образами
docker-compose -f docker-compose.yml up -d

# 5. Применить новые миграции
docker-compose exec backend alembic upgrade head

❗ Устранение неполадок

Файлы не загружаются

# Проверить права доступа
docker-compose exec backend ls -la /app/uploads/resources

# Создать директорию если не существует
docker-compose exec backend mkdir -p /app/uploads/resources

База данных не подключается

# Проверить статус
docker-compose ps db

# Проверить логи
docker-compose logs db

Миграции не применяются

# Проверить текущую версию
docker-compose exec backend alembic current

# Показать историю
docker-compose exec backend alembic history

# Принудительно пометить как выполненную (осторожно!)
docker-compose exec backend alembic stamp head

📝 Проверочный список перед деплоем

  • Изменён SECRET_KEY в production
  • Изменён пароль PostgreSQL
  • Настроены CORS разрешения
  • Volumes созданы и смонтированы
  • Применены все миграции
  • Настроен SSL/HTTPS
  • Настроен бэкап
  • Проверена загрузка/скачивание файлов
  • Проверены логи на ошибки