Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

Cách cung cấp các ứng dụng Flask với uWSGI và Nginx trên Ubuntu 20.04

Ngày đăng: 24 tháng 2 năm 2023

Ubuntu

Giới thiệu

Trong hướng dẫn này, bạn sẽ xây dựng một ứng dụng Python sử dụng Flask microframework trên Ubuntu 20.04. Phần lớn bài viết này sẽ nói về cách thiết lập máy chủ ứng dụng uWSGI và cách khởi chạy ứng dụng cũng như thiết lập cấu hình Nginx để hoạt động như một proxy ngược giao diện người dùng.

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

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 20.04 và một non-root user có đặc quyền sudo. Làm theo hướng dẫn thiết lập máy chủ ban đầu của chúng tôi để được hướng dẫn.
  • Nginx đã được cài đặt, làm theo Bước 1 đến Bước 3 của Cách cài đặt Nginx trên Ubuntu 20.04.
  • Một tên miền được thiết lập cấu hình để trỏ đến máy chủ của bạn. Hướng dẫn này giả định rằng bạn đã tạo các bản ghi DNS sau:
  1. Một bản ghi A với your_domain trỏ đến địa chỉ IP công cộng của máy chủ của bạn.
  2. Một bản ghi A với www.your_domain trỏ đến địa chỉ IP công cộng của máy chủ của bạn.

Ngoài ra, có thể hữu ích nếu bạn đã quen thuộc với uWSGI, máy chủ ứng dụng mà bạn sẽ thiết lập trong hướng dẫn này và đặc tả WSGI.

Bước 1 - Cài đặt các Component từ Ubuntu Repositories

Bước đầu tiên của bạn là cài đặt tất cả các phần bạn cần từ kho Ubuntu. Các gói bạn cần cài đặt bao gồm pip, trình quản lý gói Python, để quản lý các thành phần Python của bạn. Bạn cũng sẽ nhận được các tệp phát triển Python cần thiết để xây dựng uWSGI.

Đầu tiên, cập nhật chỉ mục gói cục bộ:

  1. sudo apt update

Sau đó cài đặt các gói cho phép bạn xây dựng môi trường Python của mình. Chúng sẽ bao gồm python3-pip, cùng với một vài gói và công cụ phát triển cần thiết cho môi trường lập trình mạnh mẽ:

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

Với các gói này, bạn đã sẵn sàng chuyển sang tạo môi trường ảo cho dự án của mình.

Bước 2 - Tạo môi trường ảo Python

Môi trường ảo Python là một thư mục dự án độc lập chứa các phiên bản cụ thể của Python và các mô-đun Python cần thiết cho dự án nhất định. Điều này rất hữu ích để cách ly một ứng dụng khỏi các ứng dụng khác trên cùng một hệ thống bằng cách quản lý riêng các phần phụ thuộc của từng ứng dụng. Trong bước này, bạn sẽ thiết lập một môi trường ảo Python mà từ đó bạn sẽ chạy ứng dụng Flask của mình.

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

  1. sudo apt install python3-venv

Tiếp theo, tạo một thư mục mẹ cho dự án Flask của bạn:

  1. mkdir ~/myproject

Di chuyển vào thư mục sau khi bạn tạo nó:

  1. cd ~/myproject

Tạo một môi trường ảo để lưu trữ các yêu cầu Python của dự án Flask của bạn bằng cách nhập:

  1. python3.8 -m venv myprojectenv

Điều này sẽ cài đặt một bản sao cục bộ của Python và pip vào một thư mục có tên myprojectenv trong thư mục dự án của bạn.

Trước khi cài đặt các ứng dụng trong môi trường ảo, bạn cần kích hoạt nó. Làm như vậy bằng cách gõ:

  1. source myprojectenv/bin/activate

Lời nhắc của bạn sẽ thay đổi để cho biết rằng bạn hiện đang hoạt động trong môi trường ảo. Nó sẽ giống như thế này: (myprojectenv)user@host:~/myproject$.

Bước 3 - Thiết lập ứng dụng Flask

Bây giờ bạn đang ở trong môi trường ảo của mình, bạn có thể cài đặt Flask và uWSGI rồi bắt đầu thiết kế ứng dụng của mình.

