# Other options

## FastCGI

FastCGI is a deployment option on servers like nginx or lighttpd; see Standalone WSGI Containers 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 pip or apt) to follow along.

### Creating a .fcgi file

First you need to create the FastCGI server file. Let’s call it `supysonic.fcgi`:

    #!/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 `WSGIServer`:

    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 `supysonic.fcgi` file somewhere you will find it again. It makes sense to have that in `/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.

## 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 `supysonic.cgi`:

    #!/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 `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:

    ScriptAlias /supysonic /path/to/the/supysonic.cgi