Persistent storage
By default, an instance file system is ephemeral: files written by the application disappear when the instance restarts, receives a new version, or is replaced. Persistent storage keeps a directory you choose across restarts and deployments.
When to use it
Use persistent storage when the application needs to:
- keep user uploads;
- store generated files, such as PDFs, reports, or exports;
- preserve data of ready-made applications, such as n8n, Metabase, or WordPress;
- keep working files between processing steps.
Do not use it when data can be recreated at any time (local cache, temporary build files) or when a managed database is the right tool. Structured data, queries, and transactions belong in a database, not in files.
How to configure
Storage is defined when you create the HTTP project, in the Configure storage step:
- Choose Yes for Persistent storage.
- Set the capacity, between 1 GB and 250 GB.
- Enter the directory to persist: the absolute path, inside the application, where files are written. Examples:
/data,/app/uploads,/var/www/html/wp-content.
Important: the persisted directory cannot be changed after creation. Check your application or image documentation for the path that stores its data.
Some plans include a storage allowance; capacity above it is billed as shown in the summary before you confirm.
Durability
Persistent storage data is replicated in three copies. If a Zenifra server fails, the files remain available to the project.
Replication is not a backup: a file deleted or corrupted by the application is deleted or corrupted in every copy. Keep external copies of critical data.
Changing capacity
| Payment model | What is possible |
|---|---|
| Hourly | Increase capacity at any time. Decreasing is not allowed. |
| Monthly or yearly | Capacity is fixed during the contracted period. |
You can increase it in Edit project or through the storage API, with the project.storage.update permission. The API returns STORAGE_SIZE_CANNOT_DECREASE for reductions and STORAGE_UPDATE_NOT_ALLOWED_FOR_CONTRACT when the payment model does not allow the change.
Monitoring usage
On plans with storage metrics, the console shows used space on the project page. Through the API, use GET /project/:id/storage/usage with project.metrics.read. Track growth and increase capacity before reaching the limit: an application without disk space usually fails to write files or to start.
Preview environments
Previews get new, empty storage. Files from the main project are not copied. See Preview environments.
Next steps
- Environment variables
- Project configuration
- Create an HTTP project in the console
- Production checklist
FAQ
Can I add persistent storage after creating the project?
Storage activation and directory are defined at creation. If the project was created without storage, create a new project with the desired configuration and migrate the application.
Do multiple instances share the same files?
Treat the persisted directory as the application's local disk. For data that several instances must read and write consistently at the same time, prefer a database or a managed service.
What happens to the files when I delete the project?
Deleting the project permanently removes the storage and its files. Back up before deleting.
Environment variables
Configure environment variables and secrets for Zenifra HTTP projects through the console, CLI, or API, with limits, restarts, and best practices.
Network and access control
Choose between a public or private project, understand the Zenifra subdomain, and restrict access by IP with CIDR whitelist and blacklist rules.