DocsData storagePersistent Disks

Persistent Disks

Attach an encrypted SSD disk to a web service, private service or background worker to keep local filesystem changes across deploys and restarts.

By default, every service on Muerte Cloud runs on an ephemeral filesystem: anything written to disk at runtime is discarded the next time the service redeploys or restarts. A persistent disk gives one specific mount path durable storage that survives the container lifecycle.

Persistent disks are a good fit for:

  • Self-hosted infrastructure (search indexes, message brokers, queues)
  • Blogging platforms, CMS installations and wikis
  • Collaboration apps with local uploads and attachments
  • Custom datastores when the managed database offering doesn't fit
Prefer a managed database when you can
For relational or key-value workloads, use a managed Muerte Cloud database instead of running your own on a disk. You get automated backups, point-in-time restore and high availability out of the box.

Disks use NVMe SSDs from the same hardware pool as our managed databases. All volumes are encrypted at rest, and so are their automatic daily snapshots.

Setup#

Before attaching a disk, review the limitations and considerations below — most notably that a disk pins the service to a single instance.

You can add a disk when creating a service (expand Advanced at the bottom of the form) or at any time later from the service's Disks tab in the dashboard.

  1. 1
    Set a mount path
    The absolute path inside the container where the disk is mounted. Only writes under this path are preserved — the rest of the filesystem stays ephemeral. See Mount path.
  2. 2
    Choose a size
    Start with the smallest size that fits your working set. You can grow a disk later at any time, but you cannot shrink it.
  3. 3
    Save
    Muerte Cloud triggers a new deploy. The disk becomes available to your service as soon as the deploy is live.

Mount path#

The mount path is an absolute directory inside your container. Data written under it is durable; data written anywhere else is discarded on the next deploy or restart.

Pick a mount path based on how your app writes data:

  • If your framework writes to a relative path (for example Rails ./storage for uploads), mount the disk at the absolute form of that path — or an ancestor of it.
  • Otherwise, mount a standalone directory such as /var/data and point your app at it via an environment variable.

Typical mount paths per runtime:

FieldDescription
Node.js / Python / Ruby / Elixir / RustSource lives at /opt/muerte/project/src. Example disk path: /opt/muerte/project/src/storage.
GoSource lives at /opt/muerte/project/go/src/<owner>/<repo>. Example disk path adds /data.
DockerSource lives at your Dockerfile WORKDIR (commonly /app). Example disk path: /app/storage.
StandaloneAny absolute directory you control, such as /var/data or /mnt/uploads.

Disallowed mount paths

These exact paths cannot be used as a mount root:

  • / (filesystem root)
  • /opt, /opt/muerte, /opt/muerte/project, /opt/muerte/project/src
  • /home, /home/muerte
  • /etc, /etc/secrets

Subdirectories of the above are allowed — for example, mounting at /opt/muerte/project/src/uploads works fine.

Monitoring usage#

Every service's Disks tab shows current used and free space, and a rolling chart of usage over time. Alerts fire automatically when a disk crosses 80% and 95% full so you can resize before running out.

Snapshots#

Muerte Cloud takes an encrypted snapshot of every persistent disk once every 24 hours. Snapshots are retained for at least seven days and can restore the disk to that point in time.

Restoring is a full replace
A snapshot restore replaces the entire disk contents. Any changes written after the snapshot was taken are lost, and partial restores of individual files are not supported.

Trigger a restore from the service's Disks tab. The service is redeployed automatically once the volume is rehydrated from the snapshot.

Restoring a self-hosted database

If the disk backs a self-hosted database (MySQL, MongoDB, Postgres running in your own container), do not rely on disk snapshots for recovery. A raw block-level snapshot of an active database's data directory may restore to an inconsistent state.

Instead, run application-level backups on a schedule — for example mysqldump, mongodump or pg_dump — and write the archives to object storage or a separate disk.

Getting files on and off a disk#

Muerte Cloud does not provide SSH or an in-browser shell into your containers, so there is no interactive way to copy files onto a running instance. Plan file transfer through your application instead:

  • Write an upload/download route in your own app that reads or writes under the disk's mount path.
  • Seed initial data at build time by copying it into the image — remember the disk is only attached at runtime, not during the build.
  • For recurring backups, restores or ad-hoc snapshots, use disk snapshots rather than trying to copy files by hand.

Limitations and considerations#

One instance only
A disk is attached to a single instance at runtime. A service with a disk cannot horizontally scale to multiple replicas.
Runtime only
Build and pre-deploy commands run on separate compute and cannot read the disk. Copy anything you need at build time into the image.
Brief downtime on deploy
Disks disable zero-downtime deploys. The old instance stops before the new one starts to prevent concurrent writes.
Grow, don't shrink
You can resize a disk up at any time without downtime. Shrinking is not supported — pick a starting size accordingly.
Not on cron jobs
Cron jobs run on ephemeral compute. Use a background worker with a disk if you need persistent state.
Encrypted end to end
Volumes and snapshots are encrypted at rest with per-project keys managed by the platform.