====== Running a Python Application with LSAPI ======
LiteSpeed SAPI is the easiest and fastest way to run web applications with LiteSpeed Web Server. LiteSpeed supports LSAPI for Python applications through WSGI. WSGI (Web Server Gateway Interface) is a low-level interface between web servers and web applications. It allows Python applications designed for WSGI to be used in a variety of settings. It is important to note that, while most Python applications are WSGI-compatible, not all are.
This wiki will go over how to set up LSWS to run Python applications with LWSGI. This wiki assumes that you already have a working version of Python installed and virtual hosts set up to run it on.
===== Compile Python with LSWSGI =====
==== Download the WSGI LSAPI module ====
The module can be downloaded from our site [[http://www.litespeedtech.com/packages/lsapi/wsgi-lsapi-1.6.tgz|here]].
==== Compile Python with the Module and Prepare the Executable ====
Download the module to your server root, ''/usr/local/lsws''. To recompile Python, go into the module directory and run the following commands:
cd /usr/local/lsws/wsgi-lsapi-1.6
python ./configure.py
make
Copy the file ''lswsgi'' to ''/usr/local/lsws/fcgi-bin/''. (This directory is where all of your LSAPI executables go.)
cp lswsgi /usr/local/lsws/fcgi-bin/
Now your LSWSGI executable is ready for LiteSpeed Web Server.
===== Set up an External Application and Script Handler =====
==== Setting up the External Application ====
This process is the same as with any other LSAPI application, except with a different executable and suffix.
Go to the **External App** tab (**WebAdmin console > Configuration > External App**) and add an external application. (This can be done at the server or virtual host level.)
{{litespeed_wiki:python:python_add_ext_app.png?700}}
Select type ''LSAPI App''.
{{litespeed_wiki:python:python_ext_app_type.png?700}}
Give it a name and a socket. Most importantly, for the Command setting, specify the location of your lswsgi executable: ''/usr/local/lsws/fcgi-bin/lswsgi''. (You also have to pick values for Max Connections, Initial Request Timeout, and Retry Timeout.)
{{litespeed_wiki:python:python_ext_app_settings.png?700}}
In the Environment field put:
LSAPI_CHILDREN=35
Set **Instance** to ''1''.
You now have an LSWSGI external application.
{{litespeed_wiki:python:python_ext_app_success.png?700}}
The configuration looks like:
lsapi
wsgiapp
uds://tmp/lshttpd/lswsgi.sock
35
LSAPI_CHILDREN=35
60
0
0
1
/usr/local/lsws/fcgi-bin/lswsgi
1
==== Setting up the Script Handler ====
You'll need to create a WSGI script handler to tell LSWS to send ''.wsgi'' scripts to your LSWSGI application. Go to the **Script Handler** tab (**WebAdmin console > Configuration > Script Handler**) and click **Add**. (This, also, can be done at the server or virtual host level.)
{{litespeed_wiki:python:python_add_script_handler.png?700}}
Stipulate ''wsgi'' as the suffix of your WSGI Python apps. Pick Handler Type ''LiteSpeed SAPI'' and, for **Handler Name**, choose the LSWSGI external application you just created. (If you want scripts other than ''.wsgi'' to use Python, you can make extra script handlers to handle those scripts.)
{{litespeed_wiki:python:python_script_handler_settings.png?700}}
Now your LSWS can handle ''.wsgi'' scripts and knows where to send them.
==== Graceful Restart to Apply Changes ====
===== Test =====
To test this, use the simple hello world script below:
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World!\n']
Name your file ''hello.wsgi'' and save it to ''/usr/local/lsws/DEFAULT/html''. This is the document root for LSWS's default vhost, "Example."
Now, when you point your browser to ''localhost:8088/hello.wsgi'', you will see the correct output displayed. It works!
{{litespeed_wiki:python:python_hello_world_success.png?700}}