luafcgid2 is a multithreaded FastCGI server that runs under BSD/Linux. It manages a number of independent, persistent Lua states, that are then loaded with Lua scripts from the file system. These scripts are loaded/initialized on demand, and held in memory for as long as possible. The Lua scripts are also allowed to interface with the FastCGI libraries: thus providing an extremely fast, streamlined and lightweight platform from which to develop web-centric apps in Lua.
See the LICENSE file included with the source code
All development testing is done with a Raspberry Pi Zero W, and sometimes on a Debian x64 distro.
- Debian Stretch
- nginx web server
- Lua 5.3
On Debian Stretch (including Raspbian Stretch), simply run the following:
# apt-get -y install libfcgi-dev liblua5.3-dev git make build-essential
$ git clone --recursive https://github.com/EssGeeEich/luafcgid2.git
$ cd luafcgid2
$ make
# make install install-daemon
You may need to tinker with the Makefile on other distros.
If you just want to update the daemon, without touching the configuration files, you can do the following:
$ make clean; make
# make update
Add the following lines to your /etc/nginx/sites-available/your-site-here in the server{} section:
location ~ \.lua$ {
fastcgi_pass unix:/var/tmp/luafcgid2.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
NOTE: make sure your root directive is set correctly, and the DOCUMENT_ROOT variable is set correctly
luafcgid2 spawns and manages a number of worker threads that each contain an isolated blocking accept loop. The FastCGI libraries provide a connect queue for each worker thread so that transient load spikes can be handled with a minimum of fuss.
Lua is then introduced into the picture by created a shared Lua state for each Lua script that is requested. A script will be loaded multiple times. All scripts - including duplicates (clones) - are completely isolated from each other. After a state is initialized and loaded with a script, it is usually kept in memory forever. Each Lua VM is run within a worker thread as needed. The use of on-demand clones allows for multiple workers to run the same popular script. There is a configurable limit to the total number of Lua states that luafcgid will maintain. When this limit is reached, a new state gets generated at runtime.