Trước tiên, hãy cài đặt wheel với phiên bản cục bộ của pip để đảm bảo rằng các gói của bạn sẽ cài đặt ngay cả khi chúng thiếu kho lưu trữ wheel:

  1. pip install wheel

Lưu ý: Bất kể bạn đang sử dụng phiên bản Python nào, khi môi trường ảo được kích hoạt, bạn nên sử dụng lệnh pip (không phải pip3).

Tiếp theo, cài đặt Flask và uWSGI:

  1. pip install uwsgi flask

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

Bây giờ bạn đã có sẵn Flask, bạn có thể tạo một ứng dụng mẫu. Flask là một microframework. Nó không bao gồm nhiều công cụ mà các framework đầy đủ tính năng hơn có thể có, và chủ yếu tồn tại dưới dạng mô-đun mà bạn có thể nhập vào dự án của mình để hỗ trợ bạn khởi tạo ứng dụng web.

Mặc dù ứng dụng của bạn có thể phức tạp hơn nhưng trong ví dụ này, bạn sẽ tạo ứng dụng Flask của mình trong một tệp duy nhất, được gọi là myproject.py:

  1. nano ~/myproject/myproject.py

Mã ứng dụng sẽ nằm trong tệp này. Nó sẽ nhập Flask và khởi tạo một đối tượng Flask. Bạn có thể sử dụng điều này để xác định các chức năng mà bạn muốn chạy khi một tuyến đường cụ thể được yêu cầu:

~/myproject/myproject.py
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')

Về cơ bản, điều này xác định nội dung nào sẽ hiển thị cho bất kỳ ai truy cập miền gốc. Lưu và đóng tệp khi bạn hoàn tất. Nếu bạn đã sử dụng nano để chỉnh sửa tệp, như trong ví dụ trước, hãy làm như vậy bằng cách nhấn CTRL + X, Y, rồi ENTER.

Nếu bạn làm theo hướng dẫn thiết lập máy chủ ban đầu, bạn nên bật tường lửa UFW. Để kiểm tra ứng dụng, bạn cần cho phép truy cập vào cổng 5000:

  1. sudo ufw allow 5000

Bây giờ, bạn có thể kiểm tra ứng dụng Flask của mình bằng cách nhập:

  1. python myproject.py

Bạn sẽ thấy đầu ra như sau, bao gồm một cảnh báo hữu ích nhắc nhở bạn không sử dụng thiết lập máy chủ này trong sản xuất:

Output
* 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 địa chỉ IP của máy chủ của bạn theo sau :5000 trong trình duyệt web của bạn:

http://your_server_ip:5000

Bạn sẽ thấy một cái gì đó như thế này:

description image

Khi bạn hoàn tất, hãy nhấn CTRL + C trong cửa sổ đầu cuối của bạn để dừng máy chủ phát triển Flask.

Tạo WSGI Entry Point

Tiếp theo, tạo một tệp sẽ đóng vai trò là entry point (điểm vào) cho ứng dụng của bạn. Điều này sẽ cho máy chủ uWSGI của bạn biết cách tương tác với nó.

Gọi tệp wsgi.py:

  1. nano ~/myproject/wsgi.py

Trong tệp này, hãy nhập phiên bản Flask từ ứng dụng của bạn rồi chạy nó:

~/myproject/wsgi.py
from myproject import app

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

Lưu và đóng tệp khi bạn hoàn tất.

Bước 4 - Thiết lập cấu hình uWSGI

Ứng dụng của bạn hiện đã được viết với một entry point đã được thiết lập. Bạn có thể chuyển sang cấu hình uWSGI.

Kiểm tra xem uWSGI có thể phục vụ ứng dụng hay không

Bước đầu tiên, hãy kiểm tra để đảm bảo rằng uWSGI có thể phục vụ ứng dụng của bạn một cách chính xác bằng cách chuyển tên entry point của bạn cho ứng dụng đó. Điều này được xây dựng theo tên của mô-đun (trừ phần mở rộng .py) cộng với tên có thể gọi được trong ứng dụng. Trong ngữ cảnh của hướng dẫn này, tên của entry point là wsgi:app.

