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.