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

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 khuôn khổ web 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á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ố khuôn khổ web, 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, vì vậy bạn có thể ghép nối Gunicorn với máy chủ web như Nginx và Apache2.

Trong hướng dẫn này, chúng tôi sẽ chỉ cách cài đặt và cấu hình Flask Python Web Framework với Gunicorn và Nginx trên máy chủ Rocky Linux. Bạn cũng sẽ học cách thiết lập Supervisord làm trình quản lý quy trình để quản lý ứng dụng Python Flask.

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

Để hoàn thành hướng dẫn này, bạn sẽ cần đáp ứng một số yêu cầu sau:
  • Máy chủ Rocky Linux - Bạn có thể sử dụng cả Rocky Linux v8 hoặc v9 - Máy tính để bàn hoặc Máy chủ.
  • Người dùng không phải root có quyền quản trị viên root sudo.
  • Tên miền giả để phát triển cục bộ.

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

Trong bước đầu tiên, bạn sẽ cài đặt một số phụ thuộc gói sẽ được sử dụng để cài đặt và triển khai Flask Web Framework. Bao gồm Python Pip, Nginx và Supervisord.

Tất cả các gói phụ thuộc này đều có sẵn trên kho lưu trữ Rocky Linux, bạn có thể dễ dàng cài đặt chúng thông qua lệnh DNF.

Trước tiên, hãy đảm bảo kho lưu trữ EPEL được cài đặt trên hệ thống của bạn. hoặc bạn có thể chỉ cần cài đặt và kích hoạt nó thông qua lệnh dnf bên dưới.
Mã:
sudo dnf install epel-release
Bây giờ, hãy cài đặt một số gói python 'python3-pip' và 'python3-devel' và trình biên dịch GCC bằng lệnh dnf bên dưới. Các gói này sẽ được sử dụng để cài đặt các gói Python.
Mã:
sudo dnf install python3-pip python3-devel gcc
Khi được nhắc xác nhận cài đặt, hãy nhập y 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=%22282%22%3E%3C/svg%3E


Tiếp theo, chạy một lệnh dnf khác bên dưới để cài đặt Nginx web server và các gói supervisord. Nginx ở đây sẽ được sử dụng như một proxy ngược cho dự án Flask của bạn và supervisord sẽ được sử dụng để quản lý quy trình ứng dụng Flask của bạn.
Mã:
sudo dnf install nginx supervisor
Nhập y và nhấn ENTER để xác nhận cài đặt.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22367%22%3E%3C/svg%3E


Bây giờ, hãy khởi động và kích hoạt dịch vụ Nginx thông qua lệnh systemctl bên dưới. Sau đó, hãy xác minh dịch vụ Nginx để đảm bảo rằng nó đang chạy.
Mã:
sudo systemctl start nginx
sudo systemctl enable nginx
Mã:
sudo systemctl status nginx
Bạn sẽ thấy đầu ra như sau - Dịch vụ Nginx đã được bật và sẽ tự động chạy khi hệ thống khởi động. Và trạng thái của dịch vụ Nginx đang chạy.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22220%22%3E%3C/svg%3E


Và đối với dịch vụ supervisord, hãy chạy lệnh sau để khởi động và kích hoạt dịch vụ này. Sau đó, hãy xác minh trạng thái của dịch vụ supervisord để đảm bảo dịch vụ đang chạy.
Mã:
sudo systemctl start supervisord
sudo systemctl enable supervisord
Mã:
sudo systemctl status supervisord
Bạn sẽ thấy dịch vụ supervisord được bật và sẽ tự động chạy khi khởi động. Và trạng thái của dịch vụ giám sát đang chạy.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22223%22%3E%3C/svg%3E

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

Sau khi cài đặt các gói phụ thuộc, bây giờ bạn sẽ thiết lập một người dùng mới sẽ được sử dụng để chạy dự án Flask.

Chạy lệnh sau để tạo người dùng mới và thiết lập mật khẩu. Trong ví dụ này, bạn sẽ tạo người dùng mới alice.

Khi được nhắc tạo mật khẩu mới, hãy nhập mật khẩu của bạn và lặp lại.
Mã:
sudo useradd -m -s /bin/bash alice
sudo passwd alice
Bây giờ, hãy chạy lệnh sau để thêm người dùng alice vào nhóm 'wheel' để người dùng có thể thực thi lệnh sudo.
Mã:
sudo usermod -aG wheel alice
Cuối cùng, hãy đăng nhập vào người dùng mới và chạy lệnh 'sudo' để xác minh quyền root. Nhập mật khẩu của bạn khi được nhắc.
Mã:
su - alice
sudo su
Bạn sẽ thấy shell gốc của máy Rocky Linux của mình.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22620%22%20height=%22542%22%3E%3C/svg%3E

Thiết lập Python Virtual Môi trường​

Trong bước này, bạn sẽ thiết lập môi trường Python Virtual cho khung web Flask.

