Setup uWsgi After Upgrade to Ubuntu 16.04

May 21, 2019

NOTE: Upgrade Ubuntu to 16.04.

The Ubuntu upgrade went smootly, but webserver hosting Python apps is no longer working.

Remove Upstarted Config

I am guessing the main reason is I was using Upstarted for uwsgi on Ubuntu 16.04, and Upstarted is depcreated on 16.04.

Disable the old config file.

sudo mv /etc/init/uwsgi.conf /etc/init/uwsgi.conf.disabled

Check to make sure no uwsgi instance is running.

ps -fC uwsgi

If uwsgi instances are running, restart the server.

NOTE: Why uwsgi still run if Upstarted is deprecated? Refer to SysV, Upstart and systemd init script coexistence.

Check uWSGI

Check version, make sure to be running at least 2.0.18.

uwsgi --version

Upgrade to latest version.

sudo -H pip install uwsgi

Setup uWSGI via Systemd

Based on Running uWSGI via Systemd (Ubuntu 16.04).

Setup a emperor.uwsgi service.

sudo nano /etc/systemd/system/emperor.uwsgi.service
[Unit]
Description=uWSGI Emperor
After=network.target

[Service]
Group=www-data
ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini
# Requires systemd version 211 or newer
RuntimeDirectory=uwsgi
RuntimeDirectoryMode=0775
Restart=always
KillSignal=SIGQUIT
Type=notify
# dont log to syslog, follow logto
# StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

Create /etc/uwsgi/emperor.ini as uwsgi configuration file.

cd /etc
sudo mkdir uwsgi
cd uwsgi
sudo nano emperor.ini
[uwsgi]
emperor = /etc/uwsgi/vassals
uid = www-data # do-user for convinience on DigitalOceans server
gid = www-data
logto = /var/log/uwsgi/emperor.log
logfile-chown = www-data:www-data # do-user:www-data for convinience on DigitalOceans server

NOTE: Assume you already have an existing uWSGI app configuration file at /etc/uwsgi/vassals/.

Start uwsgi.

sudo service emperor.uwsgi start

Check logs for error.

sudo tail -f /var/log/uwsgi/myapp.log
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log

NOTE: If you bump into the following error, it might be due to previous Upstarted script (e.g. /etc/init/uwsgi.conf) are still running. Disable the script and restart the server.

thunder lock: disabled (you can enable it with --thunder-lock)
error removing unix socket, unlink(): Operation not permitted [core/socket.c line 198]
bind(): Address already in use [core/socket.c line 230]

NOTE: If there is a change of permission for log access, you might want to delete old log files to make sure new log files can be created with the appropriate permission.

Enable the service (autostart when system boot).

sudo systemctl enable emperor.uwsgi
This work is licensed under a
Creative Commons Attribution-NonCommercial 4.0 International License.