If your application writes configuration, session, or user data to the file system and you want this data to persist across restarts you will need a fly volume. This doesn’t apply if your data is stored in a database elsewhere (for example in PostgreSQL, MySQL, or MongoDB), but does apply if you are using Sqlite3.

Creating a volume

Use fly volumes create to create a volume. You can specify a region and a size (in gigabytes). Create one for each machine that you will be deploying as volumes can’t be shared between machines. You will want to use the same volume name for each volume if these volumes will be mounted by separate instances of the same application.

Mounting a volume

When you created a volume, you gave it a name. Modify your fly.toml to contain a mounts section associating that source name with a destination file path:

  source = "myapp_data"
  destination = "/data"
  processes= ["app"]

The processes section is optional if you only have one process defined in your toml.

Accessing the volume

Modify your application to read and write from subdirectories of the destination path you provided in your fly.toml.

In the case of Sqlite3, set the DATABASE_URL value to include this path.