name: hackersearch services: meilisearch: # Matches production. The embedder needs indexing fragments (the # `multimodal` experimental feature), which v1.15 does not have. image: getmeili/meilisearch:v1.49.0 ports: # 7701 on the host: 7700 is commonly taken by other local Meilisearch instances. - "7701:7700" environment: MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-hackersearch-dev-master-key} MEILI_ENV: development volumes: - meili_data:/meili_data healthcheck: test: ["CMD", "curl", "-fs", "http://localhost:7700/health"] interval: 5s timeout: 5s retries: 10 indexer: build: context: ./indexer dockerfile: Dockerfile.dev depends_on: meilisearch: condition: service_healthy environment: MEILI_URL: http://meilisearch:7700 MEILI_MASTER_KEY: ${MEILI_MASTER_KEY:-hackersearch-dev-master-key} # Depth of the initial backfill. Unset it (empty) to index the FULL corpus. BACKFILL_RECENT: ${BACKFILL_RECENT:-100000} INDEXER_STATE_FILE: /data/indexer-state.json # Passed through from the host; unset means the enrich command's # `auto` extractor falls back to local HTML extraction. CLOUDFLARE_ACCOUNT_ID: CLOUDFLARE_API_TOKEN: # Crawl article content continuously, alongside backfill and sync, so # newly indexed stories get `content` without a separate command. ENRICH_ON_SYNC: ${ENRICH_ON_SYNC:-true} # Only crawl stories from 2025 onward. The full corpus is a multi-day # job; set an earlier date (or empty) to widen the window. ENRICH_SINCE: ${ENRICH_SINCE:-2025-01-01} volumes: - indexer_state:/data - cargo-registry:/usr/local/cargo/registry - cargo-git:/usr/local/cargo/git - target-cache:/app/target develop: watch: - action: sync path: ./indexer/src target: /app/src - action: rebuild path: ./indexer/Cargo.toml - action: rebuild path: ./indexer/Cargo.lock web: build: context: ./web dockerfile: Dockerfile.dev ports: - "3000:3000" depends_on: meilisearch: condition: service_healthy environment: WATCHPACK_POLLING: "true" # Must be reachable from the BROWSER. With OrbStack, the service DNS name # works from the host; plain Docker users can switch to http://localhost:7701. NEXT_PUBLIC_MEILISEARCH_HOST: ${NEXT_PUBLIC_MEILISEARCH_HOST:-http://localhost:7701} NEXT_PUBLIC_MEILISEARCH_API_KEY: ${MEILI_MASTER_KEY:-hackersearch-dev-master-key} develop: watch: - action: sync path: ./web/src target: /app/src - action: sync path: ./web/public target: /app/public - action: rebuild path: ./web/package.json volumes: meili_data: indexer_state: cargo-registry: cargo-git: target-cache: