Table of Contents

Join CloudFly's Telegram channel to receive more offers and never miss any promotions from CloudFly

Hướng dẫn xây dựng ứng dụng Python với Flask trên Ubuntu 22.04

Posted on: July 17, 2025

PythonUbuntu

description image

Prerequisites

Trước khi bắt đầu hướng dẫn này, bạn nên có:

  • Một máy chủ đã cài đặt Ubuntu 22.04 và một người dùng không phải root với quyền sudo.
  • Đã cài đặt Nginx, theo bước 1 và 2 của [How To Install Nginx on Ubuntu 22.04]
  • Một tên miền đã được cấu hình trỏ đến máy chủ của bạn.
  • Đảm bảo tạo các bản ghi DNS sau:
    • Bản ghi A với your_domain trỏ tới địa chỉ IP công khai của máy chủ.
    • Bản ghi A với www.your_domain trỏ tới địa chỉ IP công khai của máy chủ.
  • Hiểu biết về chuẩn WSGI mà Gunicorn server sẽ dùng để giao tiếp với ứng dụng Flask của bạn. [Thảo luận chi tiết về WSGI]

Step 1 — Cài đặt các thành phần từ kho Ubuntu

Bước đầu tiên là cài đặt tất cả các thành phần cần thiết từ kho Ubuntu. Bao gồm pip, trình quản lý gói Python, sẽ quản lý các thành phần Python. Bạn cũng sẽ lấy các file phát triển Python cần thiết để xây dựng một số thành phần Gunicorn.

Đầu tiên, cập nhật chỉ mục gói cục bộ và cài các gói cần thiết để xây dựng môi trường Python. Bao gồm python3-pip và một số gói cùng công cụ phát triển khác:

sudo apt update
sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools

Với các gói đã có, bước tiếp theo là tạo môi trường ảo cho dự án của bạn.

Step 2 — Tạo môi trường ảo Python

Tiếp theo, bạn sẽ tạo môi trường ảo để cách ly ứng dụng Flask với các file Python khác trên hệ thống của bạn.

Bắt đầu bằng cách cài đặt gói python3-venv, sẽ cài module venv:

sudo apt install python3-venv

Tạo một thư mục cha cho dự án Flask của bạn. Di chuyển vào thư mục sau khi tạo:

mkdir ~/myproject
cd ~/myproject

Tạo môi trường ảo để chứa các gói Python của dự án Flask:

python3 -m venv myprojectenv

Lệnh này sẽ cài một bản Python và pip cục bộ vào thư mục myprojectenv trong thư mục dự án của bạn.

Trước khi cài ứng dụng trong môi trường ảo, bạn cần kích hoạt nó:

source myprojectenv/bin/activate

Dấu nhắc lệnh của bạn sẽ thay đổi để báo hiệu bạn đang hoạt động trong môi trường ảo. Ví dụ: (myprojectenv)user@host:~/myproject$.

Step 3 — Thiết lập ứng dụng Flask

Khi đã ở trong môi trường ảo, bạn có thể cài Flask và Gunicorn và bắt đầu thiết kế ứng dụng.

Đầu tiên, cài wheel bằng pip để đảm bảo gói cài đặt kể cả khi không có wheel:

pip install wheel

Lưu ý: Dù bạn dùng phiên bản Python nào, khi kích hoạt môi trường ảo, nên dùng lệnh pip thay vì pip3.

Tiếp theo, cài Flask và Gunicorn:

pip install gunicorn flask

Tạo một ứng dụng mẫu

Bây giờ bạn có Flask, tạo ứng dụng đơn giản. Flask là microframework, không bao gồm nhiều công cụ như các framework khác, nó tồn tại chủ yếu như module để import trong dự án giúp khởi tạo web app.

Tạo file myproject.py trong thư mục dự án:

nano ~/myproject/myproject.py

Code ứng dụng sẽ nằm trong file này, import Flask và khởi tạo một Flask object. Bạn có thể định nghĩa các hàm xử lý theo đường dẫn:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    app.run(host='0.0.0.0')

Nội dung này định nghĩa nội dung hiển thị khi truy cập root domain. Lưu và đóng file lại.

Nếu bạn đã bật firewall UFW, mở cổng 5000:

sudo ufw allow 5000

Chạy thử app Flask:

python myproject.py

Bạn sẽ thấy thông báo dạng:

