Logo Zephyrnet

Triển khai mô hình Machine Learning bằng Flask trên AWS với Gunicorn và Nginx

Ngày:

Giới thiệu

Trong bài viết trước, Chúng ta đã cùng nhau tìm hiểu quá trình xây dựng một mô hình machine learning để phân tích cảm tính được gói gọn trong ứng dụng Flask. Ứng dụng Flask này sử dụng phân tích cảm xúc để phân loại các tweet là tích cực hay tiêu cực. Sẵn sàng triển khai, dự án hoàn chỉnh được kiểm soát phiên bản trên GitHub. Tiến xa hơn, bây giờ chúng ta sẽ hướng dẫn cách sử dụng Gunicorn và Nginx để triển khai ứng dụng Flask này trên máy chủ đám mây, đảm bảo mô hình machine learning có thể mở rộng và truy cập được trong môi trường sản xuất.

Bạn có thể theo dõi bài viết trước Làm cách nào để triển khai Mô hình học máy bằng Flask?

Tiếp tục từ nơi chúng ta đã dừng lại, chúng ta sẽ sử dụng Gunicorn và NGINX để triển khai ứng dụng Flask này trên máy chủ đám mây. Bài đăng này sẽ giải thích việc di chuyển ứng dụng Flask ban đầu được lưu trữ cục bộ để triển khai máy học lên đám mây.

Triển khai Mô hình học máy bằng Flask trên AWS với Gunicorn và Nginx

Mục lục

