version: '3.8' services: app: build: context: . dockerfile: Dockerfile container_name: writing-studio-app ports: - "7860:7860" # Gradio interface - "8000:8000" # Metrics endpoint environment: - ENVIRONMENT=production - DEBUG=false - HOST=0.0.0.0 - PORT=7860 - LOG_LEVEL=INFO - ENABLE_METRICS=true - METRICS_PORT=8000 env_file: - .env volumes: - ./logs:/app/logs - ./models:/app/models restart: unless-stopped healthcheck: test: ["CMD", "python", "-c", "import requests; requests.get('http://localhost:7860')"] interval: 30s timeout: 10s retries: 3 start_period: 60s networks: - writing-studio-network # Optional: Prometheus for metrics collection prometheus: image: prom/prometheus:latest container_name: writing-studio-prometheus ports: - "9090:9090" volumes: - ./configs/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus-data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' networks: - writing-studio-network profiles: - monitoring # Optional: Grafana for visualization grafana: image: grafana/grafana:latest container_name: writing-studio-grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false volumes: - grafana-data:/var/lib/grafana networks: - writing-studio-network profiles: - monitoring networks: writing-studio-network: driver: bridge volumes: prometheus-data: grafana-data: