# Docker Deployment Guide ## Быстрый старт ### Сборка и запуск с Docker Compose (рекомендуется) ```bash # Сборка и запуск docker-compose up -d # Просмотр логов docker-compose logs -f # Остановка docker-compose down ``` Приложение будет доступно по адресу: http://localhost:8000 API документация: - Swagger UI: http://localhost:8000/api/v1/docs - ReDoc: http://localhost:8000/api/v1/redoc ### Ручной запуск с Docker ```bash # Сборка образа docker build -t file-audio-api . # Запуск контейнера docker run -d \ --name file-audio-api \ -p 8000:8000 \ -v $(pwd)/uploads:/app/uploads \ -v $(pwd)/data:/app/data \ -e DATABASE_URL=sqlite:////app/data/speech_analytics.db \ file-audio-api # Просмотр логов docker logs -f file-audio-api # Остановка и удаление контейнера docker stop file-audio-api docker rm file-audio-api ``` ## Управление данными ### Загруженные файлы Файлы сохраняются в директории `./uploads` на хост-машине (монтируются в контейнер). ### База данных SQLite база данных находится в `./data/speech_analytics.db`. ### Бэкап данных ```bash # Бэкап базы данных docker exec file-audio-api cp /app/data/speech_analytics.db /app/backup_$(date +%Y%m%d).db # Бэкап загруженных файлов tar -czf uploads_backup_$(date +%Y%m%d).tar.gz uploads/ ``` ## Production конфигурация ### Использование PostgreSQL Раскомментируйте секцию `db` в `docker-compose.yml` и измените `DATABASE_URL`: ```yaml environment: - DATABASE_URL=postgresql://speechuser:speechpass@db:5432/speech_analytics ``` ### Использование Redis для статусов задач Раскомментируйте секцию `redis` в `docker-compose.yml` и подключите в коде: ```python # apiApp/config.py import redis redis_client = redis.from_url("redis://redis:6379") ``` ### Environment переменные Создайте `.env` файл: ```bash cp .env.example .env ``` И отредактируйте: ```env DATABASE_URL=postgresql://user:password@db:5432/speech_analytics MAX_UPLOAD_SIZE=104857600 ``` ## Health Check ```bash curl http://localhost:8000/health ``` Ожидаемый ответ: ```json {"status": "healthy"} ``` ## Логи и отладка ```bash # Просмотр логов docker-compose logs -f app # Вход в контейнер для отладки docker-compose exec app bash # Перезапуск с пересборкой docker-compose up -d --build ``` ## Производительность ### Настройка количества workers Для production рекомендуется использовать несколько workers: ```bash docker run -d \ --name file-audio-api \ -p 8000:8000 \ file-audio-api \ uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4 ``` Или в `docker-compose.yml`: ```yaml command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"] ``` ## Безопасность ### Ограничение CORS Отредактируйте `main.py`: ```python app.add_middleware( CORSMiddleware, allow_origins=["https://yourdomain.com"], # Замените на ваш домен allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) ``` ### Добавление SSL Используйте reverse proxy (nginx) или: ```bash docker run -d \ --name file-audio-api \ -p 8443:8443 \ -v /path/to/certs:/app/certs \ file-audio-api \ uvicorn main:app --host 0.0.0.0 --port 8443 --ssl-keyfile /app/certs/key.pem --ssl-certfile /app/certs/cert.pem ``` ## Troubleshooting ### Контейнер не запускается ```bash # Проверка логов docker-compose logs app # Проверка статуса docker-compose ps ``` ### Ошибки с базой данных ```bash # Перезапуск с очисткой volumes docker-compose down -v docker-compose up -d ``` ### Проблемы с правами доступа ```bash # Установка прав на директорию uploads chmod -R 755 uploads/ ``` ## Мониторинг ### Использование Docker stats ```bash docker stats file-audio-api ``` ### Интеграция с Prometheus Добавьте в `docker-compose.yml`: ```yaml services: prometheus: image: prom/prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml ports: - "9090:9090" ```