Cách cung cấp các ứng dụng Flask với uWSGI và Nginx trên Ubuntu 20.04
Trong hướng dẫn này, bạn sẽ xây dựng một ứng dụng Python bằng cách sử dụng vi khung Flask trên Ubuntu 20.04. Phần lớn bài viết này sẽ nói về cách cài đặt server ứng dụng uWSGI và cách chạy ứng dụng cũng như cấu hình Nginx hoạt động như một Reverse Proxy phía trước.Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn nên có:
- Server được cài đặt Ubuntu 20.04 và user không phải root có quyền sudo. Làm theo hướng dẫn cài đặt server ban đầu của ta để được hướng dẫn.
- Đã cài đặt Nginx, làm theo các Bước từ 1 đến 3 của Cách cài đặt Nginx trên Ubuntu 20.04 .
Tên domain được cấu hình để trỏ đến server của bạn. Bạn có thể mua một cái trên Namecheap hoặc nhận một cái miễn phí trên Freenom . Bạn có thể tìm hiểu cách trỏ domain đến DigitalOcean theo tài liệu liên quan về domain và DNS . Hướng dẫn này giả sử bạn đã tạo các bản ghi DNS sau:
- Một bản ghi với
your_domain
trỏ đến địa chỉ IP công cộng của server của bạn. - Một bản ghi A với
www. your_domain
trỏ đến địa chỉ IP công cộng của server của bạn.
- Một bản ghi với
Ngoài ra, có thể hữu ích nếu bạn đã quen với uWSGI, server ứng dụng mà bạn sẽ cài đặt trong hướng dẫn này và đặc tả WSGI. Cuộc thảo luận về các định nghĩa và khái niệm này sẽ được đề cập chi tiết.
Bước 1 - Cài đặt các thành phần từ repository Ubuntu
Bước đầu tiên của bạn sẽ là cài đặt tất cả các phần mà bạn cần từ repository 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 file phát triển Python cần thiết để xây dựng uWSGI.
Đầu tiên, hãy cập nhật index gói local :
- 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 bạn . Chúng sẽ bao gồm python3-pip
, cùng với một số gói và công cụ phát triển khác cần thiết cho một môi trường lập trình mạnh mẽ:
- 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 bạn .
Bước 2 - Tạo môi trường ảo Python
Môi trường ảo Python là một folder dự án độc lập chứa các version Python cụ thể và các module Python cần thiết cho dự án nhất định. Điều này rất hữu ích để cô lập một ứng dụng với những ứng dụng khác trên cùng hệ thống bằng cách quản lý các phần phụ thuộc của từng ứng dụng một cách riêng biệt. Trong bước này, bạn sẽ cài đặt một môi trường ảo Python mà từ đó bạn sẽ chạy ứng dụng Flask của bạn .
Bắt đầu bằng cách cài đặt gói python3-venv
, gói này sẽ cài đặt module venv
:
- sudo apt install python3-venv
Tiếp theo, tạo một folder mẹ cho dự án Flask của bạn:
- mkdir ~/myproject
Di chuyển vào folder sau khi bạn tạo:
- 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 lệnh :
- python3.8 -m venv myprojectenv
Điều này sẽ cài đặt một bản sao local của Python và pip
vào một folder gọi là myprojectenv
trong folder 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 lệnh :
- source myprojectenv/bin/activate
Dấu 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ó trông giống như sau : ( myprojectenv ) user @ host :~/ myproject $
.
Bước 3 - Cài đặt ứng dụng flask
Đến đây bạn đang ở trong môi trường ảo của bạn , bạn có thể cài đặt Flask và uWSGI, sau đó bắt đầu thiết kế ứng dụng của bạn .
Đầu tiên, hãy cài đặt wheel
với version local 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 bị thiếu repository bánh xe:
- pip install wheel
Lưu ý : Dù bạn đang sử dụng version 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:
- pip install uwsgi flask
Tạo ứng dụng mẫu
Đến đây 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 khung công tác đầy đủ tính năng hơn có thể có và chủ yếu tồn tại dưới dạng module mà bạn có thể nhập vào các dự án của bạn để 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, trong ví dụ này, bạn sẽ tạo ứng dụng Flask của bạn trong một file duy nhất, được gọi là myproject.py
:
- nano ~/myproject/myproject.py
Mã ứng dụng sẽ nằm trong file 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:
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 vào domain root . Lưu file khi bạn hoàn tất. Nếu bạn đã sử dụng nano
để chỉnh sửa file , như trong ví dụ trước, hãy làm như vậy bằng cách nhấn CTRL + X
, Y
, sau đó ENTER
.
Nếu bạn đã làm theo hướng dẫn cài đặt server ban đầu, bạn nên bật firewall UFW. Để kiểm tra ứng dụng, bạn cần cho phép truy cập vào cổng 5000
:
- sudo ufw allow 5000
Bây giờ, bạn có thể kiểm tra ứng dụng Flask của bạn bằng lệnh :
- python myproject.py
Bạn sẽ thấy kết quả như sau, bao gồm một cảnh báo hữu ích nhắc bạn không sử dụng cài đặt server này trong production :
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 server của bạn, sau đó là :5000
trong trình duyệt web :
http://your_server_ip:5000
Bạn sẽ thấy thông tin như thế này:
Khi bạn hoàn tất, nhấn CTRL + C
trong cửa sổ terminal của bạn để dừng server phát triển Flask.
Tạo điểm vào WSGI
Tiếp theo, tạo một file sẽ đóng role là điểm nhập cho ứng dụng của bạn. Điều này sẽ cho server uWSGI của bạn biết cách tương tác với nó.
Gọi file wsgi.py
:
- nano ~/myproject/wsgi.py
Trong file này, nhập version Flask từ ứng dụng của bạn và sau đó chạy nó:
from myproject import app if __name__ == "__main__": app.run()
Lưu file khi bạn hoàn tất.
Bước 4 - Cấu hình uWSGI
Đơn của bạn bây giờ đã được viết với một điểm nhập cảnh đã được cài đặt . Bạn có thể chuyển sang cấu hình uWSGI.
Kiểm tra xem uWSGI có thể phân phát ứ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ân phát chính xác ứng dụng của bạn bằng cách chuyển cho nó tên điểm nhập của bạn. Điều này được xây dựng bởi tên của module (trừ phần mở rộng .py
) cộng với tên của phần có thể gọi trong ứng dụng. Trong ngữ cảnh của hướng dẫn này, tên của điểm nhập là wsgi:app
.
Ngoài ra, hãy chỉ định socket để 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 binary uwsgi
. Sử dụng cùng một số cổng, 5000
, mà bạn đã mở trước đó:
- uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
Truy cập lại địa chỉ IP server của bạn với :5000
thêm vào cuối trong trình duyệt web :
http://your_server_ip:5000
Bạn sẽ thấy lại kết quả của ứng dụng:
Khi bạn đã xác nhận nó hoạt động bình thường, hãy nhấn CTRL + C
trong cửa sổ dòng lệnh của bạn.
Đến đây bạn đã hoàn tất với môi trường ảo của bạn , vì vậy bạn có thể hủy kích hoạt nó:
- deactivate
Mọi lệnh Python bây giờ sẽ sử dụng lại môi trường Python của hệ thống.
Tạo file cấu hình uWSGI
Bạn đã kiểm tra rằng uWSGI có thể phục vụ ứng dụng của bạn, nhưng cuối cùng bạn cần một thứ gì đó mạnh mẽ hơn để sử dụng lâu dài. Bạn có thể tạo file cấu hình uWSGI với các tùy chọn liên quan cho việc này.
Đặt file đó vào folder dự án của bạn và gọi nó là myproject.ini
:
- nano ~/myproject/myproject.ini
Bên trong, hãy bắt đầu file bằng tiêu đề [uwsgi]
để uWSGI biết để áp dụng cài đặt. Dưới đó, chỉ định chính module - bằng cách tham wsgi.py
file wsgi.py
trừ phần mở rộng - và có thể gọi trong file , app
:
[uwsgi] module = wsgi:app
Tiếp theo, yêu cầu uWSGI khởi động ở chế độ chính và tạo ra năm quy trình công nhân để phục vụ các yêu cầu thực tế:
[uwsgi] module = wsgi:app master = true processes = 5
Khi bạn đang kiểm tra, bạn đã để lộ 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 client thực tế, sau đó sẽ chuyển các yêu cầu đến uWSGI. Vì các thành phần này đang hoạt động trên cùng một máy tính nên socket Unix sẽ được ưu tiên hơn vì nó nhanh hơn và an toàn hơn. Gọi socket myproject .sock
và đặt nó vào folder này.
Tiếp theo, thay đổi quyền trên socket. Sau này, bạn sẽ cấp cho group Nginx quyền sở hữu quy trình uWSGI, vì vậy bạn cần đảm bảo chủ sở hữu group của socket có thể đọc thông tin từ nó và ghi vào nó. Ngoài ra, hãy thêm tùy chọn vacuum
và đặt nó thành true; điều này sẽ làm sạch socket khi quá trình dừng lại:
[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 hệ thống init và uWSGI có cùng giả định về ý nghĩa của mỗi 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 mong đợi:
[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 giống như bạn đã làm từ dòng lệnh. Đó là vì theo mặc định, uWSGI nói bằng giao thức uwsgi
, một giao thức binary nhanh được thiết kế để giao tiếp với các server 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 nó hơn là buộc giao tiếp bằng HTTP.
Khi bạn hoàn tất, hãy lưu file .
Cùng với đó, uWSGI được cấu hình trên hệ thống. Để giúp bạn linh hoạt hơn trong cách quản lý ứng dụng Flask của bạn , giờ đây bạn có thể cấu hình nó để chạy như một dịch vụ systemd.
Bước 5 - Tạo file đơn vị systemd
Systemd là một bộ công cụ cung cấp mô hình init nhanh chóng và linh hoạt để quản lý các dịch vụ hệ thống. Tạo một file đơ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 khi nào server khởi động.
Tạo một file đơn vị kết thúc bằng .service
trong folder /etc/systemd/system
để bắt đầu:
- 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 metadata và phần phụ thuộc. Sau đó, đặt mô tả về dịch vụ ở đây và yêu cầu hệ thống init chỉ bắt đầu điều này sau khi đã đạt được mục tiêu mạng:
[Unit] Description=uWSGI instance to serve myproject After=network.target
Tiếp theo, mở phần [Service]
. Điều này sẽ chỉ định user và group mà bạn muốn quá trình chạy. Cấp cho account regular user của bạn quyền sở hữu quy trình vì nó sở hữu tất cả các file có liên quan. Sau đó, cấp quyền sở hữu group cho www-data group để Nginx có thể giao tiếp dễ dàng với các quy trình uWSGI. Hãy nhớ thay thế tên user ở đây bằng tên user của bạn:
[Unit] Description=uWSGI instance to serve myproject After=network.target [Service] User=sammy Group=www-data
Tiếp theo, vạch ra folder làm việc và đặt biến môi trường PATH
để hệ thống init biết rằng các file thực thi cho 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 đủ đến file thực thi uWSGI, được cài đặt trong môi trường ảo của bạn. Ở đây, ta chuyển tên của file cấu hình .ini
mà bạn đã tạo trong folder dự án của bạn .
Hãy nhớ thay thế tên user và đường dẫn dự án bằng thông tin của bạn :
[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]
. Thao tác 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 cho phép nó khởi động khi server 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 regular user được cài đặt và chạy:
[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
Sau đó, file dịch vụ systemd của bạn đã hoàn tất. Lưu và đóng nó ngay bây giờ.
Đến đây bạn có thể bắt đầu dịch vụ uWSGI mà bạn đã tạo:
- sudo systemctl start myproject
Sau đó, kích hoạt nó để nó bắt đầu khi server khởi động :
- sudo systemctl enable myproject
Kiểm tra trạng thái:
- sudo systemctl status myproject
Bạn sẽ thấy kết quả 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 bạn để chuyển các yêu cầu đến socket myproject .sock
.
Bước 6 - Cấu hình Nginx cho các yêu cầu proxy
Server ứng dụng uWSGI của bạn hiện đang hoạt động và đang chờ các yêu cầu trên file socket trong folder dự án. Trong bước này, bạn sẽ cấu hình Nginx để chuyển các yêu cầu web tới socket đó bằng giao thức uwsgi
.
Bắt đầu bằng cách tạo file cấu hình khối server mới trong folder sites-available
của Nginx. Để giữ cho phù hợp với phần còn lại của hướng dẫn, ví dụ sau đây đề cập đến điều này như myproject
:
- sudo nano /etc/nginx/sites-available/myproject
Mở khối server 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 domain server của bạn:
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, hãy bao gồm file uwsgi_params
chỉ định một số tham số uWSGI chung cần được đặt. Sau đó, chuyển các yêu cầu đến socket bạn đã xác định bằng cách sử dụng chỉ thị uwsgi_pass
:
server { listen 80; server_name your_domain www.your_domain; location / { include uwsgi_params; uwsgi_pass unix:/home/sammy/myproject/myproject.sock; } }
Lưu file khi bạn hoàn tất.
Để bật cấu hình khối server Nginx mà bạn vừa tạo, hãy liên kết file với folder sites-enabled
:
- sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
Với file trong folder đó, bạn có thể kiểm tra lỗi cú pháp bằng lệnh :
- sudo nginx -t
Nếu điều này trả về mà không chỉ ra sự cố nào , hãy khởi động lại tiến trình Nginx để đọc cấu hình mới:
- sudo systemctl restart nginx
Cuối cùng, điều chỉnh firewall . Bạn không cần truy cập thông qua cổng 5000
, vì vậy bạn có thể xóa luật đó. Sau đó, bạn có thể cho phép truy cập vào server Nginx:
- sudo ufw delete allow 5000
- sudo ufw allow 'Nginx Full'
Đến đây bạn sẽ có thể chuyển đến domain của server trong trình duyệt web :
http://your_domain
Bạn sẽ thấy kết quả ứng dụng của bạn :
Nếu bạn gặp bất kỳ lỗi nào, hãy thử kiểm tra những điều sau:
-
sudo less /var/log/nginx/error.log
: kiểm tra log lỗi Nginx. -
sudo less /var/log/nginx/access.log
: kiểm tra log truy cập Nginx. -
sudo journalctl -u nginx
: kiểm tra log tiến trình Nginx . -
sudo journalctl -u myproject
: kiểm tra log uWSGI của ứng dụng Flask của bạn.
Bước 7 - Bảo mật ứng dụng
Để đảm bảo lưu lượng truy cập đến server của bạn vẫn an toàn, hãy lấy certificate SSL cho domain của bạn. Có nhiều cách để thực hiện việc này, bao gồm nhận certificate miễn phí từ Let's Encrypt , tạo certificate tự ký hoặc mua certificate từ nhà cung cấp thương mại. Vì mục đích hiệu quả, hướng dẫn này giải thích cách lấy certificate miễn phí từ Let's Encrypt.
Đầu tiên, hãy cài đặt Certbot và plugin Nginx của nó bằng apt
:
- sudo apt install certbot python3-certbot-nginx
Certbot cung cấp nhiều cách khác nhau để lấy certificate SSL thông qua các plugin. Plugin Nginx sẽ xử lý việc cấu hình lại Nginx và reload cấu hình khi nào cần thiết. Để sử dụng plugin này, hãy nhập như sau:
- 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 certificate hợp lệ.
Nếu đây là lần đầu tiên bạn chạy certbot
trên server này, bạn sẽ được yêu cầu 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 server Let's Encrypt, sau đó chạy thử thách để xác minh bạn kiểm soát domain mà bạn đang certificate request .
Nếu thành công, certbot
sẽ hỏi bạn muốn cấu hình cài đặt HTTPS của bạn như thế nào:
OutputPlease 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ẽ reload để chọ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 quá trình đã thành công và nơi lưu trữ certificate của bạn:
OutputIMPORTANT 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 yêu cầu , bạn sẽ không cần phụ cấp profile HTTP dự phòng nữa:
- sudo ufw delete allow 'Nginx HTTP'
Để xác minh cấu hình, hãy chuyển đến domain của bạn, sử dụng https://
:
https://your_domain
Bạn sẽ thấy kết quả ứng dụng của bạn , cùng với chỉ báo bảo mật của trình duyệt, chỉ báo này sẽ 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 nhập WSGI để bất kỳ server ứng dụng nào có khả năng WSGI đều có thể giao tiếp với nó, rồi cấu hình server ứng dụng uWSGI để cung cấp chức năng này. Sau đó, bạn đã tạo file dịch vụ systemd để tự động chạy server ứng dụng khi khởi động. Bạn cũng đã tạo một khối server Nginx chuyển lưu lượng client web đến server ứng dụng, do đó chuyển tiếp các yêu cầu bên ngoài và lưu lượng truy cập được bảo mật đến server của bạn bằng Let's Encrypt.
Flask là một khung công tác đơ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 flask mà bạn thiết kế.
Các tin liên quan
Cách cung cấp các ứng dụng Flask với uWSGI và Nginx trên Ubuntu 18.042020-05-21
Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 20.04
2020-05-20
Cách cung cấp các ứng dụng Flask với Gunicorn và Nginx trên Ubuntu 20.04
2020-05-20
Cách cài đặt và cấu hình Laravel với Nginx trên Ubuntu 20.04
2020-05-19
Cách cài đặt Nginx trên Ubuntu 18.04
2020-05-06
Cách cài đặt Nginx trên Ubuntu 20.04 [Quickstart]
2020-05-04
Cách cài đặt Nginx trên Ubuntu 20.04
2020-04-24
Cách tối ưu hóa cấu hình Nginx
2020-03-26
Cách thiết lập Laravel, Nginx và MySQL với Docker Compose
2020-03-09
Cách cài đặt Nginx trên CentOS 8
2020-03-03