Laravel Multi-SQLite: LiteFS

This is a technology preview. “LiteFS” is a distributed file system that enables you to sync SQLite data across instances of your application.

Read further on the official LiteFS documentation and follow along a LiteFS-configured sample Laravel repository here.

Laravel Specific Configuration

Take note of the following important steps in configuring your Laravel Fly App with LiteFS:

1) You’ll have to configure SQLite connection in your fly.toml file:

[env]
    ...
    DB_CONNECTION="sqlite"
    DB_DATABASE="/var/www/html/storage/database/database.sqlite"

2) Since we’re saving the SQLite database in the storage directory, make sure to mount a volume on it by following this guide here.

3) Execute litefs mount instead of starting the server in .fly/entrypoint.sh:

exec litefs mount

4) Make sure to properly configure the configuration file( etc/litefs.yml ) read by LiteFS:

fuse:
  # Point to the directory containing your DB_DATABASE in fly.toml
  dir: "/var/www/html/storage/database"

  # Allow none-root access to the directory above--required for web access
  allow-other:true

# Start the server, this was previously run in .fly/entrypoint.sh
exec: "supervisord -c /etc/supervisor/supervisord.conf"

5) Include a ( etc/fuse.conf ) file to enable allow-other option above to work.

6) Revise the generated Dockerfile to include the LiteFS image, install required packages, and copy the configuration files etc/litefs.yml and etc/fuse.conf to a proper location LiteFS can read.

7) Create a middleware to forward write requests to the primary node using fly-replay

8) Use a non-file session driver to allow fly-replay to work on Laravel CSRF protection.