Các bước bao gồm

  • Thiết lập phiên bản AWS EC2: Khởi chạy phiên bản AWS EC2 với Ubuntu làm hệ điều hành. Định cấu hình các nhóm bảo mật để cho phép lưu lượng truy cập vào.
  • SSH vào Phiên bản EC2: Sử dụng SSH để kết nối với phiên bản EC2 từ macWeis cục bộ của bạn. Chúng tôi yêu cầu cặp khóa SSH (công khai và riêng tư) để kết nối với hệ thống cục bộ của bạn.
  • Triển khai ứng dụng Flask: Chuyển các tệp ứng dụng Flask sang phiên bản EC2. Nếu mô hình đã có trên Git Hub, hãy sao chép mô hình đó vào phiên bản Ubuntu EC2. Sau đó, Thiết lập môi trường ảo và cài đặt các gói Python cần thiết hoặc tệp yêu cầu trong thư mục bằng pip. Kiểm tra xem ứng dụng Flask có chạy chính xác trong môi trường EC2 hay không.
  • Cài đặt phụ thuộc: Cập nhật danh sách gói để nâng cấp và cài đặt các phần phụ thuộc cần thiết, chẳng hạn như Python, pip và bất kỳ thư viện nào khác mà ứng dụng Flask của bạn yêu cầu.
  • Cài đặt và cấu hình Gunicorn: Cài đặt Gunicorn, máy chủ HTTP WSGI cho các ứng dụng Python. Tạo tệp dịch vụ Gunicorn để quản lý quy trình ứng dụng. Bắt đầu và kích hoạt dịch vụ Gunicorn chạy ở chế độ nền.
  • Cài đặt và cấu hình NGINX: Cài đặt NGINX, máy chủ web hiệu suất cao và proxy ngược. Định cấu hình NGINX để chuyển tiếp các yêu cầu HTTP đến máy chủ Gunicorn. Thiết lập khối máy chủ (máy chủ ảo) cho ứng dụng Flask của bạn.
  • Định cấu hình tên miền (Tùy chọn): Nếu bạn có tên miền, hãy định cấu hình cài đặt DNS để trỏ đến địa chỉ IP công cộng của phiên bản EC2. Nếu không, bạn có thể truy cập ứng dụng Flask của mình trực tiếp từ địa chỉ IP công cộng.
  • Bảo mật ứng dụng: Kích hoạt HTTPS để liên lạc an toàn giữa máy khách và máy chủ. Nhận chứng chỉ SSL/TLS (ví dụ: Let's Encrypt) và định cấu hình NGINX để sử dụng nó.
  • Kiểm tra việc triển khai: Sau khi mọi thứ đã được thiết lập, hãy kiểm tra ứng dụng Flask đã triển khai của bạn bằng cách truy cập ứng dụng đó thông qua trình duyệt web hoặc gửi yêu cầu bằng cURL hoặc Postman.

Làm theo các bước này, chúng tôi sẽ triển khai thành công ứng dụng Flask cho machine learning trên phiên bản AWS EC2, sử dụng Gunicorn làm máy chủ WSGI và NGINX làm máy chủ proxy ngược để xử lý các yêu cầu đến một cách hiệu quả và an toàn.

Trước khi bắt tay vào thực hiện, chúng ta hãy hiểu nó được thực hiện như thế nào.

Hiểu về giao tiếp: Flask, Gunicorn và Nginx

             +-----------------------------+
             |           Client            |
             +-----------------------------+
                          |
                          |
             +------------v-------------+
             |        NGINX (Port 80)   |
             +------------+-------------+
                          |
                          |
             +------------v-------------+
             |       Gunicorn           |
             |     (WSGI Server)        |
             +------------+-------------+
                          |
                          |
             +------------v-------------+
             |   Flask Application      |
             |       (Python)           |
             +--------------------------+

Bình: Trung tâm của ứng dụng

Flask là một khung web Python nhẹ và linh hoạt, cung cấp các công cụ để xây dựng các ứng dụng/dịch vụ web. Nó là nền tảng của dịch vụ phân tích cảm tính của bạn, xử lý các yêu cầu web đến, xử lý chúng bằng mô hình học máy của bạn và trả về kết quả phân tích. Flask hoạt động như lớp ứng dụng trong ngăn xếp của chúng tôi.

Chúng ta đã tạo ứng dụng Flask ở bài viết trước. Và sao chép nó bằng lệnh.

https://github.com/Geek-shikha/Flask_model_sentiment_analysis.git

Riêng Flask không thể xử lý nhiều yêu cầu cùng một lúc; đó là lúc Gunicorn phát huy tác dụng.

Gunicorn: Máy chủ HTTP WSGI Python

Gunicorn hoạt động như một lớp trung gian giao tiếp với Flask. Đó là máy chủ HTTP WSGI Python được thiết kế cho các hệ thống UNIX, cung cấp một cách đơn giản nhưng hiệu quả để triển khai các ứng dụng web Python. Khi bạn chạy ứng dụng Flask bằng Gunicorn, nó sẽ tạo một máy chủ WSGI giao tiếp với ứng dụng Flask. Gunicorn quản lý nhiều quy trình công nhân để xử lý các yêu cầu đến, phân phối tải và tăng khả năng xử lý người dùng đồng thời. Không. Số lượng công nhân và luồng phụ thuộc vào số lượng lõi của hệ thống, 2*Lõi +1.

Cho đến khi bạn có đa luồng, không có không gian bộ nhớ riêng. Một nhân viên có thể xử lý song song nhiều Yêu cầu từ khách hàng.

Tại sao cần có Gunicorn?

Vì nhiều lý do khác nhau, Gunicorn hay Green Unicorn là một thành phần quan trọng trong việc lưu trữ các ứng dụng Flask. Thứ nhất, máy chủ phát triển tích hợp của Flask không thể xử lý nhiều yêu cầu cùng lúc, khiến nó không phù hợp với môi trường sản xuất. Mô hình công nhân tiền phân nhánh của nó cho phép khả năng mở rộng bằng cách chạy nhiều quy trình hoặc luồng công nhân, giúp tăng lưu lượng truy cập một cách hiệu quả. Cân bằng tải của G Unicorn phân phối các yêu cầu một cách đồng đều, nâng cao hiệu suất khi tải nặng. Tuân thủ đặc tả WSGI, Gunicorn tích hợp liền mạch với Flask và các khung tuân thủ WSGI khác, đơn giản hóa việc triển khai. Gunicorn cung cấp các tính năng thiết yếu như tính đồng thời, khả năng mở rộng, hiệu suất và khả năng tương thích, khiến nó không thể thiếu trong việc triển khai các ứng dụng Flask trong sản xuất.

Nginx: Proxy ngược tuyến đầu

Nginx là một máy chủ web mạnh mẽ, hiệu suất cao được biết đến với tính ổn định, cấu hình đơn giản và mức tiêu thụ tài nguyên thấp. Trong quá trình triển khai của chúng tôi, Nginx được định cấu hình làm proxy ngược, nằm trước Gunicorn. Nó nhận các yêu cầu của khách hàng và chuyển tiếp chúng đến Gunicorn, sau đó Gunicorn sẽ giao tiếp với ứng dụng Flask. Nginx cũng chịu trách nhiệm cung cấp các tệp tĩnh, xử lý mã hóa SSL/TLS và có khả năng cân bằng tải nếu ứng dụng của bạn mở rộng sang nhiều máy chủ.

Tại sao lại là Nginx?

Ngoài việc cung cấp Hơn nữa, NGINX còn vượt trội trong việc xử lý đồng thời nhiều mô hình hoặc ứng dụng, nhờ khả năng cân bằng tải mạnh mẽ và cơ chế đệm. Trong khi Gunicorn có thể gặp khó khăn với tốc độ xử lý nhiều yêu cầu, NGINX có thể xử lý khối lượng công việc này một cách hiệu quả bằng cách đệm các yêu cầu, đảm bảo hoạt động mượt mà hơn. Ngoài ra, NGINX còn cung cấp các tính năng cần thiết như chấm dứt SSL, xác thực mã thông báo và cân bằng tải, khiến nó không thể thiếu để bảo mật và tối ưu hóa các ứng dụng Flask. Để có khả năng mở rộng và linh hoạt hơn nữa, Docker hoặc Kubernetes có thể được tích hợp cùng với NGINX, cho phép mở rộng quy mô linh hoạt và quản lý dịch vụ đơn giản hóa. Dù được triển khai trên AWS hay Kubernetes, NGINX vẫn là một công cụ linh hoạt và mạnh mẽ để lưu trữ các ứng dụng Flask trên quy mô lớn.

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

Trước khi sử dụng các bước để triển khai mô hình của mình, bạn nên hiểu và có những điều sau.

Tài khoản AWS: Bạn cần có tài khoản AWS để truy cập EC2 và các dịch vụ AWS khác. Nếu chưa có tài khoản, bạn có thể đăng ký một tài khoản trên trang web AWS.

Nếu bạn muốn ứng dụng của mình xuất hiện cùng với một tên, bạn phải định cấu hình tên miền để trỏ đến máy chủ của mình. Bạn có thể nhận được một cái miễn phí trên Màu xanh. Chúng tôi không cần điều này ở đây vì chúng tôi sẽ sử dụng trực tiếp địa chỉ IP công cộng.

Hiểu biết về đặc tả tệp WSGI và máy chủ, proxy và cổng. Một chút hiểu biết cũng sẽ có ích.

Triển khai mô hình Machine Learning bằng Flask trên AWS với Gunicorn và Nginx

BƯỚC 1: Thiết lập Phiên bản AWS EC2

Khởi chạy phiên bản AWS EC2 với Ubuntu làm hệ điều hành. Một dịch vụ vi mô sẽ hoạt động tốt. Chúng tôi vẫn giữ tên phiên bản là Sensitive_analysis_server. Bạn được tự do lựa chọn những gì bạn thích. Nhưng hãy nhớ rằng việc lựa chọn dịch vụ của phiên bản phụ thuộc vào quy mô của ứng dụng mà bạn đang cố gắng lưu trữ.

Thiết lập phiên bản AWS EC2

Tạo một cặp khóa để kết nối an toàn với EC2 của bạn thông qua SSH. Khi tạo một phiên bản EC2, bạn chỉ định một cặp khóa và tệp khóa riêng tương ứng (.pem) được dùng để xác thực kết nối SSH của bạn với phiên bản. Sử dụng cặp khóa loại RSA và làm theo các bước dưới đây.

  1. Tạo cặp khóa: Nhấp vào nút “Tạo cặp khóa” để tạo cặp khóa.
  2. Tải xuống Khóa riêng: Sau khi cặp khóa được tạo, tệp khóa riêng (.pem) sẽ tự động được tải xuống máy cục bộ của bạn. Tệp khóa riêng tư này xác thực các kết nối SSH tới phiên bản EC2 của bạn.
Thiết lập phiên bản AWS EC2

Khởi chạy phiên bản của bạn với các cấu hình bảo mật cho phép lưu lượng cổng và http. Sau khi khởi chạy và kết nối với phiên bản của bạn, hãy sao chép lệnh SSH từ phiên bản đó để bạn có thể đăng lệnh lên thiết bị đầu cuối cục bộ của mình nhằm truy cập phiên bản từ xa. Trong hình ảnh sau đây, phần được đánh dấu màu xanh lục là phần bạn cần sao chép và dán vào thiết bị đầu cuối/thiết bị cục bộ của mình.

Kết nối với phiên bản

BƯỚC 2: SSH vào Phiên bản EC2

Mở thiết bị đầu cuối của máy tính của bạn. Nếu tệp khóa riêng tư (.pem) của bạn nằm trong một thư mục, bạn sẽ cần chỉ định đường dẫn đầy đủ đến tệp khóa khi sử dụng lệnh SSH để kết nối với phiên bản EC2 của mình. Đây là cách bạn có thể làm điều đó:

Giả sử khóa của bạn (tệp .pem) nằm trong Tải xuống. Sau đó, bạn cần đặt lệnh SSH của mình ở đó. Vì vậy, tất cả những gì bạn cần làm là mở terminal, điều hướng đến thư mục Tải xuống và dán lệnh của bạn vào đó.

cd ~/Downloads

Bây giờ Dán lệnh SSH của bạn, có thể trông giống như ví dụ: ssh -i “sentiment_analysiskey.pem” [email được bảo vệ]

SSH vào phiên bản EC2

BƯỚC 3: Cài đặt các Thành phần cần thiết 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. Điều này bao gồm các thành phần Python mà Pip sẽ quản lý và trình quản lý gói Python. Các tệp phát triển Python cần thiết để lắp ráp các thành phần Gunicorn cũng sẽ được cung cấp. Khi cài đặt các gói cho phép bạn tạo môi trường Python, trước tiên bạn phải cập nhật chỉ mục gói cục bộ.

sudo apt update 
sudp apt upgrade 

Sau đó, cài đặt lệnh Python-pip để cài đặt pip và môi trường ảo.

sudo apt install python3-pip
sudo apt install python3-venv

Sau đó cài đặt gói net stat. Gói công cụ mạng hiển thị thông tin liên quan đến mạng, chẳng hạn như kết nối mạng đang hoạt động, bảng định tuyến, thống kê giao diện, v.v.

sudo apt cài đặt net-tools

sudo apt install net-tools

netstat tuln #after installing run this command 

Nó hiển thị danh sách các kết nối mạng đang hoạt động và các cổng nghe trên hệ thống:

Sau đó cài đặt gói tường lửa: gói ufw (Tường lửa không phức tạp) là gói ngoại vi để quản lý các quy tắc tường lửa iptables trên Ubuntu và các bản phân phối Linux dựa trên Debian khác. Nó cung cấp một giao diện đơn giản để định cấu hình các quy tắc tường lửa, giúp thiết lập bảo vệ tường lửa cần thiết cho hệ thống của bạn dễ dàng hơn

  • sudo ufw kích hoạt: Kích hoạt tường lửa.
  • Sudo ufw cho phép /: Lệnh này cho phép các kết nối đến trên một cổng và giao thức cụ thể (ví dụ: sudo ufw cho phép 22/TCP kích hoạt kết nối SSH).
  • Trạng thái Sudo ufw: Hiển thị trạng thái hiện tại và các quy tắc của tường lửa.
sudo apt install ufw #
sudo ufw allow 22 #ssh access
sudo ufw allow 5000  #5000 port for flask app test 

sudo ufw status 
  1. Sudo ufw cho phép 5000: Điều này cho phép các kết nối đến trên cổng 5000. Theo mặc định, nó cho phép cả lưu lượng TCP và UDP trên cổng này. Chúng tôi sẽ chạy ứng dụng Flask trên 5000, vì vậy dịch vụ ứng dụng Flask chạy trên cổng 5000 cần có thể truy cập được từ mạng.
  2. Sudo ufw cho phép 22: Lệnh này cho phép các kết nối SSH đến trên cổng 22. SSH được sử dụng để truy cập từ xa vào hệ thống của bạn và việc cho phép kết nối trên cổng 22 cho phép bạn kết nối với máy chủ của mình thông qua SSH một cách an toàn. Cái này quan trọng; bạn không nên tắt tính năng này vì bạn sẽ không thể truy cập SSH của mình từ xa.

Bước 4: Triển khai ứng dụng Flask và thiết lập ứng dụng

Triển khai ứng dụng Flask: Chuyển các tệp ứng dụng Flask sang phiên bản EC2. Nếu mô hình đã có trên Git Hub, hãy sao chép mô hình đó vào phiên bản Ubuntu EC2. Sau đó, Thiết lập môi trường ảo mới và cài đặt các gói Python cần thiết hoặc tệp yêu cầu trong thư mục bằng pip. Sau đó, ứng dụng Test Flask sẽ chạy chính xác trong môi trường EC2.

Trong trường hợp của chúng tôi, chúng tôi đang sao chép một kho lưu trữ git mà chúng tôi đã sử dụng trong bài viết trước để phân tích cảm xúc của một tweet.

Nhưng trước tiên, hãy đảm bảo git đã được cài đặt. Nếu nó đã được cài đặt, hãy chạy lệnh: git clone -b master –single-branch https://github.com/Geek-shikha/Flask_model_sentiment_analysis.git

git --version # if this exists you need not to sudo apt install git 
git clone -b master --single-branch 
https://github.com/Geek-shikha/Flask_model_sentiment_analysis.git #same line 

#after cloning the repository go tot the directory and list all the files 
cd Flask_model_sentiment_analysis
ls 

Lưu ý: Khi sao chép kho lưu trữ, bạn sẽ không thấy bất kỳ tệp app.py nào; thay vào đó, myproject.py hiện diện mà chúng tôi yêu cầu.

Có một môi trường ảo hiện có mà chúng tôi đã tạo trước đây khi tạo ứng dụng Flask cục bộ. Chúng ta cần tạo một môi trường ảo mới để tránh lỗi hoặc sai lệch. Môi trường ảo mới có tên là “myprojectenv” và phải được kích hoạt.

python -m venv myprojectenv #virtual env named as myprojectenv
source myprojectenv/bin/activate #activate the virtual environment

Cài đặt thư viện Python được lưu trữ trong require.txt

pip install -r requirements.txt #install the dependencies like flask, nltk etc.

Bây giờ hãy kiểm tra và chạy ứng dụng Python Flask của bạn

python3 myproject.py

Bằng cách chạy cái này, bạn có thể thấy đầu ra trong terminal như thế này:

Để xem nó có hoạt động không. Truy cập địa chỉ IP máy chủ của bạn theo sau:5000 trong trình duyệt web của bạn. Trên trình duyệt web của bạn, IP máy chủ của bạn là 5000, như http://server_pub_ip:5000. Giả sử IP máy chủ là  23.124.09.133. Sau đó đặt http://23.124.09.133:5000 

Bước 5: Tệp WSGI

Tiếp theo, tạo một tệp sẽ đóng vai trò là điểm vào cho ứng dụng của bạn. Tệp này sẽ hướng dẫn máy chủ Gunicorn tương tác với ứng dụng.

tạo tệp wsgi.py trong thư mục Flask_model_sentiment_analysis

nano ~/Flask_model_sentiment_analysis/wsgi.py 

Trong tệp này, hãy nhập phiên bản Flask từ ứng dụng của chúng tôi mà chúng tôi đặt tên là myproject.py, rồi chạy nó:

from myproject import app

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

Bạn cũng có thể cài đặt sudo apt và Unicorn nếu có lỗi.

Bước 6: Cấu hình Gunicorn

Hãy bắt đầu bằng cách định cấu hình Gunicorn và liên kết ứng dụng wsgi với cổng 5000

Lệnh cấu hình kỳ lân khởi động máy chủ Gunicorn lắng nghe các kết nối đến trên cổng 5000 từ bất kỳ địa chỉ IP nào và phục vụ ứng dụng có tên WSGI được xác định trong tệp wsgi.py.

gunicorn --bind 0.0.0.0:5000 wsgi:app

Đầu ra:

Kiểm tra xem nó có hoạt động không. Truy cập địa chỉ IP máy chủ của bạn, theo sau là:5000trong trình duyệt web của bạn: Trên trình duyệt web, IP máy chủ của bạn là 5000, như http://server_pub_ip:5000; giả sử IP máy chủ là  23.124.09.133. Sau đó đặt http://23.124.09.133:5000 

Nó sẽ cung cấp cho bạn một đầu ra như thế này:

Nếu bạn nhận được phản hồi chính xác, hãy dừng dịch vụ; bạn có thể nhấn ctrl+c rồi tắt môi trường ảo của mình bằng cách ra lệnh. Sau đó, Tạo tệp đơn vị hệ thống và dịch vụ. Hành động này sẽ cho phép hệ thống init của Ubuntu tự động khởi chạy Gunicorn và lưu trữ ứng dụng Flask khi khởi động máy chủ.

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

Thêm nội dung sau:

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

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/Flask_model_sentiment_analysis
Environment="PATH=/ubuntu/Flask_model_sentiment_analysis/myprojectenv/bin"
ExecStart=/home/ubuntu/Flask_model_sentiment_analysis/myprojectenv/bin/gunicorn 
--workers 3 --bind unix:myproject.sock -m 007 w>
[Install]
WantedBy=multi-user.target
  • [Đơn vị]: Phần này chỉ định siêu dữ liệu và các phần phụ thuộc cho đơn vị.
  • Sự miêu tả: Mô tả dịch vụ.
  • Sau = mạng.target: Nó cho biết thiết bị này khởi động sau khi mạng kết nối, đảm bảo kết nối mạng trước khi dịch vụ bắt đầu.
  • [Dịch vụ]: Phần này xác định các tham số cho dịch vụ.
  • Người dùng=ubuunit: Nó chỉ định tài khoản người dùng mà dịch vụ sẽ chạy.
  • Nhóm=dữ liệu www: Đặt nhóm cho dịch vụ.
  • Thư mục làm việc: Chỉ định thư mục làm việc cho dịch vụ.
  • Môi trường=”PATH=/ubuntu/Flask_model_sentiment_analysis/myprojectenv/bin”: Biến này xác định các biến môi trường của dịch vụ, đặt rõ ràng biến PATH để bao gồm thư mục nhị phân của môi trường ảo.
  • Thực thiBắt đầu: Chỉ định lệnh để bắt đầu dịch vụ. Trong trường hợp này, nó khởi động Gunicorn với các tùy chọn cụ thể:
  • –công nhân 3: Định cấu hình Gunicorn để sử dụng ba quy trình công nhân.
  • –bind unix: dự án của tôi.sock: Chỉ định tệp ổ cắm mà qua đó Gunicorn sẽ giao tiếp với máy chủ web (ví dụ: Nginx hoặc Apache).
  • -m 007: Đặt mặt nạ thành 007, kiểm soát quyền của các tệp do Gunicorn tạo.
  • wsgi:ứng dụng: Cho biết vị trí của ứng dụng WSGI sẽ phục vụ.
  • [Cài đặt]: Phần này xác định thông tin cài đặt cho thiết bị.
  • WantedBy=multi-user.target: Chỉ định mục tiêu mà thiết bị này sẽ được cài đặt. Trong trường hợp này, nó được đặt thành nhiều người dùng. Target, mục tiêu tiêu chuẩn cho hệ thống người dùng, chỉ ra rằng dịch vụ sẽ tự động khởi động trong quá trình khởi động hệ thống.

Tóm lại, tệp đơn vị hệ thống này thiết lập Gunicorn để phục vụ ứng dụng Flask với các cấu hình cụ thể và đảm bảo rằng dịch vụ sẽ tự động khởi động khi khởi động hệ thống.

Đã đến lúc khởi động dịch vụ Gunicorn mà bạn đã tạo và kích hoạt nó để nó khởi động khi khởi động:

sudo systemctl start myproject
sudo systemctl enable myproject
sudo systemctl status myproject#check the status of your service file for errors, ifany

 Nếu lệnh chống lại, thì hãy sử dụng lệnh này để tải lại “sudo systemctl daemon-reload,”

Nếu bạn đã làm theo từng bước thì sẽ không có lỗi; tuy nhiên, nếu lỗi vẫn tiếp diễn, hãy giải quyết lỗi. Có thể có lỗi trong đường dẫn hoặc môi trường trong tệp dịch vụ. Kiểm tra cẩn thận

Bước 7: Cài đặt và cấu hình NGINX

Máy chủ ứng dụng Gunicorn đang hoạt động và đang chờ yêu cầu thông qua tệp ổ cắm trong thư mục dự án. Bây giờ, chúng ta sẽ định cấu hình Nginx để hướng các yêu cầu web đến ổ cắm này bằng cách thực hiện các sửa đổi nhỏ đối với tệp cấu hình của nó. Để làm được điều này, trước tiên chúng ta cần cài đặt nginx

sudo apt install nginx

Bắt đầu bằng cách tạo tệp cấu hình khối máy chủ mới trong thư mục có sẵn trên trang web của Nginx. Đặt tên tập tin này là “dự án” để không bị nhầm lẫn. Trước đây chúng tôi đã sử dụng tên myproject.py

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

để thêm nội dung vào tệp có cấu hình khối máy chủ Nginx, đảm bảo rằng các yêu cầu HTTP đến địa chỉ IP máy chủ được chỉ định sẽ được chuyển tiếp đến máy chủ ứng dụng Gunicorn thông qua tệp ổ cắm Unix, cho phép ứng dụng Flask xử lý các yêu cầu. Lưu tệp và thoát khỏi trình chỉnh sửa.

server {
    listen 80;
    server_name 3.110.196.110; #your server public ip 

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/Flask_model_sentiment_analysis/myproject.sock;
    }
}
  • Máy chủ { … }: Khối này xác định cấu hình máy chủ trong Nginx. Nó gói gọn các cài đặt cấu hình để xử lý các yêu cầu cho một máy chủ cụ thể.
  • Nghe 80: Lệnh này chỉ định rằng Nginx sẽ lắng nghe các yêu cầu HTTP đến trên cổng 80, cổng mặc định cho lưu lượng HTTP.
  • tên máy chủ 3.110.196.110: Lệnh này đặt tên máy chủ hoặc địa chỉ IP của máy chủ. Trong trường hợp này, nó được đặt thành 3.110.196.110, địa chỉ này sẽ được thay thế bằng địa chỉ IP công cộng của máy chủ của bạn.
  • Vị trí / { … }: Khối này xác định cách Nginx xử lý các yêu cầu đối với thư mục gốc/của máy chủ.
  • Bao gồm proxy_params: Lệnh này cung cấp cài đặt cấu hình từ tệp proxy_params. Các cài đặt này thường chứa các cấu hình liên quan đến proxy, chẳng hạn như tiêu đề proxy.
  • proxy_pass http://unix:/home/ubuntu/Flask_model_sentiment_analysis/myproject.sock: Lệnh này chỉ định rằng Nginx sẽ chuyển tiếp các yêu cầu đến tới tệp ổ cắm Unix được chỉ định tại /home/ubuntu/Flask_model_sentiment_analysis/myproject.sock. Đây là nơi Gunicorn lắng nghe yêu cầu. Nginx sẽ hoạt động như một proxy ngược, chuyển yêu cầu tới Gunicorn và trả lại phản hồi cho khách hàng.

