PersianOCR / backup /docker-compose.yml
Really-amin's picture
Upload 8 files
8e77663 verified
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