Đăng nhập với tư cách là người dùng của bạn bằng lệnh sau.
Mã:
su - alice
Tạo thư mục cài đặt Flask mới '/var/www/myflask' bằng lệnh mkdir sau lệnh.
Mã:
sudo mkdir -p /var/www/myflask
Thay đổi quyền sở hữu và quyền của thư mục cài đặt Flask bằng lệnh bên dưới. Quyền sở hữu phải thuộc về người dùng alice với quyền 755.
Mã:
sudo chown -R alice:alice /var/www/myflask
sudo chmod 755 /var/www/myflask
Bây giờ, hãy di chuyển thư mục làm việc của bạn đến thư mục cài đặt Flask '/var/www/myflask' và tạo một môi trường ảo Python mới thông qua lệnh python bên dưới.
Mã:
cd /var/www/myflask
python3 -m venv myenv
Bạn sẽ thấy một thư mục mới 'myenv' đã được tạo.

Tiếp theo, kích hoạt môi trường ảo Python bằng lệnh sau. Nếu được kích hoạt, bạn sẽ thấy định dạng nhắc nhở được thay đổi thành '(myenv alice@hostname'.
Mã:
source myenv/bin/activate

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22611%22%20height=%22348%22%3E%3C/svg%3E


Để hủy kích hoạt khỏi môi trường ảo, bạn nên chạy lệnh sau lệnh.
Mã:
deactivate

Cài đặt Flask và Gunicorn​

Trước khi cài đặt Flask, hãy đảm bảo bạn đang ở trong môi trường ảo. hoặc bạn có thể chỉ cần chạy lệnh sau để ghi nhật ký trong.
Mã:
su - alice
Mã:
cd /var/www/myflask
source myenv/bin/activate
Bây giờ, hãy cài đặt Flask và Gunicorn thông qua lệnh pip bên dưới. Thao tác này sẽ cài đặt Flask và Gunicorn trên môi trường ảo, không phải trên toàn hệ thống.
Mã:
pip3 install flask gunicorn

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22465%22%3E%3C/svg%3E


Sau khi Flask và Gunciron được cài đặt, bạn đã sẵn sàng tạo ứng dụng đầu tiên bằng Flask Web Framework.

Tạo ứng dụng Flask đầu tiên​

Trước khi bắt đầu tạo ứng dụng Flask, hãy đảm bảo rằng bạn đang ở trong môi trường ảo Python của mình.

Tạo tệp Python mới 'myflask.py' bằng trình soạn thảo bạn thích. Trong ví dụ này, chúng ta sẽ sử dụng trình soạn thảo nano.
Mã:
nano myflask.py
Bây giờ hãy thêm đoạn mã sau vào tệp.
Mã:
# myflask.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(host='0.0.0.0')
Lưu tệp và thoát khỏi trình soạn thảo khi bạn hoàn tất.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22250%22%3E%3C/svg%3E


Tiếp theo, tạo một thư mục mới 'templates' cho các tệp tĩnh của bạn và tạo một tệp index.html mới trên đầu thư mục đó.
Mã:
mkdir -p templates
nano templates/index.html
Thêm tập lệnh HTML sau vào tệp.
Mã:
 [HEADING=1]Hello Flask - Rocky Linux![/HEADING]
Lưu tệp và thoát khỏi trình soạn thảo khi bạn hoàn tất.

Bây giờ hãy chạy tập lệnh Python Flask 'myflask.py' bằng lệnh bên dưới. Lệnh này sẽ chạy ứng dụng Flask của bạn ở chế độ phát triển, chạy địa chỉ IP máy chủ với cổng mặc định 5000.
Mã:
python3 myflask.py
Dưới đây là kết quả tương tự mà bạn sẽ nhận được.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22228%22%3E%3C/svg%3E


Tiếp theo, mở một thiết bị đầu cuối khác và chạy lệnh curl bên dưới để truy cập ứng dụng Flask của bạn. Bạn sẽ thấy tập lệnh của tệp 'index.html' mà bạn đã tạo.
Mã:
curl localhost:5000

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22599%22%20height=%22181%22%3E%3C/svg%3E


Bây giờ hãy nhấn 'Ctrl+c' để kết thúc ứng dụng Flask của bạn.

Thiết lập Gunicorn và Supervisord​

Trong bước này, bạn sẽ thiết lập ứng dụng Flask của mình với Gunicorn và Supervisord. Điều này cho phép bạn chạy và quản lý ứng dụng Python của mình một cách có thể quản lý và kiểm soát được thông qua quy trình Supervisord.

Tạo một tệp Python mới 'uwsgi.py' trong cùng thư mục của ứng dụng Flask của bạn. Trong ví dụ này, thư mục phải là '/var/www/myflask'.
Mã:
nano wsgi.py
Thêm tập lệnh Python sau vào tệp.
Mã:
# import myflask Flask application
from myflask import app

