Развёртывание
Docker Compose — Полный стек
Файл docker-compose.yml в корне проекта описывает 8 сервисов:
postgres — postgres:16-alpine (порт 5435:5432) minio — minio/minio:latest nginx — nginx:alpine (реверс-прокси для MinIO) kafka — apache/kafka:latest api — сборка из Dockerfile (FastAPI) worker — сборка из Dockerfile (фоновый обработчик) prometheus — prom/prometheus grafana — grafana/grafana
# Запуск docker compose up -d # Логи конкретного сервиса docker compose logs -f api # Остановка с удалением томов docker compose down -v
Переменные для Production
- VK_SECRET_KEY — сгенерировать надёжный ключ
- DB_PASSWORD — надёжный пароль
- MINIO_ROOT_PASSWORD — надёжный пароль
- MINIO_PUBLIC_URL — публичный домен MinIO
- ANALYSIS_GRPC_URL — адрес gRPC анализатора
- LOG_LEVEL — WARNING для production
Kubernetes (kind)
Манифесты (k8s/, 11 файлов)
00-namespace.yaml — Namespace umnaya 01-configmap.yaml — ConfigMap 02-secret.yaml — Secret 03-postgres.yaml — Deployment + Service PostgreSQL 04-minio.yaml — Deployment + Service MinIO 05-kafka.yaml — Deployment + Service Kafka 06-api-deployment.yaml — Deployment API 07-api-service.yaml — Service API (ClusterIP) 08-worker-deployment.yaml — Deployment Worker 09-nginx.yaml — Deployment + Service Nginx 10-volumes.yaml — PV + PVC
Деплой
kind create cluster --name umnaya
docker exec umnaya-control-plane mkdir -p /var/lib/umnaya/{postgres,minio,kafka}
docker build -t umnaya-api .
kind load docker-image umnaya-api --name umnaya
kubectl apply -f k8s/
kubectl port-forward -n umnaya svc/api-service 8000:8000 --address 0.0.0.0
Особенности
- initContainer wait-postgres: ждёт готовности PostgreSQL перед запуском API
- initContainer alembic-upgrade: применяет миграции перед стартом API
- livenessProbe: GET /healthz (порт 8000)
- readinessProbe: GET /readyz (порт 8000)
- PersistentVolume: hostPath /var/lib/umnaya/
- StorageClass: manual
Dockerfile
FROM python:3.14-slim
WORKDIR /app
COPY requirements.txt .
RUN apt-get update && apt-get install -y --no-install-recommends g++ gcc && \
pip install --no-cache-dir -r requirements.txt && \
apt-get purge -y --auto-remove g++ gcc
COPY . .
EXPOSE 8000
CMD ["sh", "-c", "alembic upgrade head && exec uvicorn app.main:app --host 0.0.0.0 --port 8000"]
Образ используется как для API (uvicorn), так и для Worker (python -m app.worker).