Laravel: Multi-Node SQLite with 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
1) You'll have to configure SQLite connection in your
[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.
litefs mount instead of starting the server in
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/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 none-file session driver to allow fly-replay to work on Laravel CSRF protection.