Uwsgi: Difference between revisions

From wiki
Jump to navigation Jump to search
No edit summary
 
(5 intermediate revisions by the same user not shown)
Line 31: Line 31:
   log-date = false
   log-date = false


For all applications you can use this configuration file in /etc/uwsgi-emperor/vassels/app1.ini
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]
  [uwsgi]
  plugins = python3
   master = false
   master = false
   processes = 1
   processes = 1
  pidfile = /run/uwsgi/%n.pid
   vaccum = true
   vaccum = true
   chmod-socket = 666
   chmod-socket = 666
Line 48: Line 48:


===Raspberry pi===
===Raspberry pi===
On my raspberry pi uwsgi was installed with some extentions to ease configuration. E.g. to use .sml file for configuration
On my raspberry pi uwsgi was installed with some extensions to ease configuration. E.g. to use .xml file for configuration. It was also not installed by pip so the uwsgi-plugin-python3 needed to be installed too.


/etc/uwsgi/apps-available/emperor.xml
/etc/uwsgi/apps-available/emperor.xml
Line 89: Line 89:
</syntaxhighlight>
</syntaxhighlight>


==Starting==
==Daemon management==
The command is:
;<code>/usr/local/bin/uwsgi -d --ini /etc/uwsgi-emperor/emperor.ini --log-syslog</code>
<code>/usr/local/bin/uwsgi -d --ini /etc/uwsgi-emperor/emperor.ini --log-syslog</code>
:Start with logging to [[rsyslog]], add following line to the rsyslogd configuration
:<code>:programname, contains, "uwsgi" /var/log/uwsgi/uwsgi.log</code>


This logs to the [[rsyslog]] daemon. Add following line to the rsyslogd configuration to have uwsgi log to a different file:
;<code>kill `pidof uwsgi`</code>
:programname, contains, "uwsgi" /var/log/uwsgi/uwsgi.log
:This works for stopping all processes.


;<code>uwsgi --stop /run/uwsgi/pid</code>
:This looks cleaner but does not work on my system


==Stopping==
;<code>uwsgi --reload /run/uwsgi/app1.pid</code>
Several suggestions made on the web:
:Restart a vassel (application)
 
;<code>kill -1 `cat /run/uwsgi/app1.pid`</code>
This works:
:Restart a vassel (application)
 
<code>kill `pidof uwsgi`</code>
 
Other suggestion that looks cleaner:
 
<code>uwsgi --stop /run/uwsgi/pid</code> (or whereever your pid-file is)

Latest revision as of 10:48, 10 August 2025

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://www.digitalocean.com/community/tutorials/how-to-deploy-python-wsgi-applications-using-uwsgi-web-server-with-nginx

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 .xml file for configuration. It was also not installed by pip so the uwsgi-plugin-python3 needed to be installed too.

/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 rsyslog, 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)
kill -1 `cat /run/uwsgi/app1.pid`
Restart a vassel (application)