Volumes

Share post:

Apps in Appliku are running in containers and the filesystem is ephemeral. Application data is not persisted across deploys and restarts, and this works just fine for most apps.

The data is usually stored in database.

And for files, scalable solution is S3-compatible services like AWS S3, Digital Ocean Spaces, etc

But while S3 is a great solution for bigger apps, it is not convenient for spinning up quick MVP or viable for some software that requires storing its data in a persistent storage.

Volumes are a persistent storage that is available for all processes within the app, stays between deploys and restarts and can be exposed on a URL of your app.

Under the hood it uses docker volumes pointing to a directory within your application directory (e.g. /home/app/app_name/volumes/volume_123)

Setting up volumes

You can add volumes by going to your app's settings, Volumes tab and click "Add" Creating Docker volumes and nginx URL

Container Path – is the path on which the volume will be available for your running app. It can't be /code or just a slash /.

URL – optional parameter, a subpath on your app's URL where the directory will be exposed to all viewers. This is helpful if you want to store publicly available media files, uploaded by users. e.g. Django media folder.

Environment variable – an optional parameter that you can specify if you wish to pass the configuration of the paths to your app. Setting this parameter will create two parameters within the app: one with suffix _ROOT and one with _URL suffix. E.g. setting the value of this parameter to MEDIA will create two environment variables MEDIA_ROOT and MEDIA_URL.

Application Considerations

You can create as many volumes as you need, make some of them available via NGINX and leave some of them private.

When you create, delete or change parameters of any volumes you must deploy the app for it to take an effect.

If you choose to expose the volume on a certain URL, make sure to enable "Update Nginx Configuration on deploy" checkbox on the "Build Settings" tab of app settings.

image

This checkbox will enable rewriting nginx configuration for all the domains for your app on every deploy. Without enabling this checkbox, changes to volumes-related Nginx configuration will only be applied to newly added custom domains.

This checkbox and the behaviour behind it was introduced to prevent unwanted automatic changes for those projects where nginx config for apps was modified manually.

In future, when Nginx customizations will be made possible through Appliku Dashboard "Updating Nginx configuration on deploy" will be the default always on behaviour.

Environment variables set by volumes will override any existing ones that you setup in the "Environment Variables" tab during deployment, but won't delete them from that tab.

Upon deletion of a volume – its directory with files is not deleted from the disk. An option to delete the directory with its files will be available in future releases.

How to serve media files in Django via Nginx

In order to setup your Django project to use a volume for storing and serving media files you should: - Create a volume(for this example refer to the first screenshot for parameters) with URL (/media/) and environment variable set (MEDIA) - In Django Project's settings.py file specify two variables:

# with os module
import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

MEDIA_ROOT = os.environ.get('MEDIA_ROOT', BASE_DIR / 'media')  
MEDIA_URL = os.environ.get('MEDIA_URL', '/media/')


# or with django-environ
from pathlib import Path  
import environ  

BASE_DIR = Path(__file__).resolve().parent.parent
MEDIA_ROOT = env('MEDIA_ROOT', default=BASE_DIR / 'media')  
MEDIA_URL = env('MEDIA_URL', default='/media/')

Alternatively, you can hardcode paths to your media folder and the URL.

Stop wasting time manually
deploying your apps!

Try our application deployment tool that allows you to set up servers automatically, deploy apps from git, manage Postgres backups and cron tasks.

  • Use a server from any cloud provider
  • Setup is done automatically
  • Deploy Django, Flask, FastAPI, Node apps
  • Unlimited number of databases
  • Custom domains and HTTPS
  • Focus on apps, we take care of deployments

As developers ourselves, we hated wasting time writing configuration files for web servers, CI pipelines and managing apps via SSH – so we built the system that we always wanted.

Appliku takes care of everything you need to deploy, run and manage your apps, while you can still do customized configuration if you choose to.

Try it with a free plan and see for yourself.

Start Free
Simple 5-minute setup – No credit card required
Share post:
Top