Skip to content

Make self-hosting turnkey: pullable multi-arch image + one-click deploy recipes#73

Merged
louisbels merged 4 commits into
mainfrom
claude/project-installation-setup-E0dyn
May 31, 2026
Merged

Make self-hosting turnkey: pullable multi-arch image + one-click deploy recipes#73
louisbels merged 4 commits into
mainfrom
claude/project-installation-setup-E0dyn

Conversation

@louisbels
Copy link
Copy Markdown
Member

@louisbels louisbels commented May 31, 2026

Makes Secret genuinely self-hostable: a real, pullable multi-arch image, a no-clone deploy path, and fixes for the port/upload regressions that broke the prebuilt-image flow.

Why

The compose file and docs referenced ghcr.io/largerio/secret:latest, but CI only tagged latest on semver releases (none exist) and built amd64 only — so the image was effectively unpullable and ARM hosts (Apple Silicon, many NAS/Pi) were unsupported. This PR fixes the publishing pipeline first, then documents turnkey deploys on top of it.

Changes

CI / image publishing (deploy.yml)

  • Tag :latest on default-branch pushes (not just semver releases) so the documented image actually exists.
  • Build linux/amd64 + linux/arm64 (adds setup-qemu-action for cross-build) so ARM hosts work.

Compose / runtime (docker-compose.yml, entrypoint.sh)

  • Use the prebuilt ghcr.io/largerio/secret image instead of build: (commented build kept for contributors).
  • Keep an explicit environment allowlist rather than env_fileenv_file injected PORT=3000 into the container, overriding the API's PORT=3001 so both API and web bound to :3000 (collision). It also silently dropped the BODY_SIZE_LIMIT default.
  • Default BODY_SIZE_LIMIT to ~101 MB in entrypoint.sh so uploads work out of the box for docker run / Render / image-based deploys (adapter-node otherwise caps bodies at 512 KB).

Docs & one-click deploy (docs/self-hosting.md, README.md, render.yaml, .env.example)

  • New self-hosting guide: no-clone VPS deploy, Synology Container Manager, one-liner docker run, Coolify, Portainer, Railway/Render, reverse proxy, backup/restore, multi-arch note.
  • Backup/restore documents discovering the real volume name (compose prefixes it, e.g. secret_secret-data) instead of the unprefixed secret-data.
  • render.yaml blueprint for one-click Render deploy.
  • README two-path Quick Start; .env.example neutral APP_URL default + exposed-vs-internal port clarification.

Commits

  • docs: make self-hosting turnkey on Synology/VPS
  • ci: publish :latest + multi-arch image; add one-click deploy recipes
  • fix: correct regressions found while reviewing self-host changes

Deploy pipeline note

The dockerdeploy jobs run only on main/tags. deploy has needs: docker, and the prod step runs docker compose pull && docker compose up -d, so the freshly-pushed image is the one deployed (no stale/previous image). Prod's compose references a moving tag (:main/:latest), both of which this PR ensures are published.

https://claude.ai/code/session_01WkTWZvbmaA6aUT5hQSTz9m

claude added 3 commits May 31, 2026 03:23
- docker-compose.yml: use prebuilt ghcr.io/largerio/secret image instead of
  build:. (commented build kept for contributors); load config via env_file
- .env.example: neutral APP_URL default + clarify exposed vs internal port
- docs/self-hosting.md: new guide (VPS no-clone deploy, Synology Container
  Manager, reverse proxy, backup/restore)
- README: two-path Quick Start + link to the self-hosting guide

https://claude.ai/code/session_01WkTWZvbmaA6aUT5hQSTz9m
The compose/docs reference ghcr.io/largerio/secret:latest, but CI only tagged
latest on semver releases (none exist) and built amd64 only — so the image was
unpullable and ARM hosts unsupported. Fix both, then document turnkey deploys.

- deploy.yml: tag latest on default-branch pushes; build linux/amd64+arm64
  (adds setup-qemu-action for cross-build)
- docs/self-hosting.md: one-liner docker run, Coolify, Portainer, Railway/Render
  recipes + multi-arch note
- render.yaml: Render blueprint for one-click deploy

https://claude.ai/code/session_01WkTWZvbmaA6aUT5hQSTz9m
- docker-compose.yml: drop the env_file approach and restore the explicit
  environment allowlist. env_file injected PORT=3000 from .env into the
  container, overriding the Dockerfile's PORT=3001 for the API, so both API and
  web bound to 3000 (collision). It also dropped the BODY_SIZE_LIMIT default.
- entrypoint.sh: default BODY_SIZE_LIMIT to ~101MB for the web server so the
  image accepts uploads out of the box for docker run / Render / Coolify-image
  deploys (adapter-node otherwise caps bodies at 512K).
- docs/self-hosting.md: fix backup/restore — compose prefixes the volume with
  the project name (secret_secret-data), so document discovering the real name
  instead of the unprefixed secret-data.

https://claude.ai/code/session_01WkTWZvbmaA6aUT5hQSTz9m
@louisbels louisbels changed the title docs: make self-hosting turnkey on Synology/VPS Make self-hosting turnkey: pullable multi-arch image + one-click deploy recipes May 31, 2026
@louisbels louisbels merged commit 019e3a5 into main May 31, 2026
10 checks passed
@louisbels louisbels deleted the claude/project-installation-setup-E0dyn branch May 31, 2026 15:40
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.

2 participants