Ngoài ra, hãy chỉ định ổ cắm để nó sẽ được khởi động trên giao diện có sẵn công khai, cũng như giao thức để nó sẽ sử dụng HTTP thay vì giao thức nhị phân uwsgi. Sử dụng cùng một số cổng, 5000, mà bạn đã mở trước đó:

  1. uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app

Truy cập địa chỉ IP của máy chủ của bạn với :5000 được thêm vào cuối trong trình duyệt web của bạn một lần nữa:

http://your_server_ip:5000

Bạn sẽ thấy lại đầu ra của ứng dụng:

description image

Khi bạn đã xác nhận rằng nó hoạt động bình thường, hãy nhấn CTRL + C trong cửa sổ đầu cuối của bạn.

Bây giờ bạn đã hoàn tất với môi trường ảo của mình, vì vậy bạn có thể hủy kích hoạt nó:

  1. deactivate

Giờ đây, mọi lệnh Python sẽ sử dụng lại môi trường Python của hệ thống.

Tạo tệp cấu hình uWSGI

Bạn đã kiểm tra rằng uWSGI có thể phục vụ ứng dụng của mình, nhưng cuối cùng thì bạn sẽ muốn một thứ gì đó mạnh mẽ hơn để sử dụng lâu dài. Bạn có thể tạo tệp cấu hình uWSGI với các tùy chọn liên quan cho việc này.

Đặt tệp đó vào thư mục dự án của bạn và gọi nó là myproject.ini:

  1. nano ~/myproject/myproject.ini

Bên trong, bắt đầu tệp với tiêu đề [uwsgi] để uWSGI biết áp dụng cài đặt. Bên dưới đó, chỉ định chính mô-đun — bằng cách tham khảo tệp wsgi.py trừ đi phần mở rộng — và phần có thể gọi được trong tệp, app:

~/myproject/myproject.ini
[uwsgi]
module = wsgi:app

Tiếp theo, yêu cầu uWSGI khởi động ở chế độ chính và sinh ra năm quy trình worker để phục vụ các yêu cầu thực tế:

~/myproject/myproject.ini
[uwsgi]
module = wsgi:app

master = true
processes = 5

Khi bạn đang thử nghiệm, bạn đã hiển thị uWSGI trên một cổng mạng. Tuy nhiên, bạn sẽ sử dụng Nginx để xử lý các kết nối máy khách thực tế, sau đó sẽ chuyển các yêu cầu tới uWSGI. Vì các thành phần này đang hoạt động trên cùng một máy tính, ổ cắm Unix được ưu tiên hơn vì nó nhanh hơn và an toàn hơn. Gọi ổ cắm myproject.sock và đặt nó vào thư mục này.

Tiếp theo, thay đổi quyền trên ổ cắm. Bạn sẽ trao quyền sở hữu nhóm Nginx đối với quy trình uWSGI sau này, vì vậy bạn cần đảm bảo rằng chủ sở hữu nhóm của ổ cắm có thể đọc thông tin từ nhóm đó và ghi vào nhóm đó. Ngoài ra, thêm tùy chọn vacuum và đặt nó thành true; điều này sẽ dọn sạch ổ cắm khi quá trình dừng lại:

