Deploying a Flask Application on AWS EC2

In this blog post, we will walk through the process of deploying a Flask application on an AWS EC2 instance. We will cover each step from setting up the environment to configuring Nginx as a reverse proxy. By following these steps, you will be able to successfully deploy your Flask application and make it accessible to the outside world.

Step 1: Update the System

To ensure that our system has the latest package information, run the following command:

sudo apt-get update
sudo apt-get update
sudo apt-get update

Enter fullscreen mode Exit fullscreen mode

This command updates the package lists for upgrades and new installations.

Step 2: Install Python Virtual Environment

To create an isolated Python environment for our project, we need to install the python3-venv package. Execute the following command:

sudo apt-get install python3-venv
sudo apt-get install python3-venv
sudo apt-get install python3-venv

Enter fullscreen mode Exit fullscreen mode

Python virtual environments allow us to manage dependencies and isolate our project’s environment from the system Python installation.

Step 3: Clone or Create the Project Directory

You have two options here. Either clone an existing project from GitHub using the git clone command, or create a new project directory using the mkdir command followed by the desired project name.

Step 4: Navigate to the Project Directory

Change your current working directory to the project directory using the cd command:

cd project_name
cd project_name
cd project_name

Enter fullscreen mode Exit fullscreen mode

Step 5: Create a Virtual Environment

Now, let’s create a virtual environment for our project. Execute the following command:

python3 -m venv venv
python3 -m venv venv
python3 -m venv venv

Enter fullscreen mode Exit fullscreen mode

This command creates a virtual environment named “venv” inside your project directory.

Step 6: Activate the Virtual Environment

To activate the virtual environment, run the following command:

. venv/bin/activate
. venv/bin/activate
. venv/bin/activate

Enter fullscreen mode Exit fullscreen mode

Once activated, your command prompt will reflect the virtual environment’s name.

Step 7: Install Flask and Dependencies

Next, we need to install Flask and any other project dependencies. Use either of the following commands:

pip install -r requirements.txt
pip install -r requirements.txt
pip install -r requirements.txt

Enter fullscreen mode Exit fullscreen mode

or

pip install Flask
pip install Flask
pip install Flask

Enter fullscreen mode Exit fullscreen mode

The first command is used if you have a requirements.txt file listing all the dependencies. The second command installs Flask directly.

Step 8: Run the Flask Application

To ensure everything is working correctly, run the Flask application using the following command:

python app.py
python app.py
python app.py

Enter fullscreen mode Exit fullscreen mode

This command starts the Flask development server, allowing you to test your application locally.

Step 9: Install Gunicorn

Gunicorn is a production-ready web server for running Flask applications. Install it using the following command:

pip install gunicorn
pip install gunicorn
pip install gunicorn

Enter fullscreen mode Exit fullscreen mode

Step 10: Run Gunicorn

To run your Flask application with Gunicorn, execute the following command:

gunicorn -b 0.0.0.0:8000 app:app
gunicorn -b 0.0.0.0:8000 app:app
gunicorn -b 0.0.0.0:8000 app:app

Enter fullscreen mode Exit fullscreen mode

This command starts Gunicorn, binding it to all available network interfaces on port 8000.

Step 11: Create a Systemd Service File

To run the Flask application as a service, create a systemd service file using the following command:

sudo nano /etc/systemd/system/project_name.service
sudo nano /etc/systemd/system/project_name.service
sudo nano /etc/systemd/system/project_name.service

Enter fullscreen mode Exit fullscreen mode

Step 12: Add Code to the Service File

Inside the service file, add the following code:

[Unit]
Description=Gunicorn instance for a simple app
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/project_name
ExecStart=/home/ubuntu/project_name/venv/bin/gunicorn -b localhost:8000 app:app
Restart=always
[Install]
WantedBy=multi-user.target
[Unit]
Description=Gunicorn instance for a simple app
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/project_name
ExecStart=/home/ubuntu/project_name/venv/bin/gunicorn -b localhost:8000 app:app
Restart=always

