Back to Portfolio
Article|March 15, 2024ยท10 min read

Deploying Flask Applications on AWS EC2

Complete guide to deploying Flask applications on AWS EC2 using Gunicorn and Nginx for production-ready deployment.

AWSFlaskDevOpsNginx

Deploying a Flask application properly is crucial for ensuring your web application runs efficiently and securely in a production environment. This guide will walk you through the process of deploying a Flask application on AWS EC2 using Gunicorn as the WSGI server and Nginx as the reverse proxy.

Prerequisites

  • An AWS account
  • Basic knowledge of command line and SSH
  • A Flask application ready for deployment
  • Understanding of Python virtual environments
  • 1. Launch an EC2 Instance

    First, we'll need to set up our EC2 instance:

  • Sign in to AWS Management Console & Navigate to EC2 Dashboard
  • Click "Launch Instance" & Choose Ubuntu Server 20.04 LTS (or newer)
  • Select t2.micro (free tier eligible)
  • Configure security group to allow HTTP (80), HTTPS (443), and SSH (22)
  • 2. Connect to Your Instance

    bash
    ssh -i /path/to/your-key.pem ubuntu@your-public-ip

    3. Install Required Packages

    bash
    sudo apt update
    sudo apt upgrade -y
    sudo apt install python3 python3-pip python3-venv nginx git -y

    4. Set Up Your Application

    Clone your application repository and set up a virtual environment:

    bash
    git clone https://github.com/yourusername/your-repo.git
    cd your-repo
    python3 -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt
    pip install gunicorn

    5. Configure Gunicorn

    Create a systemd service file: `sudo nano /etc/systemd/system/myflaskapp.service`

    ini
    [Unit]
    Description=Gunicorn instance for myflaskapp
    After=network.target
    
    [Service]
    User=ubuntu
    Group=www-data
    WorkingDirectory=/home/ubuntu/your-repo
    Environment="PATH=/home/ubuntu/your-repo/.venv/bin"
    ExecStart=/home/ubuntu/your-repo/.venv/bin/gunicorn --workers 3 --bind unix:myflaskapp.sock -m 007 app:app
    
    [Install]
    WantedBy=multi-user.target

    6. Configure Nginx

    Create configuration: `sudo nano /etc/nginx/sites-available/myflaskapp`

    nginx
    server {
      listen 80;
      server_name your-public-ip;
    
      location / {
        proxy_pass http://unix:/home/ubuntu/your-repo/myflaskapp.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
      }
    }

    7. Conclusion

    Your Flask application is now running on EC2 with Gunicorn and Nginx! Don't forget to set up HTTPS next.

    All articlesRavi Kumawat / 2026