The async engine needs greenlet at runtime, which the asyncio extra provides. Test-only deps (aiosqlite, pytest-asyncio) stay out of the image. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ebook Search Docker
Run the EPUB search app against the existing Postgres database on jeeves:
ebook-search-containers start --library-path /path/to/epubs --build
All ebook-search Docker files live in this directory:
Dockerfiledocker-compose.ymlcontainers.pycontainer.py
The app listens on http://localhost:8070.
Useful lifecycle commands:
ebook-search-containers build
ebook-search-containers start --library-path /path/to/epubs
ebook-search-containers logs
ebook-search-containers ps
ebook-search-containers stop
Direct compose usage from the repo root:
docker compose -f python/ebook_search/docker/docker-compose.yml ps
The compose service also loads the repo root .env into the container via env_file.
Mount your EPUB directory by setting EBOOK_LIBRARY_HOST_PATH in an env file or on the command line. The container sees it as /library, and EBOOK_SEARCH_LIBRARY_PATHS is set to /library inside the container.
Database connection settings are controlled by RICHIE_DB, RICHIE_HOST, RICHIE_PORT, RICHIE_USER, and RICHIE_PASSWORD. The default host is jeeves.
Startup runs the Richie Alembic migrations automatically after creating the main schema and vector extension.