shaml / docker-compose.yml
Cursor Agent
Add production-ready Docker deployment for local server hosting
ce9fbaa unverified
# Production-oriented local server deployment for شَمْl (Diac API + Arabic frontend).
# External services: Hugging Face (model download), Supabase (optional record storage).
services:
backend:
build:
context: .
dockerfile: docker/Dockerfile.backend
container_name: diac-backend
env_file:
- .env
environment:
# Container-internal paths (override host paths from .env when present)
PORT: 8000
DIAC_CONSTANTS_PATH: /app/constants/
HF_HOME: /cache/huggingface
TRANSFORMERS_CACHE: /cache/huggingface
ports:
# Expose API directly for debugging/curl; frontend proxies /api in normal use
- "${PORT:-8000}:8000"
volumes:
- ./constants:/app/constants:ro
- huggingface-cache:/cache/huggingface
networks:
- diac-network
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 180s
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
args:
VITE_API_BASE_URL: ${VITE_API_BASE_URL:-/api}
VITE_API_KEY: ${VITE_API_KEY:-}
container_name: diac-frontend
ports:
- "${FRONTEND_PORT:-80}:80"
depends_on:
backend:
condition: service_healthy
networks:
- diac-network
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1/"]
interval: 30s
timeout: 5s
retries: 3
networks:
diac-network:
driver: bridge
name: diac-network
volumes:
huggingface-cache:
name: diac-huggingface-cache