# MiroFish deploy overlay — agent.profikid.nl # # Project conventions (matches hermes, snake, wiki siblings): # /docker//docker-compose.yml # COMPOSE_PROJECT_NAME= # TRAEFIK_HOST=agent.profikid.nl # # Single port (3000) exposed to Traefik; nginx inside the container # serves the built frontend and reverse-proxies /api/* + /health to Flask. # # Memory graph: FalkorDB (in-memory graph store) on a shared network. services: falkordb: image: falkordb/falkordb:latest container_name: mirofish-falkordb restart: unless-stopped expose: - "6379" volumes: - falkordb-data:/data healthcheck: test: ["CMD-SHELL", "redis-cli ping | grep -q PONG || exit 1"] interval: 15s timeout: 3s retries: 5 start_period: 20s networks: - mirofish_net mirofish: build: context: .. dockerfile: Dockerfile image: mirofish:latest container_name: mirofish restart: unless-stopped depends_on: falkordb: condition: service_healthy env_file: - secrets.env environment: FALKORDB_HOST: falkordb FALKORDB_PORT: "6379" expose: - "3000" labels: - traefik.enable=true - traefik.http.routers.${COMPOSE_PROJECT_NAME:-mirofish}.rule=Host(`${COMPOSE_PROJECT_NAME:-mirofish}.${TRAEFIK_HOST:-agent.profikid.nl}`) - traefik.http.routers.${COMPOSE_PROJECT_NAME:-mirofish}.entrypoints=websecure - traefik.http.routers.${COMPOSE_PROJECT_NAME:-mirofish}.tls.certresolver=letsencrypt - traefik.http.services.${COMPOSE_PROJECT_NAME:-mirofish}.loadbalancer.server.port=3000 # HTTP -> HTTPS redirect - traefik.http.routers.${COMPOSE_PROJECT_NAME:-mirofish}-http.rule=Host(`${COMPOSE_PROJECT_NAME:-mirofish}.${TRAEFIK_HOST:-agent.profikid.nl}`) - traefik.http.routers.${COMPOSE_PROJECT_NAME:-mirofish}-http.entrypoints=web - traefik.http.routers.${COMPOSE_PROJECT_NAME:-mirofish}-http.middlewares=redirect-to-https - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https - traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true volumes: - uploads:/app/backend/uploads - flask-logs:/app/logs - embedding-model:/root/.cache/huggingface # cache the sentence-transformers model healthcheck: test: ["CMD", "curl", "-fsS", "http://127.0.0.1:3000/health"] interval: 30s timeout: 5s retries: 5 start_period: 90s networks: - mirofish_net # One-shot e2e test. Built but only runs when you opt in: # docker compose --profile e2e run --rm mirofish-e2e # Output is printed to the host (PASS/FAIL exit code). mirofish-e2e: build: context: .. dockerfile: deploy/Dockerfile.e2e image: mirofish-e2e:latest container_name: mirofish-e2e depends_on: falkordb: condition: service_healthy env_file: - secrets.env environment: FALKORDB_HOST: falkordb FALKORDB_PORT: "6379" E2E_MAX_CHUNKS: "2" networks: - mirofish_net profiles: ["e2e"] restart: "no" volumes: uploads: flask-logs: falkordb-data: embedding-model: networks: mirofish_net: name: mirofish_net