Files
iistwin/docker-compose.yml

181 lines
5.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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/volga.osrm
volumes:
- ./osrm-data:/data:ro
volumes:
crm_data:
postgres_data:
minio_data:
ollama_data:
traccar_logs:
traccar_data: