services: app: build: . ports: - "5000:5000" depends_on: db: condition: service_healthy ollama: condition: service_started environment: DATABASE_URL_FILE: /run/secrets/fabled_assistant_db_url SECRET_KEY_FILE: /run/secrets/fabled_assistant_secret_key OLLAMA_URL: "http://ollama:11434" OLLAMA_MODEL: "${OLLAMA_MODEL:-llama3.1}" LOG_LEVEL: "${LOG_LEVEL:-INFO}" secrets: - fabled_assistant_db_url - fabled_assistant_secret_key networks: - frontend - backend healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:5000/api/health')"] interval: 30s timeout: 10s retries: 3 start_period: 30s deploy: resources: limits: memory: 512M restart_policy: condition: on-failure max_attempts: 5 db: image: postgres:16-alpine volumes: - pgdata:/var/lib/postgresql/data environment: POSTGRES_USER: fabled POSTGRES_PASSWORD_FILE: /run/secrets/fabled_assistant_db_password POSTGRES_DB: fabledassistant secrets: - fabled_assistant_db_password networks: - backend healthcheck: test: ["CMD-SHELL", "pg_isready -U fabled"] interval: 10s timeout: 5s retries: 5 deploy: resources: limits: memory: 256M restart_policy: condition: on-failure max_attempts: 5 ollama: image: ollama/ollama volumes: - ollama_models:/root/.ollama networks: - backend healthcheck: test: ["CMD", "curl", "-f", "http://localhost:11434/"] interval: 30s timeout: 10s retries: 3 start_period: 15s deploy: placement: constraints: - node.role == worker resources: limits: memory: 8G restart_policy: condition: on-failure max_attempts: 3 # To enable GPU support, uncomment the section below # (requires nvidia-container-toolkit) # deploy: # resources: # reservations: # devices: # - driver: nvidia # count: all # capabilities: [gpu] volumes: pgdata: ollama_models: networks: frontend: backend: internal: true secrets: fabled_assistant_secret_key: external: true fabled_assistant_db_password: external: true fabled_assistant_db_url: external: true