This document is the single Docker runbook for Reader Next.
Dockerfile # canonical image build entrypoint
deploy/
compose.yml # simple user deployment
compose.local.yml # local always-on container bound to repo storage/
Caddyfile # optional Caddy reverse proxy config
compose.caddy.yml # production sample with Caddy
env.docker.example # deploy/compose.yml environment template
env.prod.example # VPS deployment environment template
.github/workflows/docker-publish.yml # multi-arch GHCR publishing
Deprecated root files were removed: Dockerfile.prod, Dockerfile.x86, docker-compose.prod.yml, DOCKER_RELEASE.md, and RELEASE_WORKFLOW.md.
Default image repo: ghcr.io/maple0517/reader-next.
Tags:
latest: newest tagged release.vX.Y.Z: exact release tag.X.Y.Z: exact release tag without the leadingv.X.Y: newest patch release in a minor line.
Architectures:
linux/amd64linux/arm64
Run from the repository root:
cp deploy/env.docker.example .env.docker
docker compose -f deploy/compose.yml up -dUpgrade:
docker compose -f deploy/compose.yml pull
docker compose -f deploy/compose.yml up -dRuntime contract:
- Container port:
18080. - Persistent data:
/app/storage. - Static frontend:
/app/web/dist. - Default database URL:
sqlite:/app/storage/reader.db?mode=rwc. - Secrets stay in
.env.dockeror.env.prod; never bakeSECURE_KEYorINVITE_CODEinto the image.
If you want an always-on local container for day-to-day reading while keeping development writes isolated, run:
docker compose -f deploy/compose.local.yml up -dContract:
- Host port defaults to
28080. - Repo
storage/is bind-mounted into/app/storage. - The container uses the repo's current
storage/reader.db. - Local development should use a separate db such as
dev-storage/reader.db.
Recommended dev startup:
cp .env.dev.example .env.dev
./scripts/run-dev.shRun from the repository root:
cp deploy/env.prod.example .env.prod
docker compose -f deploy/compose.caddy.yml up -dThe deploy script uses the same compose file:
APP_DIR=/opt/reader/app scripts/deploy-do.sh- Verify changes locally.
- Bump versions and create a tag through the release helper:
./scripts/release.sh v1.0.10- Pushing the
vX.Y.Ztag triggers.github/workflows/docker-publish.yml. - The workflow builds
amd64andarm64natively, then creates a multi-arch manifest.
Verify a published image:
docker buildx imagetools inspect ghcr.io/maple0517/reader-next:v1.0.10docker build -t reader-next:local .
docker run --rm -p 18080:18080 -v reader-storage-test:/app/storage reader-next:localOpen http://localhost:18080.