Adds docker-compose.override.yml (local-only: publishes the server on 127.0.0.1:8080 and Postgres on 127.0.0.1:55432, crawls on demand) and docs/LOCAL.md covering the stack, Claude Code registration over both transports, the CLI, and the test suites. Two bugs that only running the real container could find: The mirror volume was root-owned while the container runs as node, so every file write failed with EACCES. Docker initialises a named volume from the image directory including its ownership, so the fix is to create /data/mirror owned by node in the image. This was easy to miss because the indexer records a per-file failure rather than crashing — the crawl "succeeded" with 4 skipped. Earlier direct-node testing missed it entirely by writing to a scratch dir owned by the developer. The store tests TRUNCATE, and pointing TEST_DATABASE_URL at the dev database put their fixtures into real data. They now refuse any database whose name does not contain "test". Verified against the rebuilt container: 4 files mirrored, image-only PDF detection firing in the real pipeline, both transports showing ✔ Connected in `claude mcp list`, and a whoami tool call driven end to end through `claude -p`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
21 lines
868 B
YAML
21 lines
868 B
YAML
# Local development only. Compose merges this automatically; it is not used on
|
|
# the Pi, where Caddy reaches the container over the shared Docker network and
|
|
# no host port is published.
|
|
services:
|
|
postgres:
|
|
ports:
|
|
# Loopback only. Lets `npm test` reach it via TEST_DATABASE_URL and lets
|
|
# the stdio server use the same index as the HTTP one.
|
|
- "127.0.0.1:55432:5432"
|
|
|
|
schulcloud-mcp:
|
|
environment:
|
|
# The bundled postgres service, reachable by name on the compose network.
|
|
DATABASE_URL: postgresql://schulcloud:${POSTGRES_PASSWORD:-schulcloud}@postgres:5432/schulcloud
|
|
# Crawl on demand while developing rather than every 6 hours.
|
|
CRAWL_INTERVAL_MS: 0
|
|
ports:
|
|
# Bound to loopback: this exposes the account's data, and the bearer token
|
|
# is the only thing in front of it.
|
|
- "127.0.0.1:8080:8080"
|