services: postgres: image: postgres:16-alpine container_name: dapp-postgres restart: unless-stopped volumes: - postgres_data:/var/lib/postgresql/data - ./backend/db/data:/mnt/isic_csv_data environment: POSTGRES_DB: ${DB_NAME:-dapp_db} POSTGRES_USER: ${DB_USER:-dapp_user} POSTGRES_PASSWORD: ${DB_PASSWORD:-dapp_password} ports: - '5432:5432' healthcheck: test: - CMD-SHELL - pg_isready -U ${DB_USER:-dapp_user} -d ${DB_NAME:-dapp_db} interval: 5s timeout: 5s retries: 5 ollama: image: ollama/ollama:latest container_name: dapp-ollama restart: unless-stopped volumes: - ollama_data:/root/.ollama ports: - '11434:11434' command: serve backend: build: context: ./backend dockerfile: Dockerfile container_name: dapp-backend restart: unless-stopped depends_on: postgres: condition: service_healthy ollama: condition: service_started volumes: - ./backend:/app - ./frontend/dist:/app/frontend_dist:ro - ./cloudflared.env:/cloudflared.env - /var/run/docker.sock:/var/run/docker.sock environment: - NODE_ENV=${NODE_ENV:-development} - PORT=${PORT:-8000} - DB_HOST=postgres - DB_PORT=5432 - DB_NAME=${DB_NAME:-dapp_db} - DB_USER=${DB_USER:-dapp_user} - DB_PASSWORD=${DB_PASSWORD:-dapp_password} - >- DATABASE_URL=postgresql://${DB_USER:-dapp_user}:${DB_PASSWORD:-dapp_password}@postgres:5432/${DB_NAME:-dapp_db} - OLLAMA_BASE_URL=http://ollama:11434 - OLLAMA_MODEL=${OLLAMA_MODEL:-qwen2.5:7b} - OLLAMA_EMBEDDINGS_MODEL=${OLLAMA_EMBEDDINGS_MODEL:-qwen2.5:7b} - FRONTEND_URL=http://localhost:5173 ports: - '8000:8000' extra_hosts: - host.docker.internal:host-gateway frontend: build: context: ./frontend dockerfile: Dockerfile container_name: dapp-frontend restart: unless-stopped depends_on: - backend volumes: - ./frontend:/app - frontend_node_modules:/app/node_modules ports: - '5173:5173' command: yarn run dev -- --host 0.0.0.0 ollama-setup: image: curlimages/curl:latest container_name: dapp-ollama-setup depends_on: - ollama restart: on-failure command: | sh -c " echo 'Waiting for Ollama to be ready...' until curl -s http://ollama:11434/api/tags >/dev/null; do sleep 5 done echo 'Ollama is ready, pulling qwen2.5-7b model...' curl -X POST http://ollama:11434/api/pull -d '{\"name\":\"${OLLAMA_MODEL:-qwen2.5:7b}\"}' -H 'Content-Type: application/json' echo 'Done!' " cloudflared: build: context: . dockerfile: Dockerfile.cloudflared restart: unless-stopped volumes: - ./start-cloudflared.sh:/start-cloudflared.sh - ./cloudflared.env:/cloudflared.env - ./.cloudflared:/etc/cloudflared depends_on: - backend dns: - 1.1.1.1 - 8.8.8.8 healthcheck: test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:39693/metrics", "||", "exit", "1"] interval: 30s timeout: 10s retries: 3 start_period: 60s environment: - TUNNEL_METRICS=0.0.0.0:39693 cloudflared-agent: build: context: . dockerfile: Dockerfile.agent container_name: dapp-cloudflared-agent restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock ports: - "9000:9000" depends_on: - cloudflared volumes: postgres_data: null ollama_data: null backend_node_modules: null frontend_node_modules: null