[Install]
WantedBy=multi-user.target
[Unit] Description=Gunicorn instance for a simple app After=network.target [Service] User=ubuntu Group=www-data WorkingDirectory=/home/ubuntu/project_name ExecStart=/home/ubuntu/project_name/venv/bin/gunicorn -b localhost:8000 app:app Restart=always [Install] WantedBy=multi-user.target

Enter fullscreen mode Exit fullscreen mode

This code specifies the service description, user, group, working directory, and the Gunicorn command to start the Flask application.

Step 13: Reload Systemd Daemon

After creating the service file, reload the systemd daemon to make it aware of the new service:

sudo systemctl daemon-reload
sudo systemctl daemon-reload
sudo systemctl daemon-reload

Enter fullscreen mode Exit fullscreen mode

Step 14: Start the Service

To start the Flask application service, run the following command:

sudo systemctl start project_name
sudo systemctl start project_name
sudo systemctl start project_name

Enter fullscreen mode Exit fullscreen mode

Step 15: Enable the Service on System Startup

To ensure that the Flask application service starts automatically on system boot, execute the following command:

sudo systemctl enable project_name
sudo systemctl enable project_name
sudo systemctl enable project_name

Enter fullscreen mode Exit fullscreen mode

Step 16: Test the Application

To verify if the Flask application is running correctly, use the curl command to send a request to the local server:

curl localhost:8000
curl localhost:8000
curl localhost:8000

Enter fullscreen mode Exit fullscreen mode

If everything is set up properly, you should see the response from your Flask application.

Step 17: Install Nginx

To set up Nginx as a reverse proxy, install it using the following command:

sudo apt-get install nginx
sudo apt-get install nginx
sudo apt-get install nginx

Enter fullscreen mode Exit fullscreen mode

Step 18: Start Nginx

To start the Nginx service, run the following command:

sudo systemctl start nginx
sudo systemctl start nginx
sudo systemctl start nginx

Enter fullscreen mode Exit fullscreen mode

Step 19: Enable Nginx on System Startup

To ensure that Nginx starts automatically on system boot, execute the following command:

sudo systemctl enable nginx
sudo systemctl enable nginx
sudo systemctl enable nginx

Enter fullscreen mode Exit fullscreen mode

Step 20: Configure Nginx

Open the Nginx configuration file using the nano editor:

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

Enter fullscreen mode Exit fullscreen mode

Step 21: Add Upstream and Proxy Pass

Add the following code at the top of the file, below the default comments:

upstream flaskhelloworld {
server 127.0.0.1:8000;
}
upstream flaskhelloworld {
    server 127.0.0.1:8000;
}
upstream flaskhelloworld { server 127.0.0.1:8000; }

Enter fullscreen mode Exit fullscreen mode

Step 22: Configure Proxy Pass

Inside the location / block, add the following code:

location / {
proxy_pass http://project_name;
}
location / {
    proxy_pass http://project_name;
}
location / { proxy_pass http://project_name; }

Enter fullscreen mode Exit fullscreen mode

This code sets up the reverse proxy to forward requests to the Gunicorn server running on port 8000.

Step 23: Restart Nginx

To apply the Nginx configuration changes, restart the Nginx service:

sudo systemctl restart nginx
sudo systemctl restart nginx
sudo systemctl restart nginx

Enter fullscreen mode Exit fullscreen mode

Congratulations! You have successfully deployed a Flask application on an AWS EC2 instance using Gunicorn and Nginx as a reverse proxy. Your Flask application is now accessible through the Nginx server, providing a robust and scalable setup for your application.

原文链接:Deploying a Flask Application on AWS EC2

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
love understands love; it needs no talk.
相爱的心息息相通,无需用言语倾诉
评论 抢沙发

请登录后发表评论

    暂无评论内容