~/myproject/myproject.ini
[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = myproject.sock
chmod-socket = 660
vacuum = true

Điều cuối cùng cần làm là đặt tùy chọn die-on-term. Điều này có thể giúp đảm bảo rằng hệ thống init và uWSGI có cùng giả định về ý nghĩa của từng tín hiệu quy trình. Cài đặt này sẽ căn chỉnh hai thành phần hệ thống, thực hiện hành vi dự kiến:

~/myproject/myproject.init
[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = myproject.sock
chmod-socket = 660
vacuum = true

die-on-term = true

Bạn có thể nhận thấy rằng những dòng này không chỉ định một giao thức như bạn đã làm từ dòng lệnh. Đó là bởi vì theo mặc định, uWSGI sử dụng giao thức uwsgi, một giao thức nhị phân nhanh được thiết kế để giao tiếp với các máy chủ khác. Nginx có thể nói giao thức này một cách tự nhiên, vì vậy, tốt hơn là sử dụng giao thức này thay vì buộc giao tiếp bằng HTTP.

Khi bạn hoàn tất, hãy lưu và đóng tệp.

Cùng với đó, uWSGI được thiết lập cấu hình trên hệ thống của bạn. Để giúp bạn linh hoạt hơn trong cách quản lý ứng dụng Flask của mình, giờ đây bạn có thể thiết lập cấu hình ứng dụng này để chạy dưới dạng dịch vụ systemd.

Bước 5 - Tạo tệp đơn vị systemd

Systemd là một bộ công cụ cung cấp mô hình init nhanh và linh hoạt để quản lý các dịch vụ hệ thống. Tạo tệp đơn vị systemd sẽ cho phép hệ thống init của Ubuntu tự động khởi động uWSGI và phục vụ ứng dụng Flask bất cứ khi nào máy chủ khởi động.

Tạo một tệp đơn vị kết thúc bằng .service trong thư mục /etc/systemd/system để bắt đầu:

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

Bên trong, hãy bắt đầu với phần [Unit], được sử dụng để chỉ định siêu dữ liệu và các thành phần phụ thuộc. Sau đó đặt một mô tả về dịch vụ ở đây và yêu cầu hệ thống init chỉ bắt đầu dịch vụ này sau khi đã đạt được mục tiêu mạng:

/etc/systemd/system/myproject.service
[Unit]
Description=uWSGI instance to serve myproject
After=network.target

Tiếp theo, mở phần [Service]. Điều này sẽ chỉ định người dùng và nhóm mà bạn muốn tiến trình chạy bên dưới. Cấp cho tài khoản người dùng thông thường của bạn quyền sở hữu quy trình vì nó sở hữu tất cả các tệp có liên quan. Sau đó cấp quyền sở hữu nhóm cho nhóm www-data để Nginx có thể giao tiếp dễ dàng với các quy trình uWSGI. Hãy nhớ thay thế tên người dùng ở đây bằng tên người dùng của bạn:

/etc/systemd/system/myproject.service
[Unit]
Description=uWSGI instance to serve myproject
After=network.target

[Service]
User=sammy
Group=www-data

Tiếp theo, vạch ra thư mục làm việc và đặt biến môi trường PATH để hệ thống init biết rằng các tệp thực thi của quy trình được đặt trong môi trường ảo của bạn. Ngoài ra, chỉ định lệnh để bắt đầu dịch vụ. Systemd yêu cầu bạn cung cấp đường dẫn đầy đủ tới tệp thực thi uWSGI, được cài đặt trong môi trường ảo của bạn. Ở đây, chúng tôi chuyển tên của tệp cấu hình .ini mà bạn đã tạo trong thư mục dự án của mình.

Hãy nhớ thay thế tên người dùng và đường dẫn dự án bằng thông tin của riêng bạn:

/etc/systemd/system/myproject.service
[Unit]
Description=uWSGI 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/uwsgi --ini myproject.ini

Cuối cùng, thêm phần [Install]. Điều này sẽ cho systemd biết phải liên kết dịch vụ này với cái gì nếu bạn kích hoạt nó khởi động khi khởi động. Trong trường hợp này, hãy đặt dịch vụ bắt đầu khi hệ thống nhiều người dùng thông thường hoạt động:

/etc/systemd/system/myproject.service
[Unit]
Description=uWSGI 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/uwsgi --ini myproject.ini

[Install]
WantedBy=multi-user.target

Như vậy, tệp dịch vụ systemd của bạn đã hoàn tất. Lưu và đóng nó ngay bây giờ.

Bây giờ bạn có thể bắt đầu dịch vụ uWSGI mà bạn đã tạo:

  1. sudo systemctl start myproject

Sau đó kích hoạt nó để nó khởi động khi khởi động:

  1. sudo systemctl enable myproject

Kiểm tra trạng thái:

  1. sudo systemctl status myproject

Bạn sẽ thấy đầu ra như thế này:

Output
● myproject.service - uWSGI instance to serve myproject Loaded: loaded (/etc/systemd/system/myproject.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-05-20 13:21:39 UTC; 8h ago Main PID: 22146 (uwsgi) Tasks: 6 (limit: 2345) Memory: 25.5M CGroup: /system.slice/myproject.service ├─22146 /home/sammy/myproject/myprojectenv/bin/uwsgi --ini myproject.ini ├─22161 /home/sammy/myproject/myprojectenv/bin/uwsgi --ini myproject.ini ├─22162 /home/sammy/myproject/myprojectenv/bin/uwsgi --ini myproject.ini ├─22163 /home/sammy/myproject/myprojectenv/bin/uwsgi --ini myproject.ini ├─22164 /home/sammy/myproject/myprojectenv/bin/uwsgi --ini myproject.ini └─22165 /home/sammy/myproject/myprojectenv/bin/uwsgi --ini myproject.ini

Nếu bạn thấy bất kỳ lỗi nào, hãy nhớ giải quyết chúng trước khi tiếp tục với hướng dẫn. Nếu không, bạn có thể chuyển sang cấu hình cài đặt Nginx của mình để chuyển các yêu cầu tới ổ cắm myproject.sock.

Bước 6 - Thiết lập cấu hình Nginx cho các yêu cầu proxy

Máy chủ ứng dụng uWSGI của bạn hiện đã được thiết lập và đang chạy, đang chờ các yêu cầu trên tệp ổ cắm trong thư mục dự án. Trong bước này, bạn sẽ thiết lập cấu hình Nginx để chuyển các yêu cầu web tới ổ cắm đó bằng giao thức uwsgi.

Bắt đầu bằng cách tạo một tệp cấu hình khối máy chủ mới trong thư mục sites-available của Nginx. Để phù hợp với phần còn lại của hướng dẫn, ví dụ sau gọi đây là myproject:

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

Mở một khối máy chủ và yêu cầu Nginx lắng nghe trên cổng mặc định 80. Ngoài ra, hãy yêu cầu nó sử dụng khối này cho các yêu cầu đối với tên miền của máy chủ của bạn:

/etc/nginx/sites-available/myproject
server {
    listen 80;
    server_name your_domain www.your_domain;
}

Tiếp theo, thêm một khối vị trí phù hợp với mọi yêu cầu. Trong khối này, bao gồm tệp uwsgi_params chỉ định một số tham số uWSGI chung cần được đặt. Sau đó, chuyển các yêu cầu tới ổ cắm mà bạn đã xác định bằng lệnh uwsgi_pass:

/etc/nginx/sites-available/myproject
server {
    listen 80;
    server_name your_domain www.your_domain;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/sammy/myproject/myproject.sock;
    }
}

Lưu và đóng tệp khi bạn hoàn tất.

Để bật cấu hình khối máy chủ Nginx mà bạn vừa tạo, hãy liên kết tệp với thư mục sites-enabled:

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

Khi bạn cài đặt Nginx, quy trình sẽ tự động thiết lập tệp cấu hình khối máy chủ có tên default trong thư mục sites-available, sau đó tạo liên kết tượng trưng giữa tệp đó và thư mục sites-enabled. Nếu bạn để nguyên liên kết tượng trưng này, cấu hình default sẽ chặn tải trang web của bạn. Bạn có thể xóa liên kết bằng lệnh sau:

  1. sudo unlink /etc/nginx/sites-enabled/default

Sau đó, bạn có thể kiểm tra lỗi cú pháp bằng cách gõ:

  1. sudo nginx -t

Nếu điều này trở lại mà không chỉ ra bất kỳ sự cố nào, hãy khởi động lại quy trình Nginx để đọc cấu hình mới:

  1. sudo systemctl restart nginx

Cuối cùng, điều chỉnh tường lửa một lần nữa. Bạn không cần truy cập qua cổng 5000 nữa, vì vậy bạn có thể xóa quy tắc đó. Sau đó, bạn có thể cho phép truy cập vào máy chủ Nginx:

  1. sudo ufw delete allow 5000
  2. sudo ufw allow 'Nginx Full'

Bây giờ bạn sẽ có thể điều hướng đến tên miền của máy chủ trong trình duyệt web của mình:

http://your_domain3

Bạn sẽ thấy đầu ra ứng dụng của mình:

description image

Nếu bạn gặp bất kỳ lỗi nào, hãy thử kiểm tra như sau:

  • sudo less /var/log/nginx/error.log: kiểm tra nhật ký lỗi Nginx.
  • sudo less /var/log/nginx/access.log: kiểm tra nhật ký truy cập Nginx.
  • sudo journalctl -u nginx: kiểm tra nhật ký quá trình Nginx.
  • sudo journalctl -u myproject: kiểm tra nhật ký uWSGI của ứng dụng Flask của bạn.

Bước 7 — Bảo mật ứng dụng

Để đảm bảo rằng lưu lượng truy cập vào máy chủ của bạn vẫn an toàn, hãy lấy chứng chỉ SSL cho miền của bạn. Có nhiều cách để thực hiện việc này, bao gồm nhận chứng chỉ miễn phí từ Let's Encrypt, tạo chứng chỉ tự ký hoặc mua chứng chỉ từ nhà cung cấp thương mại. Để thuận tiện, hướng dẫn này giải thích cách lấy chứng chỉ miễn phí từ Let's Encrypt.

Đầu tiên, cài đặt Certbot và plugin Nginx của nó với apt:

  1. sudo apt install certbot python3-certbot-nginx

Certbot cung cấp nhiều cách khác nhau để lấy chứng chỉ SSL thông qua plugin. Plugin Nginx sẽ đảm nhiệm việc thiết lập cấu hình lại Nginx và tải lại cấu hình bất cứ khi nào cần thiết. Để sử dụng plugin này, gõ như sau:

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

Điều này chạy certbot với plugin --nginx, sử dụng -d để chỉ định tên bạn muốn chứng chỉ hợp lệ.

Nếu đây là lần đầu tiên bạn chạy certbot trên máy chủ này, bạn sẽ được nhắc nhập địa chỉ email và đồng ý với các điều khoản dịch vụ. Sau khi làm như vậy, certbot sẽ giao tiếp với máy chủ Let's Encrypt, sau đó chạy thử thách để xác minh rằng bạn kiểm soát miền mà bạn đang yêu cầu chứng chỉ.

Nếu thành công, certbot sẽ hỏi bạn muốn thiết lập cấu hình cài đặt HTTPS của mình như thế nào:

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Chọn lựa chọn của bạn rồi nhấn ENTER. Cấu hình sẽ được cập nhật và Nginx sẽ tải lại để nhận cài đặt mới. certbot sẽ kết thúc bằng một thông báo cho bạn biết quy trình đã thành công và nơi lưu trữ chứng chỉ của bạn:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2020-08-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Nếu bạn đã làm theo hướng dẫn cài đặt Nginx trong phần điều kiện tiên quyết, bạn sẽ không cần hỗ trợ hồ sơ HTTP dự phòng nữa:

  1. sudo ufw delete allow 'Nginx HTTP'

Để xác minh cấu hình, hãy điều hướng một lần nữa đến miền của bạn, sử dụng https://:

https://your_domain

Bạn sẽ thấy đầu ra ứng dụng của mình một lần nữa, cùng với chỉ báo bảo mật của trình duyệt, chỉ báo này cho biết rằng trang web được bảo mật.

Kết luận

Trong hướng dẫn này, bạn đã tạo và bảo mật một ứng dụng Flask cơ bản trong môi trường ảo Python. Sau đó, bạn đã tạo một điểm vào WSGI để bất kỳ máy chủ ứng dụng nào hỗ trợ WSGI đều có thể giao tiếp với nó, rồi thiết lập cấu hình máy chủ ứng dụng uWSGI để cung cấp chức năng này. Sau đó, bạn đã tạo một tệp dịch vụ systemd để tự động khởi chạy máy chủ ứng dụng khi khởi động. Bạn cũng đã tạo một khối máy chủ Nginx để chuyển lưu lượng truy cập của máy khách web đến máy chủ ứng dụng, do đó chuyển tiếp các yêu cầu bên ngoài và bảo đảm lưu lượng truy cập đến máy chủ của bạn bằng Let's Encrypt.

Flask là một khung đơn giản nhưng linh hoạt nhằm cung cấp cho các ứng dụng của bạn chức năng mà không quá hạn chế về cấu trúc hoặc thiết kế. Bạn có thể sử dụng ngăn xếp chung được mô tả trong hướng dẫn này để phục vụ các ứng dụng bình mà bạn thiết kế.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời