Docker Quick Start
Prerequisites
- A recent Docker version installed
- A TTS API server that OpenReader can reach (Kokoro-FastAPI, Orpheus-FastAPI, DeepInfra, OpenAI, or equivalent)
If you have suitable hardware, you can run Kokoro locally with Docker. See Kokoro-FastAPI.
1. Start the Docker container
- Minimal
- Localhost
- LAN Host
Auth disabled, embedded storage ephemeral, no library import:
docker run --name openreader \
--restart unless-stopped \
-p 3003:3003 \
-p 8333:8333 \
ghcr.io/richardr1126/openreader:latest
Persistent storage, embedded SeaweedFS weed mini, optional auth, optional library mount:
docker run --name openreader \
--restart unless-stopped \
-p 3003:3003 \
-p 8333:8333 \
-v openreader_docstore:/app/docstore \
-v /path/to/your/library:/app/docstore/library:ro \
-e API_BASE=http://host.docker.internal:8880/v1 \
-e API_KEY=none \
-e BASE_URL=http://localhost:3003 \
-e AUTH_SECRET=$(openssl rand -hex 32) \
ghcr.io/richardr1126/openreader:latest
Use this when the app should be reachable from other devices on your LAN:
docker run --name openreader \
--restart unless-stopped \
-p 3003:3003 \
-p 8333:8333 \
-v openreader_docstore:/app/docstore \
-e API_BASE=http://host.docker.internal:8880/v1 \
-e BASE_URL=http://<YOUR_LAN_IP>:3003 \
-e AUTH_SECRET=$(openssl rand -hex 32) \
-e AUTH_TRUSTED_ORIGINS=http://localhost:3003,http://127.0.0.1:3003 \
-e USE_ANONYMOUS_AUTH_SESSIONS=true \
ghcr.io/richardr1126/openreader:latest
Replace <YOUR_LAN_IP> with the Docker host IP address on your local network to allow access from other devices.
- Remove
/app/docstore/libraryif you do not need server library import. - Remove either
BASE_URLorAUTH_SECRETto keep auth disabled. - Set
API_BASEto your reachable TTS server base URL.
8333 ExposureExpose 8333 for direct browser presigned upload/download with embedded SeaweedFS.
If 8333 is not reachable from the browser, direct presigned access is unavailable. Uploads can still fall back to /api/documents/blob/upload/fallback, and document reads/downloads continue through /api/documents/blob.
- Auth is enabled only when both
BASE_URLandAUTH_SECRETare set. - DB/storage migrations run automatically at container startup via the shared entrypoint.
2. Configure settings in the app UI
- Set TTS provider and model in Settings
- Set TTS API base URL and API key if needed
- Select the model voice from the voice dropdown
3. Update Docker image
Legacy image compatibility: ghcr.io/richardr1126/openreader-webui:latest remains available as an alias.
docker stop openreader || true && \
docker rm openreader || true && \
docker image rm ghcr.io/richardr1126/openreader:latest || true && \
docker pull ghcr.io/richardr1126/openreader:latest
If you use a mounted volume for /app/docstore, your persisted data remains after image updates.
Visit http://localhost:3003 after startup.