You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.7 KiB
4.7 KiB
Docker Deployment Guide
Быстрый старт
Сборка и запуск с Docker Compose (рекомендуется)
# Сборка и запуск
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
# Сборка образа
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.
Бэкап данных
# Бэкап базы данных
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:
environment:
- DATABASE_URL=postgresql://speechuser:speechpass@db:5432/speech_analytics
Использование Redis для статусов задач
Раскомментируйте секцию redis в docker-compose.yml и подключите в коде:
# apiApp/config.py
import redis
redis_client = redis.from_url("redis://redis:6379")
Environment переменные
Создайте .env файл:
cp .env.example .env
И отредактируйте:
DATABASE_URL=postgresql://user:password@db:5432/speech_analytics
MAX_UPLOAD_SIZE=104857600
Health Check
curl http://localhost:8000/health
Ожидаемый ответ:
{"status": "healthy"}
Логи и отладка
# Просмотр логов
docker-compose logs -f app
# Вход в контейнер для отладки
docker-compose exec app bash
# Перезапуск с пересборкой
docker-compose up -d --build
Производительность
Настройка количества workers
Для production рекомендуется использовать несколько workers:
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:
command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]
Безопасность
Ограничение CORS
Отредактируйте main.py:
app.add_middleware(
CORSMiddleware,
allow_origins=["https://yourdomain.com"], # Замените на ваш домен
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
Добавление SSL
Используйте reverse proxy (nginx) или:
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
Контейнер не запускается
# Проверка логов
docker-compose logs app
# Проверка статуса
docker-compose ps
Ошибки с базой данных
# Перезапуск с очисткой volumes
docker-compose down -v
docker-compose up -d
Проблемы с правами доступа
# Установка прав на директорию uploads
chmod -R 755 uploads/
Мониторинг
Использование Docker stats
docker stats file-audio-api
Интеграция с Prometheus
Добавьте в docker-compose.yml:
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"