Cách cài đặt Flask với Nginx và Gunicorn trên Ubuntu 22.04

theanh

Administrator
Nhân viên
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ẹ về 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, vì vậy bạn có thể ghép nối Gunicorn với máy chủ web như Nginx và Apache2.

Trong bài đăng này, chúng tôi sẽ chỉ cho bạn cách cài đặt và cấu hình Python Flask Web Framework với Gunicorn và Nginx trên hệ thống Ubuntu 22.04. Hướng dẫn này cũng đề cập đến cách thiết lập Python Flask với Gunicorn và Supervisord.

Điều kiện tiên quyết​

Đối với hướng dẫn này, bạn sẽ cần các điều kiện tiên quyết sau:
  • Hệ thống Ubuntu 22.04 - Bạn có thể sử dụng Ubuntu 22.04 Desktop hoặc Server.
  • Người dùng root - hoặc người dùng không phải root.

Thiết lập người dùng mới​

Trong bước đầu tiên, bạn sẽ thiết lập người dùng mới cho môi trường phát triển Python Flask web framework. Bạn có thể bỏ qua bước này nếu bạn đã có một người dùng không phải root với quyền root/sudo. Người dùng này sẽ được sử dụng để chạy ứng dụng Python Flask.

Trong ví dụ này, bạn sẽ tạo một người dùng mới với tên "james". Chạy lệnh sau để tạo một người dùng mới "james" và thiết lập mật khẩu cho người dùng "james". Hãy chắc chắn sử dụng một mật khẩu mạnh.
Mã:
sudo useradd -m -s /bin/bash james
sudo passwd james
Tiếp theo, thêm người dùng "james" vào nhóm "sudo" bằng lệnh bên dưới. Điều này sẽ cho phép người dùng mới "james" chạy lệnh "sudo su" và nhận được quyền quản trị viên root. cần thiết để cài đặt các gói và thiết lập cấu hình hệ thống.
Mã:
sudo usermod -aG sudo james
Cuối cùng, hãy kiểm tra và xác minh người dùng mới bằng cách đăng nhập với tư cách là người dùng "james" và chạy lệnh "sudo su" để có được quyền root. Nhập mật khẩu cho người dùng "james", và bạn sẽ nhận được root shell. Shell hiện tại sẽ được thay đổi từ "james@hostname" thành "root@hostname".
Mã:
su - james
sudo su


Bây giờ hãy nhấn "Ctrl+d" hoặc nhập "exit" để quay lại người dùng không phải root "james".

Cài đặt các gói phụ thuộc​

Bây giờ bạn sẽ cài đặt một số gói phụ thuộc để cài đặt Python Flask, bao gồm "python3-pip" và "python3-venv". Cuối cùng, bạn cũng sẽ cài đặt máy chủ web Nginx và trình giám sát.

Trước khi bắt đầu cài đặt các gói, hãy chạy lệnh apt bên dưới để cập nhật và làm mới kho lưu trữ gói của bạn.
Mã:
sudo apt update
Bây giờ hãy cài đặt python3-pip và python3-venv bằng lệnh sau. python3-pip sẽ được sử dụng làm trình quản lý gói cho các gói Python và python3-venv sẽ được sử dụng để tạo môi trường ảo cho quá trình phát triển ứng dụng Flask.
Mã:
sudo apt install python3-pip python3-venv
Nhập Y để xác nhận cài đặt và nhấn ENTER để tiếp tục. Quá trình cài đặt sẽ bắt đầu.



Sau khi quá trình cài đặt hoàn tất, hãy chạy lệnh sau để thiết lập Python mặc định trên hệ thống Ubuntu của bạn.
Mã:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
Bây giờ hãy xác minh phiên bản của Python và Pip, đồng thời kiểm tra mô-đun venv của Python bằng cách chạy các lệnh sau. Trong ví dụ sau, bạn sẽ cài đặt khung web Python Flask bằng Python 3.10.
Mã:
python --version
pip --version
python -m venv -h


Tiếp theo, hãy chạy lệnh apt sau để cài đặt máy chủ web Nginx và gói giám sát. Máy chủ web Nginx sẽ được sử dụng làm máy chủ web mặc định cho khung web Python Flask và trình giám sát sẽ được sử dụng để kiểm soát ứng dụng Flask, chẳng hạn như bắt đầu và dừng quy trình Flask.
Mã:
sudo apt install nginx supervisor
Nhập Y để xác nhận cài đặt và nhấn ENTER để tiếp tục. Đợi quá trình cài đặt gói hoàn tất.


Thiết lập môi trường phát triển​

