Making Sense of The Infinite

Unlocking Infinite Possibilities Through Curiosity

Setting Up Python Web Services on Ubuntu

Introduction

Ubuntu is a popular choice for hosting web services due to its reliability and flexibility. Python, with its rich ecosystem of frameworks and libraries, pairs perfectly with Ubuntu for developing and deploying web applications. In this article, we’ll explore how to configure a Python web service using Miniconda, uWSGI, and Nginx. By the end, you’ll have a fully operational service that starts automatically with your system.

1. Installing Miniconda

Miniconda is a lightweight distribution of Python that includes conda, a powerful package manager. Here’s how to install it:

Step 1: Download Miniconda

Visit the official Miniconda website and copy the download link for your Ubuntu version. Use the terminal to download the installer:

mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
ShellScript

Step 2: Run the Installer

Make the script executable and run it:

bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm ~/miniconda3/miniconda.sh
source ~/miniconda3/bin/activate
conda init --all
ShellScript

Follow the on-screen instructions and ensure you initialize Miniconda for your shell.

Step 3: Verify Installation

Restart your terminal and check if conda is installed:

conda --version
ShellScript

2. Installing uWSGI

uWSGI is a powerful application server that interfaces between your Python web application and Nginx. Here’s how to set it up:

Step 1: Create a Virtual Environment

Use Miniconda to create a new environment for your app:

conda create -n mywebapp python=3.9  
conda activate mywebapp  
ShellScript

Step 2: Install uWSGI

With the virtual environment activated, install uWSGI using pip:

pip install uwsgi  
ShellScript

Step 3: Test the Installation

Run a quick test to ensure uWSGI is installed correctly:

uwsgi --version
ShellScript

3. Enabling Nginx as a Reverse Proxy

Nginx is a high-performance web server that can act as a reverse proxy for your uWSGI application.

Step 1: Install Nginx

Install Nginx using the following command:

sudo apt update  
sudo apt install nginx  
ShellScript

Step 2: Configure Nginx

Create a new Nginx configuration file for your web app:

sudo nano /etc/nginx/sites-available/mywebapp  
ShellScript

Add the following configuration:

server {
    listen 80;
    server_name your_domain_or_IP;

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
    }
}
Nginx

Step 3: Enable the Configuration

Link the configuration file and restart Nginx:

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

4. Creating a Sample App Environment with Conda

Step 1: Set Up the Environment

Use Conda to create and configure an environment for your application:

conda create -n mywebapp python=3.9 flask  
conda activate mywebapp
ShellScript

Step 2: Verify Dependencies

Install additional packages required for your app. For example:

pip install requests gunicorn
ShellScript

Step 3: Save Dependencies

Export the environment to a file for future reference:

conda env export > environment.yml
ShellScript

Step 4: Restore Dependencies (Optional)

If needed, you can recreate the environment from the saved file:

conda env create -f environment.yml
ShellScript

5. Starting a Sample Python Web App

To test your setup, create a simple Python web application using Flask.

Step 1: Create the App

Create a file named app.py with the following content:

from flask import Flask  
app = Flask(__name__)  

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

if __name__ == "__main__":  
    app.run()  
Python

Step 2: Create a uwsgi.ini Configuration File

Create a file named uwsgi.ini in your app directory and include the following parameters:

[uwsgi]
module = app:app
master = true
processes = 5
socket = 127.0.0.1:8000
vacuum = true
logto = /var/log/uwsgi/mywebapp.log

# Use the virtual environment
home = /path/to/conda/envs/mywebapp
INI

Replace /path/to/conda/envs/mywebapp with the path to your virtual environment.

Step 3: Run the App with uWSGI

Start the app using uWSGI:

uwsgi --ini uwsgi.ini
ShellScript

Visit your server’s IP or domain in a browser to see the message “Hello, World!” displayed.

6. Configuring uWSGI to Start at Boot

To ensure your web service starts automatically when the server boots, configure uWSGI as a systemd service.

Step 1: Create a uWSGI Service File

Create a new file at /etc/systemd/system/uwsgi.service:

sudo nano /etc/systemd/system/uwsgi.service  
ShellScript

Add the following configuration:

[Unit]  
Description=uWSGI Service  
After=network.target  

[Service]  
ExecStart=/path/to/conda/envs/mywebapp/bin/uwsgi --ini /path/to/your/uwsgi.ini  
Restart=always  
User=www-data  
Group=www-data  

[Install]  
WantedBy=multi-user.target  
ShellScript

Replace /path/to/conda/envs/mywebapp/bin/uwsgi and /path/to/your/uwsgi.ini with the actual paths.

Step 2: Enable and Start the Service

Enable and start the service:

sudo systemctl enable uwsgi  
sudo systemctl start uwsgi  
ShellScript

Step 3: Verify the Service

Check the status of the service:

sudo systemctl status uwsgi  
ShellScript

Conclusion

Setting up a Python web service on Ubuntu involves several steps, from installing Miniconda and configuring uWSGI to setting up Nginx and ensuring the application starts on boot. By following this guide, you can deploy a reliable, scalable web service tailored to your needs.

With your Python web app now up and running, you’re ready to build and deploy more complex applications with confidence. Whether you’re managing a small personal project or a production-grade system, this setup serves as a solid foundation.

Last revised on

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *