| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| version: '3.8' |
|
|
| services: |
| |
| nginx: |
| image: nginx:alpine |
| container_name: socar-nginx |
| ports: |
| - "80:80" |
| - "443:443" |
| volumes: |
| - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro |
| - ./nginx/ssl:/etc/nginx/ssl:ro |
| - ./certbot/www:/var/www/certbot:ro |
| depends_on: |
| socar-ai-system: |
| condition: service_healthy |
| restart: unless-stopped |
| healthcheck: |
| test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:80/"] |
| interval: 30s |
| timeout: 10s |
| retries: 3 |
| networks: |
| - socar-network |
| labels: |
| - "com.socar.service=nginx-proxy" |
| - "com.socar.ssl=enabled" |
|
|
| |
| certbot: |
| image: certbot/certbot:latest |
| container_name: socar-certbot |
| volumes: |
| - ./nginx/ssl:/etc/letsencrypt:rw |
| - ./certbot/www:/var/www/certbot:rw |
| entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'" |
| networks: |
| - socar-network |
| labels: |
| - "com.socar.service=certbot" |
| - "com.socar.purpose=ssl-renewal" |
|
|
| |
| socar-ai-system: |
| build: |
| context: . |
| dockerfile: Dockerfile |
| container_name: socar-ai-system |
| |
| expose: |
| - "8000" |
| env_file: |
| - .env |
| environment: |
| - PYTHONUNBUFFERED=1 |
| - PRODUCTION=true |
| - HTTPS_ONLY=true |
| - TRUSTED_HOSTS=${TRUSTED_HOSTS:-localhost} |
| restart: unless-stopped |
| healthcheck: |
| test: ["CMD", "curl", "-f", "http://localhost:8000/health"] |
| interval: 30s |
| timeout: 10s |
| retries: 3 |
| start_period: 40s |
| networks: |
| - socar-network |
| labels: |
| - "com.socar.description=SOCAR Historical Documents AI System" |
| - "com.socar.features=OCR,LLM,Frontend" |
| - "com.socar.version=1.0.0" |
| - "com.socar.environment=production" |
|
|
| networks: |
| socar-network: |
| driver: bridge |
| ipam: |
| config: |
| - subnet: 172.28.0.0/16 |
|
|
| |
| volumes: |
| ssl-certs: |
| driver: local |
|
|