version: '3' x-postgres: &postgres-common image: "docker.io/pgvector/pgvector:pg15" user: postgres healthcheck: test: "exit 0" interval: 2s timeout: 12s retries: 3 services: postgres: <<: *postgres-common container_name: "omnivore-postgres" volumes: - pgdata:/var/lib/postgresql/data env_file: - .env networks: - omnivore-network migrate: image: "ghcr.io/omnivore-app/sh-migrate:latest" container_name: "omnivore-migrate" command: '/bin/sh ./packages/db/setup.sh' env_file: - .env depends_on: postgres: condition: service_healthy networks: - omnivore-network api: image: "ghcr.io/omnivore-app/sh-backend:latest" container_name: "omnivore-api" ports: - "4000:8080" healthcheck: test: ["CMD-SHELL", "nc -z 0.0.0.0 8080 || exit 1"] interval: 15s timeout: 90s retries: 6 env_file: - .env depends_on: migrate: condition: service_completed_successfully networks: - omnivore-network queue-processor: image: "ghcr.io/omnivore-app/sh-queue-processor:latest" container_name: "omnivore-queue-processor" env_file: - .env depends_on: api: condition: service_started networks: - omnivore-network web: image: "ghcr.io/omnivore-app/sh-web:latest" container_name: "omnivore-web" ports: - "3000:8080" env_file: - .env depends_on: api: condition: service_healthy networks: - omnivore-network image-proxy: image: "ghcr.io/omnivore-app/sh-image-proxy:latest" container_name: "omnivore-image-proxy" ports: - "7070:8080" env_file: - .env networks: - omnivore-network content-fetch: image: "ghcr.io/omnivore-app/sh-content-fetch:latest" container_name: "omnivore-content-fetch" ports: - "9090:8080" environment: - USE_FIREFOX=true env_file: - .env depends_on: redis: condition: service_healthy api: condition: service_healthy networks: - omnivore-network redis: image: "docker.io/library/redis:latest" container_name: "omnivore-redis" expose: - 6379 ports: - "6379:6379" healthcheck: test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ] volumes: - redis_data:/data networks: - omnivore-network minio: image: "docker.io/minio/minio:latest" container_name: "omnivore-minio" expose: - 9000 ports: - "9000:9000" - "9001:9001" healthcheck: test: [ "CMD", "mc", "ready", "local" ] interval: 5s timeout: 1s environment: - "MINIO_ACCESS_KEY=minio" - "MINIO_SECRET_KEY=miniominio" command: server /data --console-address ":9001" volumes: - minio_data:/data networks: - omnivore-network createbuckets: image: docker.io/minio/mc:latest environment: - MINIO_ACCESS_KEY=minio - MINIO_SECRET_KEY=miniominio - BUCKET_NAME=omnivore - ENDPOINT=http://minio:9000 depends_on: - minio entrypoint: > /bin/bash -c " sleep 5; until (/usr/bin/mc alias set myminio http://minio:9000 minio miniominio) do echo '...waiting...' && sleep 1; done; /usr/bin/mc mb myminio/omnivore; /usr/bin/mc anonymous set public myminio/omnivore; exit 0; " networks: - omnivore-network mail-watch-server: image: "ghcr.io/omnivore-app/sh-local-mail-watcher:latest" container_name: "omnivore-mail-watch-server" ports: - "4398:8080" env_file: - .env depends_on: redis: condition: service_healthy networks: - omnivore-network networks: omnivore-network: driver: bridge volumes: pgdata: redis_data: minio_data: