Working with WSGI Servers (e.g., uWSGI) in Flask


Introduction

WSGI servers, like uWSGI, provide a robust and efficient way to serve Flask applications in a production environment. uWSGI acts as an interface between your Flask application and the web server, ensuring proper handling of requests and responses.

This article will guide you through the steps of setting up and running a Flask application with uWSGI.

Step 1: Installing uWSGI

Install uWSGI using pip:

            pip install uwsgi
        

Ensure your Flask application is ready. For example, create a file named app.py:

            from flask import Flask

            app = Flask(__name__)

            @app.route('/')
            def home():
                return "Welcome to the Flask app served by uWSGI!"
        

Step 2: Running uWSGI

Run the Flask application with uWSGI directly from the command line:

            uwsgi --http :5000 --wsgi-file app.py --callable app
        

Explanation:

  • --http :5000: Specifies the port (5000) to run the application.
  • --wsgi-file app.py: Indicates the file containing the WSGI application.
  • --callable app: Specifies the callable WSGI application object.

Open http://127.0.0.1:5000 in your browser to verify the application is running.

Step 3: Creating a uWSGI Configuration File

Create a configuration file named uwsgi.ini for easier management:

            [uwsgi]
            module = app:app
            master = true
            processes = 4
            socket = app.sock
            chmod-socket = 660
            vacuum = true
            die-on-term = true
        

Explanation:

  • module = app:app: Specifies the WSGI module and application.
  • master = true: Enables the master process.
  • processes = 4: Sets the number of worker processes.
  • socket = app.sock: Creates a UNIX socket for communication.
  • chmod-socket = 660: Sets permissions for the socket.
  • vacuum = true: Cleans up temporary files upon exit.
  • die-on-term = true: Ensures proper shutdown.

Step 4: Running uWSGI with the Configuration File

Start uWSGI using the configuration file:

            uwsgi --ini uwsgi.ini
        

This setup allows you to easily manage the application and configurations.

Step 5: Integrating with Nginx

To deploy in production, use Nginx as a reverse proxy for uWSGI. Install Nginx:

            sudo apt update
            sudo apt install nginx
        

Edit the Nginx configuration:

            sudo nano /etc/nginx/sites-available/flask_app
        

Add the following:

            server {
                listen 80;
                server_name yourdomain.com;

                location / {
                    include uwsgi_params;
                    uwsgi_pass unix:/path/to/your/project/app.sock;
                }
            }
        

Enable the configuration and restart Nginx:

            sudo ln -s /etc/nginx/sites-available/flask_app /etc/nginx/sites-enabled
            sudo systemctl restart nginx
        

Step 6: Verifying the Setup

Open your domain or server's IP address in the browser to ensure the application is served correctly.

Conclusion

Using uWSGI with Flask provides a powerful and efficient way to deploy applications in a production environment. By combining uWSGI with Nginx, you can ensure scalability, reliability, and performance for your Flask applications.





Advertisement