Conversation
Stateful apps whose data lives on disk (paperless documents/index,
uploads) lost everything on `up --build` — apps got only a read-only
source mount, never a persistent volume. Add a per-app `volumes:` key.
Each entry is a compose mount "source:/container/path[:ro]". A named
source ("data") becomes a named volume, namespaced with the app name
(paperless-data) so two apps' "data" volumes never collide, and declared
at the top level. A path source ("/srv/x", "~/x", "./x") is a host bind
mount, passed through verbatim and never declared.
Resolve rejects a malformed mount with an actionable remedy; the app
service block merges persistent volumes with the existing :ro source
mount under the one volumes: key.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- configuration.md: new "Persistent volumes — volumes:" section (named vs bind sources, namespacing, coexistence with the source mount) + the key in the map-form example. - runbook.md: copy-paste "Stateful app with persistent files — paperless-ngx" recipe (wrapper image, Redis+Postgres, volumes, manual role create, first-admin) + TOC entry; notes immich stays out of roost. - README.md: volumes: row in the per-app key table. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
An own-Dockerfile app builds everything into its image and defines its own filesystem layout, so bind-mounting host source over /app is never wanted — for an interpreted framework (django, rails) it would shadow the image's /app with a near-empty wrapper dir. Previously dodged only by picking framework: node (in the no-mount list); now correct for any framework. Lets a wrapper-image app (paperless) use its accurate framework: django. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Deploying roost-gh with
|
| Latest commit: |
e972b73
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://8bda1235.roost-gh.pages.dev |
| Branch Preview URL: | https://develop.roost-gh.pages.dev |
full.yml gains a stateful app (files on disk) with volumes: — a named source (persistent named volume) and a host bind mount, plus the own-Dockerfile + migrate:false + redis:true shape a wrapper-image app uses. examples/README lists volumes in the full.yml knob set and adds a "my app stores files on disk" recipe pointing at the paperless runbook. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The annotated config block on the landing page listed every per-app key except volumes:; add it (named volume + host-bind-mount note) for parity with the README key table and docs/configuration.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rework the paperless-ngx recipe to match what actually ships: - clone the fork to a real source dir and make its ROOT Dockerfile the wrapper (roost only builds a file named Dockerfile), backing up upstream and setting .dockerignore to * so the ~300MB tree isn't uploaded as build context on every build; commit so `roost deploy`'s ff-only pull stays clean. - own-Dockerfile app => no source mount, no generated healthcheck. - admin via PAPERLESS_ADMIN_USER/PASSWORD (no manual createsuperuser). - note volumes are keyed by app name, so repointing path: keeps data; and the "password authentication failed" symptom of a missing role. Add a "Sharing one base domain across both envs" subsection: the box owns the wildcard, the laptop uses exact per-host records that override it, `roost tunnel setup` is wrong there (it makes wildcards), and adding a host needs BOTH a DNS record AND a tunnel ingress rule (catch-all is 404) — plus how to rebuild a state.json that holds the other env's data. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Keep the internal/generate architecture notes current: the per-app volumes: key (named-vs-bind sources, app-name namespacing, NamedVolumes top-level declaration, ValidateVolume) and the rule that own-Dockerfile apps get no source mount (MountSource gated on !HasOwnDockerfile). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🎉 Release day | By @cdrrazan
3 commit(s) develop → main. Merging deploy sthe fresh changes!.
🚀 Features
🐛 Fixes
📝 Docs & Tests