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
Description=uWSGI Emperor

ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini
# Requires systemd version 211 or newer
# dont log to syslog, follow logto
# StandardError=syslog


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

cd /etcsudo mkdir uwsgicd uwsgisudo nano emperor.ini
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.logsudo tail -f /var/log/nginx/error.logsudo 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

❤️ Is this article helpful?

Buy me a coffee ☕ or support my work via PayPal to keep this space 🖖 and ad-free.

Do send some 💖 to @d_luaz or share this article.

✨ By Desmond Lua

A dream boy who enjoys making apps, travelling and making youtube videos. Follow me on @d_luaz

👶 Apps I built

Travelopy - discover travel places in Malaysia, Singapore, Taiwan, Japan.