Bây giờ kích hoạt và kiểm tra lỗi

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
  • sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled: Lệnh này tạo một liên kết tượng trưng có tên myproject trong thư mục kích hoạt trang web, trỏ đến tệp cấu hình nằm trong thư mục trang web có sẵn. Bằng cách này, bạn kích hoạt cấu hình khối máy chủ cho dự án của mình.
  • Sudo nginx -t: Lệnh này kiểm tra cấu hình Nginx để tìm lỗi cú pháp. Nó kiểm tra xem các tệp cấu hình Nginx, bao gồm khối máy chủ myproject mới được kích hoạt, có được ghi chính xác và hợp lệ hay không. Nếu có bất kỳ lỗi nào, chúng sẽ được báo cáo trong quá trình kiểm tra này.

Khởi động lại nginx khi chúng tôi đã cập nhật cấu hình

sudo systemctl restart nginx

cập nhật tường lửa cho nginx

sudo ufw allow 'Nginx Full'

Vì không cần cổng 5000 nên chúng ta có thể vô hiệu hóa nó bằng lệnh “sudo ufw delete allow 5000,” nhưng chúng ta không cần tắt cổng 22.

Bây giờ hãy điều hướng đến tên miền (hoặc địa chỉ IP) của máy chủ trong trình duyệt web của bạn và bạn sẽ thấy kết quả:

