services: app: build: . ports: - "5000:5000" env_file: - .env environment: OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-http://ollama:11434} DOC_WORKER_URL: ${DOC_WORKER_URL:-http://document-worker:3000} # GPS: URL Traccar API внутри Docker-сети (user/password — в .env) TRACCAR_API_URL: ${TRACCAR_API_URL:-http://traccar:8082} volumes: - crm_data:/app/data restart: unless-stopped depends_on: db: condition: service_healthy required: false minio: condition: service_healthy required: false ollama: condition: service_healthy required: false db: image: postgres:16-alpine profiles: - with-postgres environment: POSTGRES_DB: ${POSTGRES_DB:-appdb} POSTGRES_USER: ${POSTGRES_USER:-appuser} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required} volumes: - postgres_data:/var/lib/postgresql/data restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-appuser} -d ${POSTGRES_DB:-appdb}"] interval: 5s timeout: 5s retries: 10 start_period: 10s minio: image: minio/minio:latest profiles: - with-minio command: server /data --console-address :9001 ports: - "9000:9000" # S3 API (используется приложением) - "9001:9001" # MinIO Web Console (http://localhost:9001) environment: MINIO_ROOT_USER: ${MINIO_ACCESS_KEY:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY:?MINIO_SECRET_KEY is required} volumes: - minio_data:/data restart: unless-stopped healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 10s timeout: 5s retries: 10 start_period: 15s webdav: image: rclone/rclone:latest profiles: - with-minio entrypoint: /bin/sh command: > -c "rclone serve webdav --addr :8080 --user $${WEBDAV_USER:-admin} --pass $${WEBDAV_PASSWORD:?WEBDAV_PASSWORD is required} --no-checksum :s3:$${MINIO_BUCKET:-files} --s3-provider=Minio --s3-access-key-id=$${MINIO_ACCESS_KEY:-minioadmin} --s3-secret-access-key=$${MINIO_SECRET_KEY} --s3-endpoint=http://minio:9000 --s3-no-check-bucket" ports: - "8080:8080" # WebDAV (http://device-ip:8080) environment: WEBDAV_USER: ${WEBDAV_USER:-admin} WEBDAV_PASSWORD: ${WEBDAV_PASSWORD:-} MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-} MINIO_BUCKET: ${MINIO_BUCKET:-files} restart: unless-stopped depends_on: minio: condition: service_healthy ollama: image: ollama/ollama:latest profiles: - with-ollama ports: - "11434:11434" environment: - OLLAMA_KEEP_ALIVE=${OLLAMA_KEEP_ALIVE:-5m} - OLLAMA_NUM_PARALLEL=1 volumes: - ollama_data:/root/.ollama restart: unless-stopped healthcheck: test: ["CMD-SHELL", "ollama list >/dev/null 2>&1 || exit 1"] interval: 10s timeout: 5s retries: 12 start_period: 30s # Раскомментируйте секцию ниже для поддержки NVIDIA GPU: # deploy: # resources: # reservations: # devices: # - driver: nvidia # count: all # capabilities: [gpu] document-worker: image: ghcr.io/iisultanov/iistwin-document-worker:latest env_file: - .env environment: PORT: 3000 # Порт не публикуется наружу — worker доступен только внутри Docker-сети volumes: - crm_data:/app/data restart: unless-stopped healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:3000/health"] interval: 30s timeout: 10s retries: 3 start_period: 30s traccar: image: traccar/traccar:latest container_name: traccar restart: unless-stopped ports: - "5055:5055" # OsmAnd/HTTP — приём точек с трекеров/приложений - "5023:5023" # GT06 (Concox, Coban, Jimi) - "5023:5023/udp" - "5027:5027" # Teltonika (FMB920/FMB125/FMC130) - "5027:5027/udp" - "5001:5001" # GPS103 / TK-102/103 - "5001:5001/udp" - "5013:5013" # H02 - "5013:5013/udp" - "5036:5036" # Suntech - "5036:5036/udp" # Web UI Traccar наружу не публикуем — только внутренняя Docker-сеть. # При необходимости доступа извне раскомментируйте: # - "5082:8082" # web UI volumes: - traccar_logs:/opt/traccar/logs - traccar_data:/opt/traccar/data - ./traccar/traccar.xml:/opt/traccar/conf/traccar.xml:ro # Map matching (привязка GPS-треков к дорогам) — OSRM, карта Приволжского округа. # Только внутренняя Docker-сеть (приложение ходит по http://osrm:5000). osrm: image: osrm/osrm-backend:latest container_name: osrm restart: unless-stopped command: osrm-routed --algorithm mld /data/region.osrm volumes: - ./osrm-data-ru:/data:ro volumes: crm_data: postgres_data: minio_data: ollama_data: traccar_logs: traccar_data: