Перейти к основному содержимому

Docker развертывание

Руководство по развертыванию DocAI с использованием Docker Compose.

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

# Клонировать репозиторий
git clone <repository-url>
cd docai

# Настроить окружение
cp .env.backend.template .env.backend
cp .env.frontend.template .env.frontend

# Запустить
docker compose up -d

Структура сервисов

services:
db: # PostgreSQL
redis: # Redis для Celery
api: # Django API
web: # Next.js frontend
celery-worker: # Celery воркер
celery-beat: # Celery scheduler
docusaurus: # Документация

Конфигурация

docker-compose.yaml

version: '3.8'

services:
db:
image: postgres:14
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_DB: db
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"

redis:
image: redis:7-alpine
ports:
- "6379:6379"

api:
build:
context: backend
command: >
bash -c "uv sync &&
uv run -- python manage.py migrate &&
uv run -- python manage.py runserver 0.0.0.0:8000"
volumes:
- ./backend:/app
ports:
- "8000:8000"
env_file:
- .env.backend
depends_on:
- db
- redis

web:
build:
context: frontend
command: bash -c "pnpm install -r && pnpm --filter web dev"
volumes:
- ./frontend:/app
ports:
- "3000:3000"
env_file:
- .env.frontend
depends_on:
- api

celery-worker:
build:
context: backend
command: uv run celery -A api worker --loglevel=info --concurrency=1
volumes:
- ./backend:/app
env_file:
- .env.backend
depends_on:
- db
- redis

celery-beat:
build:
context: backend
command: uv run celery -A api beat --loglevel=info
volumes:
- ./backend:/app
env_file:
- .env.backend
depends_on:
- db
- redis

volumes:
postgres_data:

Команды

Управление контейнерами

# Запуск
docker compose up -d

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

# Перезапуск
docker compose restart

# Логи
docker compose logs -f

# Логи конкретного сервиса
docker compose logs -f api

Работа с API

# Миграции
docker compose exec api uv run -- python manage.py migrate

# Создание суперпользователя
docker compose exec api uv run -- python manage.py createsuperuser

# Django shell
docker compose exec api uv run -- python manage.py shell

# Компиляция сообщений
docker compose exec api uv run -- python manage.py compilemessages

Работа с Frontend

# Установка зависимостей
docker compose exec web pnpm install -r

# Обновление типов API
docker compose exec web pnpm openapi:generate

# Добавление пакета
docker compose exec web pnpm --filter web add package-name

Celery

# Статус воркеров
docker compose exec api uv run celery -A api inspect active

# Очистка очереди
docker compose exec api uv run celery -A api purge

Тестирование

# Все тесты
docker compose exec api uv run -- pytest .

# Конкретный тест
docker compose exec api uv run -- pytest . -k "test_name"

Volumes

VolumeПуть в контейнереОписание
postgres_data/var/lib/postgresql/dataДанные PostgreSQL
./backend/appКод backend (hot reload)
./frontend/appКод frontend (hot reload)

Порты

СервисПортОписание
db5432PostgreSQL
redis6379Redis
api8000Django API
web3000Next.js
docusaurus3002Документация

Переменные окружения

.env.backend

SECRET_KEY=your-secret-key
DEBUG=1
DATABASE_USER=postgres
DATABASE_PASSWORD=change-password
DATABASE_NAME=db
DATABASE_HOST=db
DATABASE_PORT=5432
OCR_URL_DOC=http://ocr:8080/api/ocr
DIFY_BASE_URL=http://dify.example.com

.env.frontend

NEXTAUTH_SECRET=your-nextauth-secret
NEXTAUTH_URL=http://localhost:3000
API_URL=http://api:8000

Troubleshooting

Контейнер не запускается

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

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

Ошибка подключения к БД

# Проверить что db запущен
docker compose ps db

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

Celery не обрабатывает задачи

# Проверить воркер
docker compose logs celery-worker

# Проверить Redis
docker compose exec redis redis-cli ping

Очистка и пересборка

# Остановить и удалить volumes
docker compose down -v

# Пересобрать образы
docker compose build --no-cache

# Запустить заново
docker compose up -d