Trong phần này, bạn sẽ tạo một môi trường ảo Python mới sẽ được sử dụng làm môi trường phát triển của nền tảng web Python Flask.

Chạy lệnh sau để tạo thư mục dự án mới "/var/www/myapp". Thư mục này sẽ được sử dụng làm thư mục dự án chính cho ứng dụng FLask của bạn.
Mã:
sudo mkdir -p /var/www/myapp
Thay đổi quyền sở hữu thư mục mới thành người dùng "james" và thay đổi quyền thành "755" bằng lệnh bên dưới.
Mã:
sudo chown -R james:james /var/www/myapp
sudo chmod 755 /var/www/myapp
Di chuyển đến thư mục dự án "/var/www/myapp" và tạo một môi trường ảo Python mới có tên "myenv" bằng lệnh sau.
Mã:
cd /var/www/myapp
python -m venv myenv
Cuối cùng, kích hoạt môi trường ảo "myenv" bằng lệnh sau. Khi được kích hoạt, dấu nhắc shell của bạn sẽ trở thành "(myenv) james@hostname".
Mã:
source myenv/bin/activate

Cài đặt Python Flask trên Môi trường ảo​

Sau khi thiết lập môi trường ảo, bạn có thể chạy lệnh pip bên dưới để cài đặt Python Flask và Gunicorn trên môi trường ảo của mình. Tất cả các gói này sẽ được cài đặt từ kho lưu trữ Python PyPi.
Mã:
pip install flask gunicorn
Bây giờ quá trình cài đặt sẽ bắt đầu.


Tạo Dự án ứng dụng đầu tiên bằng Flask​

Bây giờ bạn đã cài đặt khung web Python Flask. Bây giờ bạn sẽ tạo ứng dụng đầu tiên bằng Flask.

Trước khi tạo dự án Flask, hãy đảm bảo rằng bạn đang ở thư mục dự án chính "/var/www/myapp" và môi trường ảo "myenv" được kích hoạt.

Tạo tệp mới "myapp.py" bằng trình soạn thảo nano.
Mã:
nano myapp.py
Bây giờ hãy thêm tập lệnh Python sau vào tệp.
Mã:
# myapp.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)
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, tạo một thư mục mới "templates" và tạo một tệp mới "index.html" bên trong thư mục "template".
Mã:
mkdir -p templates/
nano templates/index.html
Thêm tập lệnh HTML sau vào đó.
Mã:
 [HEADING=1]Hello World![/HEADING]
Lưu và đóng tệp khi bạn hoàn tất.

Cuối cùng, chạy tập lệnh "myapp.py" để chạy ứng dụng Flask đầu tiên của bạn.
Mã:
python myapp.py
Bạn sẽ thấy dự án Flask của mình đang chạy trên máy chủ cục bộ mặc định với cổng 5000.



Mở shell terminal mới của máy Ubuntu và chạy lệnh curl bên dưới.
Mã:
curl http://127.0.0.1:5000/
Bây giờ bạn có thể thấy đầu ra của trang index.html trong ảnh chụp màn hình sau.



Để chấm dứt quy trình ứng dụng Flask, bạn có thể nhấn nút "Ctrl+c".

Thiết lập Gunicorn​

Gunicorn hay "Green Unicorn" là giao diện cổng máy chủ web Python cho máy chủ HTTP. Giao diện này cho phép bạn chạy ứng dụng Python dưới dạng quy trình HTTP hoặc sử dụng tệp sock. Bây giờ bạn sẽ thêm Gunicorn vào dự án Flask của mình.

Bên trong thư mục dự án Flask, tạo một tệp mới "wsgi.py" bằng trình soạn thảo nano.
Mã:
nano wsgi.py
Thêm đoạn mã sau vào đó.
Mã:
# import myapp Flask application
from myapp import app

if __name__ == "__main__":
 app.run(debug=True)
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, chạy lệnh sau để bắt đầu và chạy dự án Flask của bạn bằng Gunicorn. Trong ví dụ này, dự án Flask của bạn sẽ chạy trên địa chỉ IP công khai có cổng 8000.
Mã:
gunicorn -w 4 --bind 0.0.0.0:8000 wsgi:app


