openreader/docs-site/docs/guides/storage-and-blob-behavior.md
Richard R 6d5fb65a72 feat(docs): add configurable rate limiting and external docs
Add environment variables for fine-grained control over TTS rate limiting
and Better Auth behavior. Move documentation to external Docusaurus site
with automated deployment workflows.

- TTS rate limiting can now be enabled/disabled via TTS_ENABLE_RATE_LIMIT
- Customizable daily limits for anonymous/authenticated users and IP backstops
- Better Auth rate limiting can be disabled via DISABLE_AUTH_RATE_LIMIT
- Rename library import env vars to IMPORT_LIBRARY_DIRS/DIR
- Add docs-site with Docusaurus and GitHub Actions workflows
- Update README to reference external documentation
2026-02-10 15:11:37 -07:00

44 lines
1.7 KiB
Markdown

---
title: Object / Blob Storage
---
This page documents storage backends, blob upload routing, and Docker mount behavior.
## Storage backends
- Default: embedded SQLite metadata + embedded SeaweedFS (`weed mini`) blobs
- External option: Postgres + external S3-compatible object storage
Storage variables are documented in [Environment Variables](./environment-variables) under the storage sections.
## Ports
- `3003`: OpenReader app and API routes
- `8333`: Embedded SeaweedFS S3 endpoint for direct browser blob access
## Upload behavior
- Primary path: browser uploads to presigned URL from `/api/documents/blob/upload/presign`
- Fallback path: `/api/documents/blob/upload/fallback` if direct upload fails or endpoint is unreachable
- Content serving path: `/api/documents/blob`
## Recommended Docker mounts
| Mount | Type | Recommended | Purpose | Example |
| --- | --- | --- | --- | --- |
| `/app/docstore` | Docker named volume | Yes (for persistence) | Persists SeaweedFS blob data, SQLite metadata DB, audiobook artifacts, migration/runtime files | `-v openreader_docstore:/app/docstore` |
| `/app/docstore/library` | Bind mount | Optional + `:ro` | Read-only source for server library import (files are copied/imported into client storage) | `-v /path/to/your/library:/app/docstore/library:ro` |
To import from mounted library: **Settings -> Documents -> Server Library Import**.
:::note
Every file in the mounted library is imported into client browser storage. Keep the library reasonably sized.
:::
## Private blob endpoint mode
If `8333` is not published externally:
- Document uploads still work through upload fallback proxy
- Reads/snippets continue through app API routes
- Direct presigned browser upload/download to embedded endpoint is unavailable