Nếu bạn thấy bất kỳ lỗi nào như cổng 502, bạn cần thay đổi một số quyền. Sử dụng lệnh

sudo chmod 755 /home/ubuntu

Ngoài ra, khi kiểm tra ứng dụng trên máy chủ của mình, bạn nên sử dụng http://….. chứ không phải https vì ứng dụng không được bảo mật.

Nếu có lỗi, bạn có thể kiểm tra chúng thông qua các lệnh như:

Bước 7: Cài đặt và cấu hình NGINX

Nếu bạn muốn dừng dịch vụ, bạn có thể sử dụng lệnh

sudo systemctl stop nginx #stop the service 
sudo systemctl start nginx# to start the service 

Các bước tiếp theo để bảo mật ứng dụng

Có các bước tiếp theo để bảo mật ứng dụng.  

Kích hoạt HTTPS để liên lạc an toàn giữa máy khách và máy chủ. Nhận chứng chỉ SSL/TLS (ví dụ: Let's Encrypt) và định cấu hình NGINX để sử dụng nó. Chúng ta có thể sử dụng Certbot để bảo mật ứng dụng.

Để bảo mật máy chủ web của bạn bằng SSL/TLS bằng Certbot, bạn thường cần một tên miền đã đăng ký. Certbot yêu cầu tên miền cấp chứng chỉ SSL vì nó xác minh quyền sở hữu tên miền trước khi cấp chứng chỉ. Mặc dù về mặt kỹ thuật, bạn có thể sử dụng địa chỉ IP công cộng thay vì tên miền nhưng việc này không được khuyến khích vì một số lý do. Một là Yêu cầu của Tổ chức phát hành chứng chỉ (CA): Tổ chức phát hành chứng chỉ (CA) như Let's Encrypt (mà Certbot sử dụng) có sẵn các chính sách yêu cầu xác thực tên miền. Họ sẽ không cấp chứng chỉ SSL cho địa chỉ IP.

Nếu muốn bảo mật nó, bạn có thể sử dụng sudo apt install python3-certbot-nginx và tìm hiểu thêm về nó trong tài liệu của nó.

Kết luận

Trong bài viết này, chúng tôi đã tạo một ứng dụng Flask cơ bản trong môi trường ảo Python. Chúng tôi đã tạo điểm vào WSGI, cho phép khả năng tương thích với mọi máy chủ ứng dụng có hỗ trợ WSGI và sau đó định cấu hình Gunicorn để thực hiện vai trò này. Sau đó, chúng tôi đã tạo một tệp dịch vụ hệ thống để tự động khởi động máy chủ ứng dụng khi khởi động hệ thống. Ngoài ra, bạn đã xây dựng khối máy chủ Nginx chịu trách nhiệm hướng lưu lượng truy cập máy khách web đến máy chủ ứng dụng, chuyển tiếp hiệu quả các yêu cầu bên ngoài và bảo vệ lưu lượng máy chủ bằng mã hóa Let's Encrypt.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img