|
23 | 23 | # --profile workflows n8n workflow automation (Slack/Teams/email fan-out, scheduled reports) |
24 | 24 | # --profile storage MinIO S3-compatible object store (Litestream destination, artifact blobs) |
25 | 25 | # --profile caddy Caddy HTTPS terminator with auto-TLS (set DOMAIN= in .env) |
| 26 | +# --profile discovery-index Local orchestration for the hosted discovery-index service (#4250, #7164) |
26 | 27 | # --profile observability Prometheus + Alertmanager + Loki + Promtail + Grafana (pre-wired) |
27 | 28 | # --profile ams-observability Exports AMS (loopover-miner) attempt-log/prediction-ledger data to the |
28 | 29 | # AMS Attempt Log / Prediction Ledger Grafana datasources |
@@ -670,6 +671,47 @@ services: |
670 | 671 | start_period: 20s |
671 | 672 | retries: 3 |
672 | 673 |
|
| 674 | + # ── discovery-index (--profile discovery-index) ──────────────────────────── |
| 675 | + # Local orchestration only, for testing against the hosted discovery-index service (#4250, #7164) before |
| 676 | + # it exists anywhere public -- the actual public hosting/DNS/TLS decision is separate (#7167), not this. |
| 677 | + # Unlike rees above, the build context is the repo root: this service depends on the @loopover/engine |
| 678 | + # workspace package, so its Dockerfile installs via npm workspaces rather than a self-contained `npm ci`. |
| 679 | + discovery-index: |
| 680 | + build: |
| 681 | + context: . |
| 682 | + dockerfile: packages/discovery-index/Dockerfile |
| 683 | + restart: unless-stopped |
| 684 | + <<: *default-logging |
| 685 | + profiles: ["discovery-index"] |
| 686 | + environment: |
| 687 | + PORT: "8080" |
| 688 | + # Soft defaults, not ":?required" -- compose interpolates every service's env vars for the whole file |
| 689 | + # even when --profile discovery-index isn't active (same reasoning as REES_SHARED_SECRET above). Unset |
| 690 | + # DISCOVERY_INDEX_SHARED_SECRET means the service fails closed (503) on every query call; unset |
| 691 | + # DISCOVERY_INDEX_GITHUB_TOKEN means /ready reports not-ready. |
| 692 | + DISCOVERY_INDEX_SHARED_SECRET: ${DISCOVERY_INDEX_SHARED_SECRET:-} |
| 693 | + DISCOVERY_INDEX_GITHUB_TOKEN: ${DISCOVERY_INDEX_GITHUB_TOKEN:-} |
| 694 | + # Never published to the host -- reached only over the internal docker network, same in-network-only |
| 695 | + # posture as rees above. |
| 696 | + expose: |
| 697 | + - "8080" |
| 698 | + deploy: |
| 699 | + resources: |
| 700 | + limits: |
| 701 | + memory: "${DISCOVERY_INDEX_MEM_LIMIT:-512m}" |
| 702 | + healthcheck: |
| 703 | + test: |
| 704 | + [ |
| 705 | + "CMD", |
| 706 | + "node", |
| 707 | + "-e", |
| 708 | + "fetch('http://127.0.0.1:8080/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))", |
| 709 | + ] |
| 710 | + interval: 30s |
| 711 | + timeout: 5s |
| 712 | + start_period: 20s |
| 713 | + retries: 3 |
| 714 | + |
673 | 715 | # ── Litestream (--profile litestream) ───────────────────────────────────── |
674 | 716 | # Continuous WAL backup of the SQLite DB to S3/B2/R2. Copy litestream.yml.example |
675 | 717 | # → litestream.yml and fill in your bucket. Set LITESTREAM_* secrets in .env. |
|
0 commit comments