Initscript for running uWSGI daemon
===================================

N.B.: The features of the following initscript tutorial are provided in the uwsgi
binary package. See /usr/share/doc/uwsgi/README.Debian .

There is an example of simple init.d script in
/usr/share/doc/uwsgi-core/uwsgi-core.init.d.custom.gz

Gunzip it to (something like) /etc/init.d/uwsgi-custom-daemon, then edit copied
file and change:
  * '# Provides:' comment and NAME variable with value of
    'uwsgi-custom-daemon' (or whatever you've named copied file)
  * UWSGI_UID, UWSGI_GID and DAEMON_ARGS variables with values suitable to your
    needs

Then execute:

    chmod a+x /etc/init.d/uwsgi-custom-daemon
    update-rc.d uwsgi-custom-daemon defaults

And for removing your custom init.d script execute:

    update-rc.d uwsgi-custom-daemon remove
    rm /etc/init.d/uwsgi-custom-daemon

Before starting of uWSGI daemon, manually create appropriate directories for
logfiles and configuration files. Look for it's default values in value of
DAEMON_ARGS variable.

Controlling uWSGI instances using systemd
=========================================

(aka one service per app)

Another approach is to let systemd handle starting individual apps while taking
advantage of systemd template unit files, and of course socket activation. Each
app will run under its own user.

Adding a new app to your system is a matter of enabling the socket and
the service. For instance, if one were to configure cgit:

    # systemctl enable uwsgi-app@cgit.socket
    # systemctl enable uwsgi-app@cgit.service
    # systemctl start uwsgi-app@cgit.socket

Then configure the ini file `/etc/uwsgi/apps-available/cgit.ini`:

    [uwsgi]
    master = True
    cheap = True
    idle = 600
    die-on-idle = True # If app is not used often, it will exit and be launched
                       # again by systemd as requested by users.

    manage-script-name = True

    plugins = 0:cgi
    cgi = /usr/lib/cgit/cgit.cgi

And last, if applicable, configure your HTTP server the usual way.

Some services might need write access outside of their StateDirectory, but
this is denied by `systemd` when using `DynamicUser`. If this is the case,
an override can grant such access, for instance in
`/etc/systemd/system/uwsgi-app\@nextcloud.service.d/override.conf`:

    [Service]
    ReadWritePaths=/srv/nextcloud/data
