====== 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}}