Spaces:
Sleeping
Sleeping
| version: '3.8' | |
| services: | |
| ocr-api: | |
| build: | |
| context: . | |
| dockerfile: Dockerfile | |
| image: persian-ocr-api | |
| container_name: persian-ocr-service | |
| restart: unless-stopped | |
| ports: | |
| - "8000:8000" | |
| volumes: | |
| - ./app:/app | |
| - ./logs:/app/logs | |
| - ./models:/app/models | |
| - ./temp_uploads:/app/temp_uploads | |
| environment: | |
| - ENVIRONMENT=production | |
| - MAX_WORKERS=4 | |
| - WORKER_TIMEOUT=300 | |
| - MODEL_CACHE_SIZE=1024 | |
| - REDIS_URL=redis://redis:6379 | |
| - MONGODB_URL=mongodb://mongodb:27017/ocr_db | |
| - LOG_LEVEL=INFO | |
| - ENABLE_METRICS=true | |
| depends_on: | |
| - redis | |
| - mongodb | |
| - elasticsearch | |
| healthcheck: | |
| test: ["CMD", "curl", "-f", "http://localhost:8000/health"] | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| deploy: | |
| resources: | |
| limits: | |
| cpus: '2' | |
| memory: 4G | |
| reservations: | |
| cpus: '1' | |
| memory: 2G | |
| networks: | |
| - ocr-network | |
| redis: | |
| image: redis:alpine | |
| container_name: ocr-redis | |
| command: redis-server --appendonly yes | |
| restart: unless-stopped | |
| ports: | |
| - "6379:6379" | |
| volumes: | |
| - redis-data:/data | |
| healthcheck: | |
| test: ["CMD", "redis-cli", "ping"] | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| deploy: | |
| resources: | |
| limits: | |
| cpus: '0.5' | |
| memory: 1G | |
| networks: | |
| - ocr-network | |
| mongodb: | |
| image: mongo:latest | |
| container_name: ocr-mongodb | |
| restart: unless-stopped | |
| environment: | |
| - MONGO_INITDB_ROOT_USERNAME=admin | |
| - MONGO_INITDB_ROOT_PASSWORD=secret | |
| - MONGO_INITDB_DATABASE=ocr_db | |
| ports: | |
| - "27017:27017" | |
| volumes: | |
| - mongodb-data:/data/db | |
| - ./mongo-init:/docker-entrypoint-initdb.d | |
| healthcheck: | |
| test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| deploy: | |
| resources: | |
| limits: | |
| cpus: '1' | |
| memory: 2G | |
| networks: | |
| - ocr-network | |
| elasticsearch: | |
| image: elasticsearch:8.8.0 | |
| container_name: ocr-elasticsearch | |
| restart: unless-stopped | |
| environment: | |
| - discovery.type=single-node | |
| - ES_JAVA_OPTS=-Xms512m -Xmx512m | |
| - xpack.security.enabled=false | |
| ports: | |
| - "9200:9200" | |
| volumes: | |
| - elasticsearch-data:/usr/share/elasticsearch/data | |
| healthcheck: | |
| test: ["CMD-SHELL", "curl -s http://localhost:9200/_cluster/health | grep -q 'status.*green\\|status.*yellow'"] | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| deploy: | |
| resources: | |
| limits: | |
| cpus: '1' | |
| memory: 2G | |
| networks: | |
| - ocr-network | |
| kibana: | |
| image: kibana:8.8.0 | |
| container_name: ocr-kibana | |
| restart: unless-stopped | |
| ports: | |
| - "5601:5601" | |
| environment: | |
| - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 | |
| depends_on: | |
| - elasticsearch | |
| deploy: | |
| resources: | |
| limits: | |
| cpus: '0.5' | |
| memory: 1G | |
| networks: | |
| - ocr-network | |
| prometheus: | |
| image: prom/prometheus:latest | |
| container_name: ocr-prometheus | |
| restart: unless-stopped | |
| ports: | |
| - "9090:9090" | |
| volumes: | |
| - ./prometheus.yml:/etc/prometheus/prometheus.yml | |
| - prometheus-data:/prometheus | |
| command: | |
| - '--config.file=/etc/prometheus/prometheus.yml' | |
| - '--storage.tsdb.path=/prometheus' | |
| - '--web.console.libraries=/usr/share/prometheus/console_libraries' | |
| - '--web.console.templates=/usr/share/prometheus/consoles' | |
| deploy: | |
| resources: | |
| limits: | |
| cpus: '0.5' | |
| memory: 1G | |
| networks: | |
| - ocr-network | |
| grafana: | |
| image: grafana/grafana:latest | |
| container_name: ocr-grafana | |
| restart: unless-stopped | |
| ports: | |
| - "3000:3000" | |
| volumes: | |
| - grafana-data:/var/lib/grafana | |
| environment: | |
| - GF_SECURITY_ADMIN_PASSWORD=admin | |
| - GF_USERS_ALLOW_SIGN_UP=false | |
| depends_on: | |
| - prometheus | |
| deploy: | |
| resources: | |
| limits: | |
| cpus: '0.5' | |
| memory: 1G | |
| networks: | |
| - ocr-network | |
| traefik: | |
| image: traefik:v2.10 | |
| container_name: ocr-traefik | |
| restart: unless-stopped | |
| ports: | |
| - "80:80" | |
| - "443:443" | |
| - "8080:8080" | |
| volumes: | |
| - ./traefik.yml:/etc/traefik/traefik.yml | |
| - ./acme.json:/acme.json | |
| - /var/run/docker.sock:/var/run/docker.sock:ro | |
| deploy: | |
| resources: | |
| limits: | |
| cpus: '0.5' | |
| memory: 512M | |
| networks: | |
| - ocr-network | |
| volumes: | |
| redis-data: | |
| mongodb-data: | |
| elasticsearch-data: | |
| prometheus-data: | |
| grafana-data: | |
| networks: | |
| ocr-network: | |
| driver: bridge |