Flask là một microframework được viết bằng Python để phát triển các ứng dụng web hiện đại và API (Giao diện lập trình ứng dụng). Nó dựa trên bộ công cụ Werkzeug và mẫu Jinja2. Thay vì sử dụng kiến trúc phức tạp, Flask là một web framework nhỏ dễ mở rộng lõi và dễ học vì Flask có ít mã hơn. Flask không bao gồm ORM nhưng vẫn có các tính năng thú vị như định tuyến URL và công cụ mẫu.
Gunicorn hay "Green Unicorn" là một Máy chủ HTTP WSGI với chế độ công nhân trước khi phân nhánh. Nó được chuyển từ dự án Unicorn của Ruby. Gunicorn có thể được ghép nối với một số web framework, nó nhẹ trên tài nguyên máy chủ và nhanh. Gunicorn đứng giữa ứng dụng của bạn và máy chủ web, do đó bạn có thể ghép nối Gunicorn với máy chủ web như Nginx và Apache2.
Hướng dẫn sau đây sẽ chỉ cho bạn cách bắt đầu với Flask trên Debian 12. Bạn sẽ cài đặt Flask và tạo ứng dụng Flask đầu tiên, sau đó bạn cũng sẽ cấu hình ứng dụng Flask để chạy máy chủ web Gunicorn, Supervisor và Nginx.
Hoàn thành các bước sau để cài đặt các gói phụ thuộc cho Flask.
Trước tiên, hãy chạy lệnh apt update bên dưới để làm mới chỉ mục gói Debian của bạn.
Sau khi chỉ mục gói được cập nhật, hãy thực thi lệnh apt install bên dưới để cài đặt các gói phụ thuộc. Bao gồm pip, venv, Nginx và Supervisor.
Nhập y để xác nhận cài đặt và nhấn ENTER để tiếp tục.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22547%22%3E%3C/svg%3E
Khi mọi thứ đã được cài đặt, hãy chạy lệnh sau để thiết lập lệnh python mặc định thành python3.
Sau đó, xác minh phiên bản python, pip và venv bằng cách thực hiện lệnh sau. Điều này sẽ đảm bảo rằng các phụ thuộc Python cần thiết đã được cài đặt.
Bạn sẽ nhận được đầu ra tương tự như thế này:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22230%22%3E%3C/svg%3E
Tiếp theo, hãy xác minh dịch vụ Nginx bằng lệnh systemctl bên dưới để đảm bảo rằng dịch vụ được bật và đang chạy.
Đầu ra được bật xác nhận rằng Nginx sẽ tự động khởi động khi hệ thống khởi động. Và trạng thái hoạt động (đang chạy) cho biết Nginx đang chạy.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22180%22%3E%3C/svg%3E
Cuối cùng, hãy xác minh dịch vụ giám sát để đảm bảo rằng dịch vụ được bật và đang chạy.
Một đầu ra tương tự sẽ được hiển thị như thế này trên terminal:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22246%22%3E%3C/svg%3E
Tạo một thư mục dự án mới ~/testapp và di chuyển vào đó thông qua lệnh cd.
Tạo một môi trường ảo mới venv bằng lệnh bên dưới. Thư mục mới venv sẽ được tạo sau khi lệnh được thực thi.
Kích hoạt môi trường ảo venv bằng lệnh sau. Sau khi kích hoạt, dấu nhắc shell của bạn sẽ trở thành (venv) user@hostname...
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22530%22%20height=%22293%22%3E%3C/svg%3E
Sau khi venv được kích hoạt, hãy thực hiện lệnh pip sau để cài đặt Flask và Gunicorn.
Khi quá trình cài đặt bắt đầu, bạn sẽ nhận được kết quả sau:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22382%22%3E%3C/svg%3E
Trong trường hợp bạn muốn hủy kích hoạt khỏi môi trường ảo venv, hãy sử dụng lệnh sau.
Tạo tệp mới testapp.py bằng trình soạn thảo bạn thích. Ví dụ sau sử dụng nano.
Chèn tập lệnh Python sau để tạo ứng dụng Flask đầu tiên. Mã sau sẽ hiển thị tệp index.html trong thư mục templates mặc định.
Khi hoàn tất, hãy lưu và thoát khỏi tệp.
Bây giờ hãy tạo một thư mục templates mới và tạo một tệp mới index.html.
Chèn đoạn mã HTML sau vào tệp.
Lưu tệp và thoát khỏi trình chỉnh sửa.
Để kiểm tra ứng dụng của bạn, hãy chạy testapp.py bằng cách sử dụng từ shell của bạn như này:
Trong kết quả sau, bạn sẽ thấy ứng dụng Flask của mình đang chạy trên localhost với cổng mặc định 5000.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22117%22%3E%3C/svg%3E
Mở một thiết bị đầu cuối khác và kết nối với máy chủ, sau đó chạy lệnh curl bên dưới để xác minh Ứng dụng Flask.
Nếu mọi thứ diễn ra tốt đẹp, bạn sẽ thấy mã nguồn của tệp index.html mà bạn đã tạo.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22737%22%20height=%22166%22%3E%3C/svg%3E
Bây giờ bạn có thể nhấn Ctrl+c để kết thúc tiến trình Flask của bạn ứng dụng.
Tạo tệp mới wsgi.py trong cùng thư mục với testapp.py bằng trình chỉnh sửa sau.
Chèn tập lệnh Python sau để tích hợp ứng dụng Flask của bạn với Gunicorn.
Lưu và thoát tệp khi hoàn tất.
Để đảm bảo cài đặt thành công, hãy chạy lệnh gunicorn bên dưới. Thao tác này sẽ khởi động ứng dụng Flask của bạn trên cổng 8080 thông qua tập lệnh wsgi và gunicorn.
Nếu thành công, bạn sẽ thấy đầu ra như thế này:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22240%22%3E%3C/svg%3E
Bây giờ hãy khởi chạy trình duyệt web của bạn và truy cập địa chỉ IP của máy chủ theo theo cổng 8080, ví dụ: http://192.168.01.15:8080/. Nếu mọi việc diễn ra tốt đẹp, bạn sẽ nhận được trang index.html mà bạn đã tạo.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22112%22%3E%3C/svg%3E
Cuối cùng, nhấn Ctrl+c để kết thúc tiến trình Gunicorn.
Tạo cấu hình Supervisor mới /etc/supervisor/conf.d/testapp.conf bằng lệnh nano editor sau.
Chèn cấu hình sau và đảm bảo thay đổi thông tin chi tiết về người dùng, đường dẫn thư mục cài đặt Flask và ứng dụng tên.
Lưu và đóng tệp khi hoàn tất.
Tiếp theo, chạy lệnh systemctl sau để khởi động lại dịch vụ giám sát và áp dụng các thay đổi. Sau đó, hãy xác minh dịch vụ của giám sát viên để đảm bảo rằng dịch vụ đang chạy.
Đầu ra bên dưới cho biết dịch vụ giám sát viên đang chạy.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22210%22%3E%3C/svg%3E
Cuối cùng, hãy thực thi lệnh supervisorctl bên dưới để xác minh danh sách các quy trình đang chạy trong giám sát.
Nếu mọi việc suôn sẻ, bạn sẽ thấy ứng dụng thử nghiệm đang chạy dưới giám sát viên, chạy qua socket unix /home/alice/testapp/testapp.sock.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22179%22%3E%3C/svg%3E
Bạn cũng có thể xác minh socket UNIX /home/alice/testapp/testapp.sock bằng lệnh bên dưới.
Tạo cấu hình khối máy chủ Nginx mới /etc/nginx/sites-available/testapp bằng lệnh trình chỉnh sửa nano sau.
Chèn cấu hình sau và thay đổi server_name bằng tên miền cục bộ của bạn tên.
Lưu tệp và thoát khi bạn hoàn tất.
Bây giờ hãy chạy lệnh sau để kích hoạt ứng dụng kiểm tra cấu hình khối máy chủ. Sau đó, hãy xác minh cấu hình Nginx để đảm bảo rằng bạn có cú pháp phù hợp.
Nếu thành công, bạn sẽ nhận được đầu ra Cú pháp là OK - Kiểm tra thành công.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22155%22%3E%3C/svg%3E
Cuối cùng, hãy chạy Lệnh systemctl bên dưới để khởi động lại dịch vụ Nginx và áp dụng các thay đổi. Sau đó, hãy xác minh để đảm bảo rằng dịch vụ đang chạy.
Đầu ra sau đây cho biết trạng thái dịch vụ Nginx đang chạy.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22246%22%3E%3C/svg%3E
Chèn tên miền của ứng dụng Flask và địa chỉ IP của máy chủ như sau:
Lưu tệp và thoát khỏi trình chỉnh sửa khi bạn hoàn tất.
Bây giờ hãy khởi chạy trình duyệt web của bạn và truy cập tên miền của Ứng dụng Flask http://testapp.local/. Nếu mọi thứ diễn ra tốt đẹp, bạn sẽ thấy trang HTML của ứng dụng Flask.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22103%22%3E%3C/svg%3E
Gunicorn hay "Green Unicorn" là một Máy chủ HTTP WSGI với chế độ công nhân trước khi phân nhánh. Nó được chuyển từ dự án Unicorn của Ruby. Gunicorn có thể được ghép nối với một số web framework, nó nhẹ trên tài nguyên máy chủ và nhanh. Gunicorn đứng giữa ứng dụng của bạn và máy chủ web, do đó bạn có thể ghép nối Gunicorn với máy chủ web như Nginx và Apache2.
Hướng dẫn sau đây sẽ chỉ cho bạn cách bắt đầu với Flask trên Debian 12. Bạn sẽ cài đặt Flask và tạo ứng dụng Flask đầu tiên, sau đó bạn cũng sẽ cấu hình ứng dụng Flask để chạy máy chủ web Gunicorn, Supervisor và Nginx.
Điều kiện tiên quyết
Để tiếp tục với hướng dẫn này, hãy chuẩn bị:- Máy Debian 12 - Phiên bản Máy chủ hoặc Máy tính để bàn.
- Người dùng không phải root có quyền quản trị viên sudo.
Cài đặt các phụ thuộc
Trước khi cài đặt Flask, bạn phải đảm bảo các phụ thuộc đã được cài đặt trên hệ thống của mình, chẳng hạn như mô-đun Python 3.11, Pip và venv để tạo môi trường ảo Python, Nginx sẽ được sử dụng làm proxy ngược, và Supervisor để quản lý ứng dụng Flask.Hoàn thành các bước sau để cài đặt các gói phụ thuộc cho Flask.
Trước tiên, hãy chạy lệnh apt update bên dưới để làm mới chỉ mục gói Debian của bạn.
Mã:
sudo apt update
Mã:
sudo apt install python3 python3-pip python3-venv nginx supervisor
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22547%22%3E%3C/svg%3E
Khi mọi thứ đã được cài đặt, hãy chạy lệnh sau để thiết lập lệnh python mặc định thành python3.
Mã:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
Mã:
python --version
pip --version
python -m venv -v
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22230%22%3E%3C/svg%3E
Tiếp theo, hãy xác minh dịch vụ Nginx bằng lệnh systemctl bên dưới để đảm bảo rằng dịch vụ được bật và đang chạy.
Mã:
sudo systemctl is-enabled nginx
sudo systemctl status nginx
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22180%22%3E%3C/svg%3E
Cuối cùng, hãy xác minh dịch vụ giám sát để đảm bảo rằng dịch vụ được bật và đang chạy.
Mã:
sudo systemctl is-enabled supervisor
sudo systemctl status supervisor
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22246%22%3E%3C/svg%3E
Cài đặt Flask và Gunicorn
Trong bước tiếp theo, bạn sẽ cài đặt Flask thông qua môi trường ảo pip và venv. Vì vậy, bạn cũng sẽ học cách tạo và quản lý môi trường ảo Python bằng mô-đun venv của Python.Tạo một thư mục dự án mới ~/testapp và di chuyển vào đó thông qua lệnh cd.
Mã:
mkdir -p ~/testapp; cd ~/testapp
Mã:
python -m venv venv
Mã:
source venv/bin/activate
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22530%22%20height=%22293%22%3E%3C/svg%3E
Sau khi venv được kích hoạt, hãy thực hiện lệnh pip sau để cài đặt Flask và Gunicorn.
Mã:
pip install flask gunicorn
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22382%22%3E%3C/svg%3E
Trong trường hợp bạn muốn hủy kích hoạt khỏi môi trường ảo venv, hãy sử dụng lệnh sau.
Mã:
deactivate
Tạo ứng dụng đầu tiên bằng Flask
Sau khi Flask được cài đặt trên môi trường ảo, bây giờ bạn sẽ tạo ứng dụng Flask đầu tiên sẽ hiển thị cho bạn một trang HTML đơn giản. Bạn cũng sẽ học cách chạy và quản lý ứng dụng Flask.Tạo tệp mới testapp.py bằng trình soạn thảo bạn thích. Ví dụ sau sử dụng nano.
Mã:
nano testapp.py
Mã:
# testapp.py
from flask import Flask, render_template # importing the render_template function
app = Flask(__name__)
# route to index page
@app.route("/")
def hello():
return render_template('index.html')
if __name__ == ' __main__':
app.run(debug=True)
Bây giờ hãy tạo một thư mục templates mới và tạo một tệp mới index.html.
Mã:
mkdir -p templates
nano templates/index.html
Mã:
[HEADING=1]Hello Flask - Nginx and Gunicorn Debian 12![/HEADING]
Để kiểm tra ứng dụng của bạn, hãy chạy testapp.py bằng cách sử dụng từ shell của bạn như này:
Mã:
flask --app testapp run
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22117%22%3E%3C/svg%3E
Mở một thiết bị đầu cuối khác và kết nối với máy chủ, sau đó chạy lệnh curl bên dưới để xác minh Ứng dụng Flask.
Mã:
curl http://localhost:5000/
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22737%22%20height=%22166%22%3E%3C/svg%3E
Bây giờ bạn có thể nhấn Ctrl+c để kết thúc tiến trình Flask của bạn ứng dụng.
Chạy ứng dụng Flask với wsgi và Gunicorn
Trong bước này, bạn sẽ học cách thiết lập ứng dụng Flask của mình để chạy với Gunicorn. Gunicorn là giao diện cổng máy chủ web HTTP và hỗ trợ nhiều khung web, bao gồm cả Flask.Tạo tệp mới wsgi.py trong cùng thư mục với testapp.py bằng trình chỉnh sửa sau.
Mã:
nano wsgi.py
Mã:
# import testapp Flask application
from testapp import app
if __name__ == "__main__":
app.run(debug=True)
Để đảm bảo cài đặt thành công, hãy chạy lệnh gunicorn bên dưới. Thao tác này sẽ khởi động ứng dụng Flask của bạn trên cổng 8080 thông qua tập lệnh wsgi và gunicorn.
Mã:
gunicorn -w 4 --bind 0.0.0.0:8080 wsgi:app
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22240%22%3E%3C/svg%3E
Bây giờ hãy khởi chạy trình duyệt web của bạn và truy cập địa chỉ IP của máy chủ theo theo cổng 8080, ví dụ: http://192.168.01.15:8080/. Nếu mọi việc diễn ra tốt đẹp, bạn sẽ nhận được trang index.html mà bạn đã tạo.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22112%22%3E%3C/svg%3E
Cuối cùng, nhấn Ctrl+c để kết thúc tiến trình Gunicorn.
Chạy ứng dụng Flask với Supervisor
Sau khi cấu hình Flask với Guncorn, bước tiếp theo bạn sẽ tích hợp ứng dụng Flask của mình với Supervisor. Điều này cho phép bạn quản lý các ứng dụng Flask dễ dàng thông qua một dòng lệnh Supervisorctl duy nhất, đây là giao diện dòng lệnh cho Supervisor.Tạo cấu hình Supervisor mới /etc/supervisor/conf.d/testapp.conf bằng lệnh nano editor sau.
Mã:
sudo nano /etc/supervisor/conf.d/testapp.conf
Mã:
[program:testapp]
command=/bin/bash -c 'source /home/alice/testapp/venv/bin/activate; gunicorn -w 3 --bind unix:/home/alice/testapp/testapp.sock wsgi:app'
directory=/home/alice/testapp
user=alice
group=www-data
autostart=true
autorestart=true
stdout_logfile=/home/alice/testapp/testapp.log
stderr_logfile=/home/alice/testapp/error.log
Tiếp theo, chạy lệnh systemctl sau để khởi động lại dịch vụ giám sát và áp dụng các thay đổi. Sau đó, hãy xác minh dịch vụ của giám sát viên để đảm bảo rằng dịch vụ đang chạy.
Mã:
sudo systemctl restart supervisor
sudo systemctl status supervisor
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22210%22%3E%3C/svg%3E
Cuối cùng, hãy thực thi lệnh supervisorctl bên dưới để xác minh danh sách các quy trình đang chạy trong giám sát.
Mã:
sudo supervisorctl status
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22179%22%3E%3C/svg%3E
Bạn cũng có thể xác minh socket UNIX /home/alice/testapp/testapp.sock bằng lệnh bên dưới.
Mã:
ss -pl | grep testapp.sock
Thiết lập Nginx làm Proxy ngược
Lúc này, ứng dụng Flask của bạn đang chạy ở chế độ nền dưới Supervisor. Để ứng dụng của bạn có thể truy cập được, bạn sẽ thiết lập proxy ngược, mà bạn sẽ sử dụng là Nginx.Tạo cấu hình khối máy chủ Nginx mới /etc/nginx/sites-available/testapp bằng lệnh trình chỉnh sửa nano sau.
Mã:
sudo nano /etc/nginx/sites-available/testapp
Mã:
server {
listen 80;
server_name testapp.local;
location / {
include proxy_params;
proxy_pass http://unix:/home/alice/testapp/testapp.sock;
}
}
Bây giờ hãy chạy lệnh sau để kích hoạt ứng dụng kiểm tra cấu hình khối máy chủ. Sau đó, hãy xác minh cấu hình Nginx để đảm bảo rằng bạn có cú pháp phù hợp.
Mã:
sudo ln -s /etc/nginx/sites-available/testapp /etc/nginx/sites-enabled/
sudo nginx -t
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22155%22%3E%3C/svg%3E
Cuối cùng, hãy chạy Lệnh systemctl bên dưới để khởi động lại dịch vụ Nginx và áp dụng các thay đổi. Sau đó, hãy xác minh để đảm bảo rằng dịch vụ đang chạy.
Mã:
sudo systemctl restart nginx
sudo systemctl status nginx
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22246%22%3E%3C/svg%3E
Truy cập ứng dụng Flask
Nếu bạn đang sử dụng máy khách Linux máy, sử dụng trình chỉnh sửa nano sau để chỉnh sửa tệp /etc/hosts.
Mã:
sudo nano /etc/hosts
Mã:
192.168.10.15 testapp.local
Bây giờ hãy khởi chạy trình duyệt web của bạn và truy cập tên miền của Ứng dụng Flask http://testapp.local/. Nếu mọi thứ diễn ra tốt đẹp, bạn sẽ thấy trang HTML của ứng dụng Flask.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22103%22%3E%3C/svg%3E