Deploy Flask on Nginx w/uWSGI

Required: Updated Debian 10 server with root privileges and a domain name.

Install Nginx

apt install nginx

Verify Nginx is running by navigating to the server’s IP address.

Install Flask & uWSGI

apt install python3-pip python-dev
pip3 install uwsgi flask

Create Web Directory

mkdir /var/www/[project_name]

Create Simple App

nano /var/www/[project_name]/

Add the following:

from flask import Flask
app = Flask(__name__)

def index():
return "Hello World!"

if __name__ == "__main__":"")

Create config-uwsgi.ini

nano /var/www/[project_name]/config-uwsgi.ini

Add the following:


app = main
module = %(app)
callable = app

socket = /var/www/[project_name]/[project_name].sock
chdir = /var/www/[project_name]
chmod-socket = 666

processes = 4
die-on-term = true

Setup Nginx

Remove default configuration

rm /etc/nginx/sites-enabled/default

Create new configuration

nano /var/www/[project_name]/config-nginx.conf

Add the following:

server {
listen 80;
listen [::]:80;

server_name [your_domain].com www.[your_domain].com;

location / {
include uwsgi_params;
uwsgi_pass unix:/var/www/[project_name]/[project_name].sock;

Create symoblic link from Nginx directory to conf.d directory

ln -s /var/www/[project_name]/config-nginx.conf /etc/nginx/conf.d/

Restart Nginx

systemctl restart nginx


Start service

nohup uwsgi /var/www/[project_name]/config-uwsgi.ini &


CTRL + C to hide the process. Run uWSGI under systemd for live project.

Install Let’s Encrypt SSL Certificate

Install Certbot

apt install certbot python-certbot-nginx

Requests certificate

certbot --nginx

Follow the Certbot prompts.


Redirecting HTTP traffic to HTTPS is recommended.

About the author

Shane Bellone

At the intersection of capricious and whimsy.

Add comment

By Shane Bellone