Mở trình duyệt web và nhập địa chỉ IP hệ thống Ubuntu của bạn có cổng 8000 (tức là http://192.168.5.28:8000/). Và bạn sẽ thấy trang chỉ mục của dự án Flask của mình.



Bây giờ hãy nhấn "Ctrl+c" để kết thúc tiến trình Guncorn.

Chạy ứng dụng Flask với Gunicorn và Supervisor​

Bây giờ bạn đã cấu hình Gunicorn cho dự án FLask. Và đã đến lúc thiết lập Supervisor cho khung web Flask.

Supervisor là trình quản lý quy trình cho phép bạn kiểm soát các quy trình ở một nơi. Vì vậy, thay vì chạy ứng dụng Flask như một dịch vụ hệ thống, bạn sẽ sử dụng Supervisor.

Tạo tệp cấu hình mới "/etc/supervisor/conf.d/myapp.conf" bằng trình soạn thảo nano.
Mã:
sudo nano /etc/supervisor/conf.d/myapp.conf
Thêm cấu hình sau vào tệp. Và hãy chắc chắn thay đổi đường dẫn chi tiết của cấu hình và người dùng.

Sử dụng cấu hình này, bạn sẽ chạy dự án Flask của mình với Gunicorn và thay vì sử dụng địa chỉ IP cho ứng dụng của mình, bạn sẽ chạy dự án Flask như một tệp sock.
Mã:
[program:myapp] 
command=/bin/bash -c 'source /var/www/myapp/myenv/bin/activate; gunicorn -w 3 --bind unix:/var/www/myapp/ipc.sock wsgi:app'
directory=/var/www/myapp
user=james
group=www-data
autostart=true 
autorestart=true 
stdout_logfile=/var/www/myapp/myapp.log 
stderr_logfile=/var/www/myapp/error.log
Lưu và đóng tệp khi bạn hoàn tất.

Bây giờ hãy khởi động lại dịch vụ giám sát bằng lệnh bên dưới để áp dụng các thay đổi mới.
Mã:
sudo systemctl restart supervisor
Cuối cùng, hãy kiểm tra và xác minh danh sách các quy trình trong Giám sát bằng lệnh sau. Bạn sẽ thấy tiến trình "myapp" đang chạy.
Mã:
sudo supervisorctl status
Và nếu bạn kiểm tra dịch vụ giám sát, bạn sẽ thấy dịch vụ giám sát đang hoạt động và đang chạy.
Mã:
sudo systemctl status supervisor

Thiết lập Nginx làm Proxy ngược cho Ứng dụng Flask​

Tạo cấu hình máy chủ ảo mới "/etc/nginx/sites-available/myapp.conf" bằng trình chỉnh sửa nano.
Mã:
sudo nano /etc/nginx/sites-available/myapp.conf
Thêm cấu hình sau vào tệp. Trong ví dụ này, dự án Flask sẽ chạy dưới tên miền cục bộ "www.myapp.local". Ngoài ra, bạn có thể thấy tùy chọn "proxy_pass" được trỏ đến tệp UNIX sock đang chạy dưới Gunicorn và Supervisor.
Mã:
server {
 listen 80;
 server_name www.myapp.local;

 location / {
 include proxy_params;
 proxy_pass http://unix:/var/www/myapp/ipc.sock;
 }
}
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, chạy lệnh sau để kích hoạt cấu hình khối máy chủ "myapp.conf", sau đó xác minh cấu hình Nginx. Nếu bạn không gặp bất kỳ lỗi nào, bạn sẽ thấy thông báo đầu ra như "Cú pháp OK - kiểm tra thành công".
Mã:
sudo ln -s /etc/nginx/sites-available/myapp.conf /etc/nginx/sites-enabled/
sudo nginx -t
Sau đó, bạn có thể khởi động lại dịch vụ Nginx bằng lệnh sau để áp dụng các thay đổi mới cho cấu hình Nginx.
Mã:
sudo systemctl restart nginx
Bây giờ trên máy cục bộ của bạn, hãy chỉnh sửa tệp /etc/hosts bằng trình chỉnh sửa nano.
Mã:
sudo nano /etc/hosts
Xác định địa chỉ IP của máy Ubuntu với tên miền "www.myapp.local" như bên dưới.
Mã:
192.168.5.28 www.myapp.local
Lưu và đóng tệp.

Bây giờ hãy mở trình duyệt web của bạn và nhập tên miền dự án Flask (tức là http://www.myapp.local) vào thanh địa chỉ. Và bạn sẽ nhận được trang chỉ mục của dự án Python Flask của mình.


Kết luận​

Xin chúc mừng! Bạn đã cài đặt thành công khung web Python Flask với Gunicorn và Nginx trên máy Ubuntu 22.04. Bạn cũng đã học cách tạo dự án Python Flask đầu tiên, thiết lập môi trường ảo Python và thiết lập quản lý quy trình Supervisor cho dự án Flask.
 
Back
Bên trên