DEV Community

qing
qing

Posted on

How to Deploy Your Python App on a $5/Month Server

How to Deploy Your Python App on a $5/Month Server

Deploying Your Python App on a $5/Month Server: A Step-by-Step Guide

If you're a Python developer, you know how easy it is to get caught up in the excitement of building a new app. You spend hours coding, testing, and refining your project, only to realize that you need to deploy it to the world. But deploying a web app can be a daunting task, especially if you're on a tight budget. That's why I'm excited to share with you how to deploy your Python app on a $5/month server.

Choosing the Right Server

Before we dive into the deployment process, let's talk about choosing the right server. As a Python developer, you have several options when it comes to hosting your app. You can use a cloud provider like AWS, Google Cloud, or Microsoft Azure, or you can opt for a virtual private server (VPS) from a provider like DigitalOcean or Linode.

For this tutorial, we'll be using DigitalOcean, a popular VPS provider that offers a wide range of affordable plans. With DigitalOcean, you can get a $5/month droplet (their term for a virtual server) that comes with 1 CPU core, 1 GB of RAM, and 30 GB of storage.

Setting Up Your Droplet

To set up your droplet, follow these steps:

  1. Create an account with DigitalOcean and sign in to the control panel.
  2. Click on the "Create" button in the top right corner of the page.
  3. Select "Droplets" from the dropdown menu and choose the "Basic" plan.
  4. Choose the region that's closest to your target audience.
  5. Select the "Ubuntu 20.04" operating system (you can also use other Linux distributions, but Ubuntu is a popular choice for Python development).
  6. Choose a hostname for your droplet (this will be the name of your server).
  7. Set a password for your droplet (make sure it's a strong password).
  8. Click on the "Create Droplet" button to provision your server.

Installing Required Packages

Once your droplet is provisioned, you'll need to install the required packages to run your Python app. Run the following commands in the terminal:

sudo apt update
sudo apt install python3-pip python3-dev libssl-dev libffi-dev
Enter fullscreen mode Exit fullscreen mode

Creating a New Python Virtual Environment

To keep your system packages separate from your project dependencies, we'll create a new Python virtual environment. Run the following command:

python3 -m venv myenv
Enter fullscreen mode Exit fullscreen mode

This will create a new virtual environment called myenv in the current directory.

Installing Flask

For this tutorial, we'll be using Flask, a popular Python web framework. Run the following command to install Flask:

myenv/bin/pip install flask
Enter fullscreen mode Exit fullscreen mode

Creating a New Flask App

Create a new file called app.py and add the following code:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=80)
Enter fullscreen mode Exit fullscreen mode

This code creates a new Flask app that listens on port 80 and returns "Hello, World!" when you visit the root URL.

Running Your Flask App

To run your Flask app, navigate to the directory where you created the app.py file and run the following command:

myenv/bin/python app.py
Enter fullscreen mode Exit fullscreen mode

This will start the Flask development server, and you should be able to visit your app by navigating to http://your-droplet-ip in your browser (replace your-droplet-ip with the IP address of your droplet).

Deploying Your App

To deploy your app to the world, you'll need to use a web server like Nginx to serve your Flask app. Run the following commands to install Nginx:

sudo apt update
sudo apt install nginx
Enter fullscreen mode Exit fullscreen mode

Create a new file called /etc/nginx/sites-available/default and add the following code:

server {
    listen 80;
    server_name your-droplet-ip;

    location / {
        include proxy_params;
        proxy_pass http://localhost:80;
    }
}
Enter fullscreen mode Exit fullscreen mode

Replace your-droplet-ip with the IP address of your droplet.

Restart Nginx by running the following command:

sudo systemctl restart nginx
Enter fullscreen mode Exit fullscreen mode

That's it! Your Flask app is now deployed to the world, and you can access it by visiting http://your-droplet-ip in your browser.

Conclusion

Deploying a Python app to a $5/month server is easier than you think. With DigitalOcean, you can get a virtual server up and running in minutes, and with Flask, you can create a web app in no time. By following the steps outlined in this tutorial, you can deploy your app to the world and start sharing it with the world.

So, what are you waiting for? Get started today and take the first step towards deploying your own Python app on a $5/month server!


Bonus: Monitoring Your App

To keep an eye on your app's performance, you can use a monitoring tool like Prometheus and Grafana. Run the following commands to install Prometheus and Grafana:

myenv/bin/pip install prometheus-flask
Enter fullscreen mode Exit fullscreen mode

Create a new file called prometheus.yml and add the following code:

global:
  scrape_interval: 10s

scrape_configs:
  - job_name: 'flask_app'
    scrape_interval: 10s
    static_configs:
      - targets: ['your-droplet-ip:80']
Enter fullscreen mode Exit fullscreen mode

Replace your-droplet-ip with the IP address of your droplet.

Create a new file called grafana.yml and add the following code:

global:
  scrape_interval: 10s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 10s
    static_configs:
      - targets: ['localhost:9090']
Enter fullscreen mode Exit fullscreen mode

Restart Prometheus and Grafana by running the following commands:

sudo systemctl restart prometheus
sudo systemctl restart grafana-server
Enter fullscreen mode Exit fullscreen mode

You can now access your app's performance metrics by visiting http://your-droplet-ip:3000 in your browser (replace your-droplet-ip with the IP address of your droplet).

Top comments (0)