Skip to content

docs(deploy): Dockerfile + compose template + deploy guide#33

Merged
albedosehen merged 1 commit into
mainfrom
feat/dockerfile-deploy-template
May 9, 2026
Merged

docs(deploy): Dockerfile + compose template + deploy guide#33
albedosehen merged 1 commit into
mainfrom
feat/dockerfile-deploy-template

Conversation

@albedosehen
Copy link
Copy Markdown
Contributor

Generic deploy infrastructure so operators can stand up private rota instances from this public repo without any secrets entering the source tree.

  • Dockerfile — multi-stage rust:1.90-slim-bookworm build into gcr.io/distroless/cc-debian12 runtime. Ships both rotad and rota binaries. Builds with --locked against the pinned Cargo.lock for reproducibility. Runs as root so file-mode 0600 mounts (config + per-cert keys) are readable without UID-mapping gymnastics.

  • deploy/compose.yml — operator-private template. Bind-mounts a workdir layout (rota.yaml, secrets/, keys/, data/, run/) into the container. Image is pulled from ghcr.io/oneiriq/rota:latest. Dashboard binds 127.0.0.1 by default so it's reverse-proxy-friendly.

  • deploy/README.md — walkthrough covering the public/private split, the Synology /volume1/docker/rota/ workdir convention, build options (on-host build vs docker save | ssh host docker load), minimal rota.yaml, CLI access via docker exec, upgrades, federation pointer.

  • .dockerignore — filter book/, docs/, *.md, .github/, AppleDouble noise, target/. Lean build context.

Verified

  • cargo build --release --bin rotad --bin rota --locked clean (5m 45s on Mac)
  • cargo fmt --all --check clean

Not verified (deferred to first deploy)

  • The Dockerfile actually builds end-to-end. Mac arm64→amd64 via QEMU is unreliable per prior incidents; verification happens when the image gets built on aur0.
  • ghcr push workflow. Future PR can add .github/workflows/release.yml that builds + pushes on tag.

Generic deploy infrastructure for shipping a private rota instance
from this public repo. No operator data anywhere; all secrets +
config + per-cert private keys live only on the deploy host.

* Dockerfile: multi-stage rust:1.90-slim-bookworm build into
  gcr.io/distroless/cc-debian12 runtime. Ships both `rotad` and
  `rota` binaries. Distroless cc gives glibc + ca-certs without a
  shell; runs as root so file-mode 0600 mounts (config + per-cert
  keys) are readable without UID-mapping gymnastics. Builds with
  --locked against the pinned Cargo.lock for reproducible images.

* deploy/compose.yml: bind-mount template that points at a host
  workdir with rota.yaml, secrets/, keys/, data/, run/. Image is
  pulled from ghcr.io/oneiriq/rota; operator never builds locally
  unless they want to. ROTA_DASHBOARD_PORT defaults to 127.0.0.1
  so the dashboard is reverse-proxy-friendly out of the box.

* deploy/README.md: walkthrough covering the public/private split,
  workdir layout (Synology DSM /volume1/docker/rota/ convention),
  build options (on-host vs docker save/load), minimal rota.yaml
  reference, bring-it-up commands, CLI access via docker exec,
  upgrade flow, federation pointer.

* .dockerignore: filter book/, docs/, *.md, .github/, AppleDouble
  noise, target/. Keeps the build context lean.
@albedosehen albedosehen merged commit cd7453e into main May 9, 2026
1 check passed
@albedosehen albedosehen deleted the feat/dockerfile-deploy-template branch May 9, 2026 02:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant