222 lines
4.7 KiB
Markdown
222 lines
4.7 KiB
Markdown
# 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"
|
||
```
|