Volumes
Persistent storage that survives deploys, restarts and scaling.
By default, every container that Nodion runs is ephemeral, anything written to its filesystem disappears when the container stops. That's the right behavior for stateless web apps, but sometimes you need real persistent storage: user uploads, generated reports, a search index, a SQLite database. That's what volumes are for.
A volume on Nodion is a piece of network-attached storage that lives at the project level. You create it once, then attach it to one or more processes of your applications. Each process picks its own mount path inside the container and decides whether it gets read-write or read-only access.
Creating a volume
Open the Volumes section in the navigation and click + New Volume. You only need to set three things:
- Name — a human-readable label, like
uploadsorsearch-index - Size — capacity in gigabytes (between 5 GB and 100 GB during the beta). You can grow a volume later, but you can't shrink it.
- Region — must match the region of the applications that will use this volume
The volume is provisioned within a few seconds and shows up in your project list. From there it's ready to be attached.
Attaching a volume to a process
Go to your application, open the Processes tab, click the volume button on the process you want to attach to, and pick the volume from the list. You'll be asked for two things:
- Container path — where the volume should appear inside the container, for example
/app/uploadsor/data - Read-only — if checked, the process can read from the volume but not write to it
The mount becomes active on the next deploy or container restart of that process.
Sharing a volume across processes
The same volume can be attached to multiple processes at the same time, and each one can use a different mount path and read/write mode. A common pattern is letting a worker generate files into a volume read-write while the web process serves them read-only:
web → /app/public/uploads (read-only)
worker → /app/public/uploads (read-write)Mount layout You can also share a volume between processes of different applications in the same project, useful for data pipelines where one app produces and another consumes.
Resizing a volume
Open the volume's detail page and use the resize panel. The new size has to be larger than the current one. The resize is applied online without unmounting, so your processes keep running.
Detaching and deleting
Detaching a volume from a process removes it from that container on the next deploy. The volume itself and the data on it are not affected.
Deleting a volume permanently removes the storage and the data on it. Make sure no process has it attached before you delete, otherwise the next deploy will fail with a missing-volume error.
Where volumes live
Volumes are network-attached storage, mounted into your containers over a fast in-region network. That's what allows multiple containers (and even multiple processes across applications) to read and write the same data. Latency is in the single-digit millisecond range for typical operations, but volumes are not a substitute for a tuned database, if you need transactional guarantees and complex queries, use one of our managed database services and keep volumes for file-style data.
What goes on a volume vs. into the image
A good rule of thumb:
- Code and dependencies belong in the image. They're rebuilt on every deploy and don't need to persist across versions.
- Generated files at runtime (uploads, reports, caches that need to survive restarts) belong on a volume.
- Sensitive secrets belong in environment variables, not in volume contents.