Spaces:
Paused
Paused
version: '3.8' | |
services: | |
# Persian Legal Scraper Main Application | |
persian-legal-scraper: | |
build: | |
context: . | |
dockerfile: Dockerfile | |
container_name: persian-legal-scraper-app | |
restart: unless-stopped | |
ports: | |
- "7860:7860" | |
environment: | |
# Application Settings | |
- PYTHONPATH=/app | |
- PYTHONUNBUFFERED=1 | |
- LOG_LEVEL=INFO | |
- ENVIRONMENT=production | |
# Gradio Configuration | |
- GRADIO_SERVER_NAME=0.0.0.0 | |
- GRADIO_SERVER_PORT=7860 | |
- GRADIO_SHARE=false | |
- GRADIO_THEME=default | |
# AI/ML Model Settings | |
- HF_HOME=/app/cache | |
- TRANSFORMERS_CACHE=/app/cache/transformers | |
- TORCH_HOME=/app/cache/torch | |
- TOKENIZERS_PARALLELISM=false | |
# Performance Optimization | |
- PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128 | |
- OMP_NUM_THREADS=2 | |
- MKL_NUM_THREADS=2 | |
# Database Configuration | |
- DATABASE_PATH=/app/data/iranian_legal_archive_advanced.sqlite | |
- CACHE_DB_PATH=/app/data/cache_system.sqlite | |
- EMBEDDINGS_CACHE_PATH=/app/data/embeddings_cache.pkl | |
- VECTOR_INDEX_PATH=/app/data/faiss_index.bin | |
# Security Settings | |
- ANTI_DDOS_ENABLED=true | |
- MAX_REQUESTS_PER_HOUR=100 | |
- REQUEST_DELAY_MIN=1 | |
- REQUEST_DELAY_MAX=5 | |
# Legal Sources Configuration | |
- CRAWLER_ENABLED=true | |
- MAX_CRAWL_DEPTH=2 | |
- CRAWL_DELAY_SECONDS=3 | |
volumes: | |
# Persistent data storage | |
- persian_legal_data:/app/data | |
- persian_legal_cache:/app/cache | |
- persian_legal_logs:/app/logs | |
- persian_legal_uploads:/app/uploads | |
# Configuration files (optional) | |
- ./config:/app/config:ro | |
networks: | |
- persian-legal-network | |
healthcheck: | |
test: ["CMD", "curl", "-f", "http://localhost:7860"] | |
interval: 30s | |
timeout: 10s | |
retries: 3 | |
start_period: 60s | |
depends_on: | |
- redis-cache | |
# Resource limits for production | |
deploy: | |
resources: | |
limits: | |
memory: 4G | |
cpus: '2.0' | |
reservations: | |
memory: 2G | |
cpus: '1.0' | |
# Redis for Advanced Caching (Optional) | |
redis-cache: | |
image: redis:7-alpine | |
container_name: persian-legal-redis | |
restart: unless-stopped | |
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru | |
volumes: | |
- persian_legal_redis_data:/data | |
networks: | |
- persian-legal-network | |
ports: | |
- "6379:6379" | |
healthcheck: | |
test: ["CMD", "redis-cli", "ping"] | |
interval: 10s | |
timeout: 3s | |
retries: 3 | |
# Nginx Reverse Proxy (Optional for production) | |
nginx-proxy: | |
image: nginx:alpine | |
container_name: persian-legal-nginx | |
restart: unless-stopped | |
ports: | |
- "80:80" | |
- "443:443" | |
volumes: | |
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro | |
- ./nginx/ssl:/etc/nginx/ssl:ro | |
- persian_legal_logs:/var/log/nginx | |
networks: | |
- persian-legal-network | |
depends_on: | |
- persian-legal-scraper | |
profiles: | |
- production | |
# Database Backup Service (Optional) | |
db-backup: | |
image: alpine:latest | |
container_name: persian-legal-backup | |
restart: unless-stopped | |
command: | | |
sh -c ' | |
apk add --no-cache sqlite curl | |
while true; do | |
echo "Starting backup at $$(date)" | |
sqlite3 /app/data/iranian_legal_archive_advanced.sqlite ".backup /app/backups/backup_$$(date +%Y%m%d_%H%M%S).sqlite" | |
find /app/backups -name "backup_*.sqlite" -mtime +7 -delete | |
echo "Backup completed at $$(date)" | |
sleep 86400 | |
done | |
' | |
volumes: | |
- persian_legal_data:/app/data:ro | |
- persian_legal_backups:/app/backups | |
networks: | |
- persian-legal-network | |
profiles: | |
- production | |
volumes: | |
# Persistent data volumes | |
persian_legal_data: | |
driver: local | |
driver_opts: | |
type: none | |
o: bind | |
device: ./data | |
persian_legal_cache: | |
driver: local | |
driver_opts: | |
type: none | |
o: bind | |
device: ./cache | |
persian_legal_logs: | |
driver: local | |
driver_opts: | |
type: none | |
o: bind | |
device: ./logs | |
persian_legal_uploads: | |
driver: local | |
persian_legal_redis_data: | |
driver: local | |
persian_legal_backups: | |
driver: local | |
networks: | |
persian-legal-network: | |
driver: bridge | |
ipam: | |
config: | |
- subnet: 172.20.0.0/16 |