• Categories
    • Unread
    • Recent
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Setting up Flask to work with Nginx

    Scheduled Pinned Locked Moved General Computing
    flasknginxpythonuwsgi
    1 Posts 1 Posters 459 Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • ScuzzS Offline
      Scuzz
      last edited by Scuzz

      After struggling for a few hour last night to get a working hello world with Flask and Nginx I think I should get a little guide up to make it a bit more clear. There are a few tutorials on various blog sites but non of them seemed to work correctly. Some had conflicting information and other had bits of code or config files that did not seem relevant. Even the Flask documentation was hard to understand and didn’t seem to work.

      I assume that you already have Nginx, Python and pip installed.

      Flask

      Flask is a lightweight web framework for Python. It is based on Werkzeug and Jinja 2.
      It is easy to install and run. You must have python and pip installed first before you can install Flask.
      To install you just run pip install Flask from your command line.

      For a quick demo, create a hello.py and copy in the following code:

      from flask import Flask
      app = Flask(__name__)
      
      @app.route("/")
      def hello():
          return "Hello World!"
      
      if __name__ == "__main__":
          app.run()
      

      Then type python hello.py and visit http://localhost:5000 to see your first Flask hello world app.

      More information can be found on the Flask Website

      I have installed Flask in a virtual environment. To do this you will need to run pip install virtualenv.
      Create your directory for you app and run virtualenv venv, venv can be any name you want but I kept it simple.
      To activate the virtual environment run source venv/bin/activate. This will activate your virtual environment. From here you will install Flask with the same command as above, pip install Flask. If you have created the hello.py file from above you should be able to run this from within the virtual environment and check http://localhost:5000 to see it running.
      Run deactivate from within the virtual environment to deactivate it.

      uWSGI

      Nginx is a web server that serves static files. It is unable to serve a python application. This is where uWSGI comes in. You will require build-essential and python-dev for uWSGI.
      Run pip install uwsgi to install uWSGI.

      Open up your config file in the sites-available directory inside your Nginx installation and copy in the following:

      server {
          listen      80;
          server_name localhost;
          charset     utf-8;
          client_max_body_size 75M;
      
          location / { try_files $uri @yourapplication; }
          location @yourapplication {
              include uwsgi_params;
              uwsgi_pass unix:/var/www/demoapp/demoapp_uwsgi.sock;
          }
      }
      

      Changing the path to your apps path.

      You will no need to create the .ini file for you application. Create a yourapp.ini file in the directory your application is located in.
      Copy in the following:

      [uwsgi]
      #application's base folder
      base = /var/www/demoapp
      
      #python module to import
      app = hello
      module = %(app)
      
      home = %(base)/venv
      pythonpath = %(base)
      
      #socket file's location
      socket = /var/www/demoapp/%n.sock
      
      #permissions for the socket file
      chmod-socket    = 666
      
      #the variable that holds a flask application inside the module imported at line #6
      callable = app
      
      #location of log files
      logto = /var/log/uwsgi/%n.log
      

      Make sure to change the paths to be the correct paths for your app location.
      Create the log file directory.

      Now run uwsgi --ini /path/to/your/yourapp.ini.

      Now if you open your domain name that is linked to your app you should see that the app has loaded and “Hello World!” is displayed.

      This is a quick and dirty memory dump on what I did last night to get it running on my server. Hopefully it is easy enough to follow and is useful to some people.

      1 Reply Last reply Reply Quote
      • 1 / 1
      • First post
        Last post
      Online Users