# MCP-OPENAPI-DOCX Docker Compose Configuration
# Development and production environment setup
version: '3.8'
services:
# Main API application
api:
build:
context: .
dockerfile: Dockerfile
container_name: docx-api
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql+asyncpg://docx:docx@postgres:5432/docx_db
- REDIS_URL=redis://redis:6379/0
- CELERY_BROKER_URL=redis://redis:6379/1
- CELERY_RESULT_BACKEND=redis://redis:6379/2
- SECRET_KEY=${SECRET_KEY:-your-super-secret-key-change-in-production}
- DEBUG=${DEBUG:-false}
- ENVIRONMENT=${ENVIRONMENT:-development}
volumes:
- ./uploads:/app/uploads
- ./exports:/app/exports
- ./logs:/app/logs
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
networks:
- docx-network
restart: unless-stopped
healthcheck:
test: ["CMD", "python", "-c", "import httpx; httpx.get('http://localhost:8000/api/v1/health')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
# Celery worker for background tasks
celery-worker:
build:
context: .
dockerfile: Dockerfile
container_name: docx-celery-worker
command: celery -A src.tasks.celery_app worker --loglevel=info
environment:
- DATABASE_URL=postgresql+asyncpg://docx:docx@postgres:5432/docx_db
- REDIS_URL=redis://redis:6379/0
- CELERY_BROKER_URL=redis://redis:6379/1
- CELERY_RESULT_BACKEND=redis://redis:6379/2
volumes:
- ./uploads:/app/uploads
- ./exports:/app/exports
depends_on:
- api
- redis
networks:
- docx-network
restart: unless-stopped
# Celery beat for scheduled tasks
celery-beat:
build:
context: .
dockerfile: Dockerfile
container_name: docx-celery-beat
command: celery -A src.tasks.celery_app beat --loglevel=info
environment:
- CELERY_BROKER_URL=redis://redis:6379/1
- CELERY_RESULT_BACKEND=redis://redis:6379/2
depends_on:
- celery-worker
networks:
- docx-network
restart: unless-stopped
# PostgreSQL database
postgres:
image: postgres:15-alpine
container_name: docx-postgres
environment:
- POSTGRES_USER=docx
- POSTGRES_PASSWORD=docx
- POSTGRES_DB=docx_db
volumes:
- postgres-data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- docx-network
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U docx -d docx_db"]
interval: 10s
timeout: 5s
retries: 5
# Redis for caching and Celery broker
redis:
image: redis:7-alpine
container_name: docx-redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
networks:
- docx-network
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
# Flower for Celery monitoring (optional)
flower:
build:
context: .
dockerfile: Dockerfile
container_name: docx-flower
command: celery -A src.tasks.celery_app flower --port=5555
ports:
- "5555:5555"
environment:
- CELERY_BROKER_URL=redis://redis:6379/1
- CELERY_RESULT_BACKEND=redis://redis:6379/2
depends_on:
- celery-worker
networks:
- docx-network
restart: unless-stopped
profiles:
- monitoring
volumes:
postgres-data:
driver: local
redis-data:
driver: local
networks:
docx-network:
driver: bridge