Сервис для хранения файлов аудио, индексации файлов, записи и выдачи результатов распознавания
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

Docker Deployment Guide

Быстрый старт

Сборка и запуск с Docker Compose (рекомендуется)

# Сборка и запуск
docker-compose up -d

# Просмотр логов
docker-compose logs -f

# Остановка
docker-compose down

Приложение будет доступно по адресу: http://localhost:8000

API документация:

Ручной запуск с 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"