mirror of
https://github.com/spl0k/supysonic.git
synced 2024-12-23 09:26:18 +00:00
103 lines
3.0 KiB
ReStructuredText
103 lines
3.0 KiB
ReStructuredText
Other options
|
|
=============
|
|
|
|
FastCGI
|
|
-------
|
|
|
|
FastCGI is a deployment option on servers like `nginx`__ or `lighttpd`__; see
|
|
:doc:`wsgi-standalone` for other options.
|
|
To use Supysonic with any of them you will need a FastCGI server first. The most
|
|
popular one is `flup`__ which we will use for this guide. Make sure to have it
|
|
installed (with eith :command:`pip` or :command:`apt`) to follow along.
|
|
|
|
__ https://nginx.org/
|
|
__ https://www.lighttpd.net/
|
|
__ https://pypi.org/project/flup/
|
|
|
|
Creating a `.fcgi` file
|
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
First you need to create the FastCGI server file. Let's call it
|
|
:file:`supysonic.fcgi`:
|
|
|
|
.. code-block:: python3
|
|
|
|
#!/usr/bin/python3
|
|
|
|
from flup.server.fcgi import WSGIServer
|
|
from supysonic.web import create_application
|
|
|
|
if __name__ == "__main__":
|
|
app = create_application()
|
|
WSGIServer(app).run()
|
|
|
|
This should be enough for Apache to work, however nginx and older versions of
|
|
lighttpd need a socket to be explicitly passed to communicate with the
|
|
FastCGI server. For that to work you need to pass the path to the socket
|
|
to the :py:class:`~flup.server.fcgi.WSGIServer`:
|
|
|
|
.. code-block:: python3
|
|
|
|
WSGIServer(app, bindAddress="/path/to/fcgi.sock").run()
|
|
|
|
The path has to be the exact same path you define in the server
|
|
config.
|
|
|
|
Save the :file:`supysonic.fcgi` file somewhere you will find it again.
|
|
It makes sense to have that in :file:`/var/www/supysonic` or something
|
|
similar.
|
|
|
|
Make sure to set the executable bit on that file so that the servers
|
|
can execute it::
|
|
|
|
$ chmod +x /var/www/supysonic/supysonic.fcgi
|
|
|
|
Configuring the web server
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
The example above is good enough for a basic Apache deployment but your
|
|
`.fcgi` file will appear in your application URL e.g.
|
|
``example.com/supysonic.fcgi/``. If that bothers you or you wish to load it in
|
|
another web server, Flask's documentation details how to do it for `Apache`__,
|
|
`lighttpd`__ or `nginx`__.
|
|
|
|
__ https://flask.palletsprojects.com/en/1.1.x/deploying/fastcgi/#configuring-apache
|
|
__ https://flask.palletsprojects.com/en/1.1.x/deploying/fastcgi/#configuring-lighttpd
|
|
__ https://flask.palletsprojects.com/en/1.1.x/deploying/fastcgi/#configuring-nginx
|
|
|
|
CGI
|
|
---
|
|
|
|
If all other deployment methods do not work, CGI will work for sure.
|
|
CGI is supported by all major servers but usually has a sub-optimal
|
|
performance.
|
|
|
|
Creating a `.cgi` file
|
|
^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
First you need to create the CGI application file. Let's call it
|
|
:file:`supysonic.cgi`:
|
|
|
|
.. code-block:: python3
|
|
|
|
#!/usr/bin/python3
|
|
|
|
from wsgiref.handlers import CGIHandler
|
|
from supysonic.web import create_application
|
|
|
|
app = create_application()
|
|
CGIHandler().run(app)
|
|
|
|
Server Setup
|
|
^^^^^^^^^^^^
|
|
|
|
Usually there are two ways to configure the server. Either just copy the
|
|
``.cgi`` into a :file:`cgi-bin` (and use `mod_rewrite` or something similar to
|
|
rewrite the URL) or let the server point to the file directly.
|
|
|
|
In Apache for example you can put something like this into the config:
|
|
|
|
.. code-block:: apache
|
|
|
|
ScriptAlias /supysonic /path/to/the/supysonic.cgi
|