Skip to content

Volumes

A volume is a block of persistent storage you can mount into one or more apps at a specific path. Anything written there survives restarts, re-deploys, and hibernation — unlike the app’s own container filesystem, which is recreated on every deploy.

Ghaymah Managed Volumes page
The Managed Volumes page lists your persistent volumes.

Click Create Volume, name it, and choose a size (between 50 Mi and 10 Gi):

Create Volume form
Provision a volume and attach it to an app in the Deploy App wizard.
Use a volume for… Use S3 for…
Databases and files that need a real filesystem Large blobs, uploads, static assets
App state that must survive a restart Objects accessed over HTTP/S3 API
Low-latency, direct file access Sharing files across many apps or users
Terminal window
curl -X POST https://api.cumin.dev/volumes \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "project_id": "…", "name": "app-data", "size": 10737418240 }'

size is in bytes — the example above is 10 GB. The response returns the volume id, which you use when mounting it into an app.

Add the volume to an app’s mounts list, specifying the container path:

{
"project_id": "…",
"name": "my-api",
"image": "docker.io/nginx:latest",
"ports": [{ "name": "web", "number": 80 }],
"mounts": [{ "volume_id": "<volume-id>", "path": "/data" }],
"cpu": 256,
"memory": 512,
"instances": 1,
"hibernated": false
}

Files written to /data inside the container now persist on the volume.

Terminal window
curl https://api.cumin.dev/volumes \
-H "Authorization: Bearer $TOKEN"
Terminal window
curl -X DELETE https://api.cumin.dev/volumes/<volume-id> \
-H "Authorization: Bearer $TOKEN"

Managed PostgreSQL instances are backed by a volume too — you pass a volume_id when creating a database. See Managed PostgreSQL for details.