Report this

What is the reason for this report?

Issues getting nginx to serve my flask app

Posted on February 14, 2023

I have a flask app that I would like to serve via a DO Droplet. I have followed How To Serve Flask Applications with Gunicorn and Nginx on Ubuntu 22.04

This is my folder structure

root/ 
└── baseweb/
     ├── venv
     ├── app.py 
     └── app/ 
         ├── routes.py 
         └── templates/ 
             └── index.html

app.py looks like this

from app import app

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True)

I have created a baseweb service

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=/root/baseweb
Environment="PATH=/root/baseweb/venv/bin"
ExecStart=/root/baseweb/venv/bin/gunicorn --workers 1 --bind unix:baseweb.sock app:app

[Install]
WantedBy=multi-user.target

and my nginx configuration (/etc/nginx/sites-available/baseweb)

server {
    listen 80;
    server_name baserank.net www.baserank.net

    location / {
        proxy_pass http://unix:/root/baseweb/baseweb.sock;
    }
}

i have the DNS set up at baserank.net to point to the IP address

When i simply run app.py using my venv, i can access my flask app via http://68.183.68.148:5000/

if I run gunicorn --bind 0.0.0.0:5000 app:app i can also access my app via the same IP.

But when i try to access via nginx (via http://68.183.68.148 without running the app in console), i get

502 Bad Gateway

nginx/1.22.0 (Ubuntu)

I have spent hours trying to adjust settings, but i have no idea where this is going wrong - so any help is very much appreciated.

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Start building today

From GPU-powered inference and Kubernetes to managed databases and storage, get everything you need to build, scale, and deploy intelligent applications.