if __name__ == "__main__":
 app.run(debug=True)
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 chạy lệnh gunicorn sau để khởi động ứng dụng Flask và xác minh cấu hình của Gunicorn. Ứng dụng hiện đang chạy dưới Gunicron với cổng 8000.
Mã:
gunicorn -w 4 --bind 0.0.0.0:8000 wsgi:app
Dưới đây là đầu ra của lệnh gunicorn.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22254%22%3E%3C/svg%3E


Tiếp theo, mở trình duyệt web của bạn và truy cập địa chỉ IP của máy chủ theo sau là cổng 8000 (ví dụ: http://192.168.5.100:8000/). Bạn sẽ thấy trang index.html của ứng dụng Flask.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22677%22%20height=%22144%22%3E%3C/svg%3E


Lúc này, ứng dụng Flask của bạn đang chạy với Gunicorn mà không có bất kỳ lỗi nào. Bây giờ bạn có thể quay lại terminal và nhấn 'Ctrl+c' để chấm dứt tiến trình gunicorn và bắt đầu cấu hình trình quản lý tiến trình Supervisord.

Tạo cấu hình tệp Supervisord INI mới cho ứng dụng Flask '/etc/supervisord.d/flaskapp.ini' thông qua lệnh nano sau. Cấu hình phải được lưu trữ trong thư mục '/etc/supervisord.d'.
Mã:
sudo nano /etc/supervisord.d/flaskapp.ini
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 ứng dụng, người dùng và nhóm, và đường dẫn nhật ký.

Với cấu hình này, ứng dụng Flask của bạn sẽ chạy dưới socket UNIX do Gunicorn tạo ra. Socket unix này cũng sẽ được sử dụng để tương tác với proxy ngược Nginx.
Mã:
[program:myflask] 
command=/bin/bash -c 'source /var/www/myflask/myenv/bin/activate; gunicorn -w 3 --bind unix:/var/www/myflask/ipc.sock wsgi:app'
directory=/var/www/myflask
user=alice
group=www-data
autostart=true 
autorestart=true 
stdout_logfile=/var/www/myflask/myflask.log 
stderr_logfile=/var/www/myflask/error.log
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 chạy lệnh systemctl sau đây để khởi động lại dịch vụ Supervisord và áp dụng các thay đổi mới. Sau đó, hãy xác minh trạng thái Supervisord và đảm bảo dịch vụ đang chạy.
Mã:
sudo systemctl restart supervisord
sudo systemctl status supervisord
Trong ảnh chụp màn hình bên dưới, bạn có thể thấy Supervisord đang chạy với cấu hình bổ sung mới cho ứng dụng Flask.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22298%22%3E%3C/svg%3E


Cuối cùng, bây giờ bạn có thể xác minh quy trình của Ứng dụng Flask thông qua lệnh supervisorctl bên dưới. Bạn sẽ thấy có một tiến trình có tên là myflask với trạng thái OK.
Mã:
sudo supervisorctl status

Thiết lập Nginx Reverse Proxy​

Trong bước này, bạn sẽ tìm hiểu cách thiết lập Nginx làm proxy ngược cho ứng dụng Flask đang chạy dưới trình quản lý tiến trình Supervisord. Bạn sẽ tạo một Khối máy chủ Nginx mới cho proxy ngược và sử dụng tên miền cục bộ cho ứng dụng Flask.

Tạo cấu hình khối máy chủ Nginx mới '/etc/nginx/conf.d/flaskapp.conf' bằng trình chỉnh sửa nano sau.
Mã:
sudo nano /etc/nginx/conf.d/flaskapp.conf
Thêm cấu hình sau vào tệp. Và hãy nhớ thay đổi tên miền www.myflask.local bằng tên miền phát triển cục bộ của bạn.
Mã:
server {
 listen 80;
 server_name www.myflask.local;

 location / {
 include uwsgi_params;
 proxy_pass http://unix:/var/www/myflask/ipc.sock;
 }
}
Lưu tệp và thoát khỏi trình chỉnh sửa khi bạn hoàn tất.

Tiếp theo, hãy xác minh cấu hình Nginx để đảm bảo bạn có cấu hình chính xác. Sau đó, khởi động lại dịch vụ Nginx để áp dụng các thay đổi mới.
Mã:
sudo nginx -t
sudo systemctl restart nginx
Lúc này, ứng dụng Flask của bạn hiện có thể truy cập thông qua proxy ngược Nginx chạy trên cổng HTTP mặc định.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22685%22%20height=%22206%22%3E%3C/svg%3E


Bây giờ trên máy cục bộ của bạn, hãy chỉnh sửa Tệp /etc/hosts sử dụ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.myflask.local" như bên dưới.
Mã:
192.168.5.28 www.myflask.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 của dự án Flask (tức là http://www.myflask.local) trên thanh địa chỉ. Và bạn sẽ nhận được trang chỉ mục của dự án Python Flask của mình.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22669%22%20height=%22141%22%3E%3C/svg%3E

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 chủ Rocky Linux. 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 Supervisord cho dự án Flask.
 
Back
Bên trên