* Serving Flask app "myproject" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

Truy cập http://your_server_ip:5000 trên trình duyệt sẽ thấy trang với chữ Hello There! màu xanh.

Dùng CTRL-C để dừng server phát triển Flask.

Tạo điểm vào WSGI

Tạo file làm điểm vào cho ứng dụng, sẽ nói Gunicorn cách tương tác với app.

nano ~/myproject/wsgi.py

Nội dung file:

from myproject import app

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

Lưu và đóng file.

Step 4 — Cấu hình Gunicorn

Kiểm tra Gunicorn chạy app chính xác:

cd ~/myproject
gunicorn --bind 0.0.0.0:5000 wsgi:app

Sẽ thấy thông báo Gunicorn khởi động và lắng nghe ở port 5000.

Truy cập http://your_server_ip:5000 sẽ thấy app Flask.

Nhấn CTRL-C để dừng Gunicorn.

Deactive môi trường ảo:

deactivate

Tiếp theo, tạo service systemd để Gunicorn tự động chạy lúc khởi động:

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

Nội dung:

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=sammy
Group=www-data
WorkingDirectory=/home/sammy/myproject
Environment="PATH=/home/sammy/myproject/myprojectenv/bin"
ExecStart=/home/sammy/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

Thay sammy và đường dẫn theo người dùng và dự án của bạn.

Lưu và đóng file.

Khởi động và kích hoạt service:

sudo systemctl start myproject
sudo systemctl enable myproject

Kiểm tra trạng thái:

sudo systemctl status myproject

Nếu thấy đang chạy, không lỗi, ta tiến hành bước tiếp.

Step 5 — Cấu hình Nginx làm proxy

Tạo file config server block cho Nginx:

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

Nội dung:

server {
    listen 80;
    server_name your_domain www.your_domain;

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/sammy/myproject/myproject.sock;
    }
}

Lưu và đóng.

Kích hoạt cấu hình:

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

Kiểm tra cú pháp Nginx:

sudo nginx -t

Nếu không lỗi, khởi động lại Nginx:

sudo systemctl restart nginx

Thay đổi firewall:

sudo ufw delete allow 5000
sudo ufw allow 'Nginx Full'

Truy cập http://your_domain sẽ thấy ứng dụng Flask.

Lưu ý: Nếu Nginx báo lỗi 502 gateway, kiểm tra quyền thư mục home người dùng có tối thiểu 0755.

Step 6 — Bảo mật ứng dụng

Để đảm bảo lưu lượng đến máy chủ an toàn, cài đặt SSL cho domain. Có thể lấy miễn phí từ Let's Encrypt.

Cài Certbot plugin cho Nginx:

sudo apt install python3-certbot-nginx

Chạy Certbot với plugin Nginx:

sudo certbot --nginx -d your_domain -d www.your_domain

Thiết lập thông tin email và chấp nhận điều khoản khi được yêu cầu.

Chọn cấu hình chuyển hướng HTTP sang HTTPS khi được hỏi.

Sau khi thành công, chứng chỉ SSL sẽ được lưu và Nginx được cấu hình lại tự động.

Xóa bỏ cấu hình firewall HTTP nếu đã cho phép:

sudo ufw delete allow 'Nginx HTTP'

Truy cập https://your_domain để kiểm tra trang được bảo mật.

Conclusion

Trong hướng dẫn này, bạn đã tạo và bảo mật ứng dụng Flask đơn giản trong môi trường ảo Python. Bạn tạo điểm vào WSGI để các máy chủ hỗ trợ WSGI có thể giao tiếp với ứng dụng, rồi cấu hình Gunicorn làm máy chủ ứng dụng. Sau đó tạo tệp dịch vụ systemd để tự động chạy ứng dụng khi máy chủ khởi động. Cuối cùng, tạo block server Nginx để Nginx chuyển tiếp lưu lượng tới Gunicorn và bảo mật truy cập với Let’s Encrypt.

Flask là framework rất đơn giản và linh hoạt, giúp bạn phát triển ứng dụng với tính năng cần thiết mà không quá ràng buộc cấu trúc. Bạn có thể dùng stack mô tả trong hướng dẫn để phục vụ các ứng dụng Flask do bạn thiết kế.

Join CloudFly's Telegram channel to receive more offers and never miss any promotions from CloudFly
Share

0 replies