Difference between revisions of "Uwsgi"
Line 102: | Line 102: | ||
;<code>uwsgi --reload /run/uwsgi/app1.pid</code> | ;<code>uwsgi --reload /run/uwsgi/app1.pid</code> | ||
:Restart a vassel (application) | :Restart a vassel (application) | ||
+ | |||
+ | |||
+ | From the skeleton coming with Ubuntu below start/stop script can be made. It allows you to do the usual services things (start/stop/restart) and a reload of individual application instances by: | ||
+ | |||
+ | <code>service uwsgi reload <app></code> | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | #!/bin/sh | ||
+ | # kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing. | ||
+ | if [ x${1} != xreload ] | ||
+ | then | ||
+ | if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then | ||
+ | set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script | ||
+ | fi | ||
+ | fi | ||
+ | ### BEGIN INIT INFO | ||
+ | # Provides: uwsgi | ||
+ | # Required-Start: $remote_fs $syslog | ||
+ | # Required-Stop: $remote_fs $syslog | ||
+ | # Default-Start: 2 3 4 5 | ||
+ | # Default-Stop: 0 1 6 | ||
+ | # Short-Description: Start uwsgi deamon | ||
+ | # Description: Start uwsgi deamon | ||
+ | # This script starts a | ||
+ | # single forking daemon capable of writing a pid | ||
+ | # file. | ||
+ | ### END INIT INFO | ||
+ | |||
+ | # Author: Me | ||
+ | # | ||
+ | |||
+ | DESC="uWSGI server" | ||
+ | DAEMON="/usr/local/bin/uwsgi" | ||
+ | case "$1" in | ||
+ | start) | ||
+ | DAEMON_ARGS="-d --ini /etc/uwsgi-emperor/emperor.ini --log-syslog" | ||
+ | ;; | ||
+ | reload) | ||
+ | ${DAEMON} --reload /run/uwsgi/${2}.pid | ||
+ | ;; | ||
+ | esac | ||
+ | </syntaxhighlight> |
Revision as of 14:19, 15 July 2021
Lots of confusion going around on the net about installing and using uwsgi. Here my notes.
Used documentation
https://github.com/unbit/uwsgi/issues/1688
https://stackoverflow.com/questions/35262299/uwsgi-emperor-mode-not-working-outside-of-virtualenv
Installing
- pip3 install uwsgi
- pip3 install flask
Configuration
/etc/uwsgi-emperor/emperor.ini
[uwsgi] autoload = true no-orphan = true emperor = /etc/uwsgi-emperor/vassals master = true emperor-nofollow = true processes = 1 workers = 2 uid = www-data gid = www-data pidfile = /run/uwsgi/pid socket = /tmp/%n.sock chmod-socket = 666 chown-socket = www-data log-date = false
For all applications you can use this configuration file in /etc/uwsgi-emperor/vassels/app1.ini. uwsgi is installed using pip so no loading of a python module is needed.
[uwsgi] master = false processes = 1 pidfile = /run/uwsgi/%n.pid vaccum = true chmod-socket = 666 socket = /tmp/%n.sock uid = www-data gid = www-data pythonpath = /opt/flask/%n module = %n
The %n will be replaced by the first part of the file-name (app1 in this example). In /opt/flask/app1 you can put your code.
Raspberry pi
On my raspberry pi uwsgi was installed with some extensions to ease configuration. E.g. to use .sml file for configuration
/etc/uwsgi/apps-available/emperor.xml
<uwsgi>
<autoload>true</autoload>
<no-orphan>true</no-orphan>
<emperor>/etc/uwsgi/vassals-enabled</emperor>
<master>true</master>
<emperor-nofollow>true</emperor-nofollow>
<processes>1</processes>
<uid>www-data</uid>
<gid>www-data</gid>
</uwsgi>
/etc/uwsgi/apps-available/apps.xml
<uwsgi>
<plugins>python3</plugins>
<master>false</master>
<processes>1</processes>
<vaccum>true</vaccum>
<chmod-socket>666</chmod-socket>
<socket>/tmp/%n.sock</socket>
<uid>www-data</uid>
<gid>www-data</gid>
<pythonpath>/var/www/flask/%n</pythonpath>
<module>%n</module>
</uwsgi>
Make them available
cd /etc/uwsgi/apps-enabled
ln -s ../apps-available/emperror.xml
cd /etc/uwsgi/vassals-enabled
ln -s ../apps-available/apps.xml app1.xml
ln -s ../apps-available/apps.xml app2.xml
Daemon management
/usr/local/bin/uwsgi -d --ini /etc/uwsgi-emperor/emperor.ini --log-syslog
- Start with logging to rsysog, add following line to the rsyslogd configuration
:programname, contains, "uwsgi" /var/log/uwsgi/uwsgi.log
kill `pidof uwsgi`
- This works for stopping all processes.
uwsgi --stop /run/uwsgi/pid
- This looks cleaner but does not work on my system
uwsgi --reload /run/uwsgi/app1.pid
- Restart a vassel (application)
From the skeleton coming with Ubuntu below start/stop script can be made. It allows you to do the usual services things (start/stop/restart) and a reload of individual application instances by:
service uwsgi reload <app>
#!/bin/sh
# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
if [ x${1} != xreload ]
then
if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
fi
fi
### BEGIN INIT INFO
# Provides: uwsgi
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start uwsgi deamon
# Description: Start uwsgi deamon
# This script starts a
# single forking daemon capable of writing a pid
# file.
### END INIT INFO
# Author: Me
#
DESC="uWSGI server"
DAEMON="/usr/local/bin/uwsgi"
case "$1" in
start)
DAEMON_ARGS="-d --ini /etc/uwsgi-emperor/emperor.ini --log-syslog"
;;
reload)
${DAEMON} --reload /run/uwsgi/${2}.pid
;;
esac