How to get Gunicorn to use Python 3 instead of Python 2 (502 Bad Gateway)

It seems that there's a package for this called gunicorn3 (this was tested on ubuntu)

sudo apt-get install gunicorn3

then running the following command should work and run gunicorn with python3:

gunicorn3 --log-level debug --bind 0.0.0.0:30443 server:app


In case the two links break one day, here's how I got it working.

Starting after executing these instructions.

  • pip uninstall gunicorn
  • pip3 install gunicorn

Install supervisor, sudo apt-get install supervisor.

Next, I needed to make gunicorn_config.py in the root of my project directory, which contains this.

command = '/usr/local/bin/gunicorn'
pythonpath = '/home/django/django_project'
bind = '127.0.0.1:9000'
workers = 3
user = 'nobody'

Then, I created a configuration file for supervisor. vim /etc/supervisor/conf.d/gunicorn.conf, with these contents.

[program:gunicorn]
command=/usr/local/bin/gunicorn -c /home/django/django_project/gunicorn_config.py django_project.wsgi
user=nobody
autostart=true
autorestart=true
stderr_logfile=/var/log/gunicorn3.err.log
stdout_logfile=/var/log/gunicorn3.out.log

After that, I did a supervisorctl reread and supervisorctl update and then it all started working.

You can use supervisorctl status gunicorn to check if gunicorn is running or not. You can use supervisorctl restart gunicorn to restart.