一、前言
部署一個(gè) FastAPI 應(yīng)用到你的服務(wù)器是一項(xiàng)復(fù)雜的任務(wù)。如果你對NGINX、Gunicorn和 Uvicorn 這些技術(shù)不熟悉,可能會(huì)浪費(fèi)大量的時(shí)間。如果你是剛接觸 Python 語言不久或者希望利用 Python 構(gòu)建自己的Web應(yīng)用程序,本文的內(nèi)容可能會(huì)讓你第一次部署時(shí)更節(jié)省時(shí)間。
FastAPI 是用于開發(fā)API應(yīng)用最受歡迎的Python庫之一,用于開發(fā)API。它以其出色的性能和易用性而聞名。如果你在網(wǎng)頁應(yīng)用中使用機(jī)器學(xué)習(xí)模型,那么它很可能是你首選的工具。
NGINX、Gunicorn 和 Uvicorn 都是經(jīng)過實(shí)踐驗(yàn)證的技術(shù),常被用作反向代理和ASGI服務(wù)器來部署Python網(wǎng)頁應(yīng)用。如果你熟悉 Django 或 Flask,你可能之前聽說過它們中的一些。
接下來,我將展示如何結(jié)合這些工具來部署一個(gè) FastAPI 網(wǎng)頁應(yīng)用。以下是主要內(nèi)容:
-
介紹FastAPI、NGINX、Gunicorn和Uvicorn的基礎(chǔ)知識(shí)。
-
配置Gunicorn + Uvicorn作為ASGI服務(wù)器。
-
設(shè)置NGINX作為反向代理服務(wù)器。
-
使用Let's Encrypt生成免費(fèi)SSL證書。
二、技術(shù)框架介紹
2.1、FastAPI
FastAPI 是一個(gè)現(xiàn)代的、高性能的 Web 框架,用于使用 Python 構(gòu)建 API,并基于標(biāo)準(zhǔn)類型提示。
它具有以下主要特點(diǎn):
-
高效運(yùn)行:借助 Starlette 和 pydantic,F(xiàn)astAPI 提供了與 NodeJS 和 Go 類似的出色性能。FastAPI比Flask快得多,它實(shí)際上是Python最快的Web框架之一。唯一比 FastAPI 更快的框架是 Starlette(FastAPI 實(shí)際上是基于 Starlette 構(gòu)建的)。
-
快速開發(fā):它可以顯著提高開發(fā)速度。
-
減少錯(cuò)誤:減少了人為錯(cuò)誤的可能性。
-
直觀易用:支持強(qiáng)大的編輯器功能、自動(dòng)補(bǔ)全和更少的調(diào)試時(shí)間。
-
簡單易學(xué):設(shè)計(jì)簡單明了,您可以花更少時(shí)間閱讀文檔。
-
減少重復(fù)代碼量:最大限度地減少了代碼重復(fù)。
-
健壯可靠:提供生產(chǎn)就緒的代碼和自動(dòng)生成交互式文檔功能。
-
基于標(biāo)準(zhǔn)化:遵循 API、OpenAPI 和 JSON 模式等開放標(biāo)準(zhǔn)。
該框架旨在優(yōu)化開發(fā)人員體驗(yàn),使您能夠以簡潔的代碼構(gòu)建具備最佳實(shí)踐且適合生產(chǎn)環(huán)境使用的 API。
2.2、Gunicorn
Gunicorn是用于Python應(yīng)用程序的WSGI服務(wù)器的一種實(shí)現(xiàn)。
Gunicorn是一個(gè)符合WSGI標(biāo)準(zhǔn)的Web服務(wù)器,用于Python應(yīng)用程序,它接收從客戶端發(fā)送到Web服務(wù)器的請求,并將其轉(zhuǎn)發(fā)到Python應(yīng)用程序或Web框架(如Flask或Django)上,以便為請求運(yùn)行適當(dāng)?shù)?strong>應(yīng)用程序代碼。
2.3、Uvicorn
與Flask框架不同,F(xiàn)astAPI不包含任何內(nèi)置的開發(fā)服務(wù)器。因此,我們需要Uvicorn。它實(shí)施ASGI標(biāo)準(zhǔn),速度快如閃電。ASGI 代表 異步服務(wù)器網(wǎng)關(guān)接口。
-
Uvicorn是Python的ASGI Web服務(wù)器實(shí)現(xiàn)。
-
Uvicorn目前支持HTTP / 1.1和WebSockets。
2.4、Nginx
Nginx 是一個(gè)異步框架的 Web 服務(wù)器,也可以用作反向代理,負(fù)載平衡器 和 HTTP 緩存。該軟件由 Igor Sysoev 創(chuàng)建,并于2004年首次公開發(fā)布。同名公司成立于2011年,以提供支持。Nginx 是一款免費(fèi)的開源軟件,根據(jù)類 BSD 許可證的條款發(fā)布。一大部分Web服務(wù)器使用 Nginx ,通常作為負(fù)載均衡器。
Nginx 具備以下特點(diǎn):
-
更快:單次請求會(huì)得到更快的響應(yīng);在高并發(fā)環(huán)境下,Nginx 比其他 WEB 服務(wù)器有更快的響應(yīng)。
-
高擴(kuò)展性:Nginx 是基于模塊化設(shè)計(jì),由多個(gè)耦合度極低的模塊組成,因此具有很高的擴(kuò)展性。許多高流量的網(wǎng)站都傾向于開發(fā)符合自己業(yè)務(wù)特性的定制模塊。
-
高可靠性:Nginx 的可靠性來自于其核心框架代碼的優(yōu)秀設(shè)計(jì),模塊設(shè)計(jì)的簡單性。另外,官方提供的常用模塊都非常穩(wěn)定,每個(gè) worker 進(jìn)程相對獨(dú)立,master 進(jìn)程在一個(gè) worker 進(jìn)程出錯(cuò)時(shí)可以快速拉起新的 worker 子進(jìn)程提供服務(wù)。
-
低內(nèi)存消耗:一般情況下,10000個(gè)非活躍的
HTTP Keep-Alive
連接在 Nginx 中僅消耗2.5MB
的內(nèi)存,這是 Nginx 支持高并發(fā)連接的基礎(chǔ);單機(jī)支持10萬以上的并發(fā)連接:理論上,Nginx 支持的并發(fā)連接上限取決于內(nèi)存,10萬遠(yuǎn)未封頂。 -
熱部署:master 進(jìn)程與 worker 進(jìn)程的分離設(shè)計(jì),使得 Nginx 能夠提供熱部署功能,即在 7x24 小時(shí)不間斷服務(wù)的前提下,升級(jí) Nginx 的可執(zhí)行文件。當(dāng)然,它也支持不停止服務(wù)就更新配置項(xiàng),更換日志文件等功能。
-
最自由的 BSD 許可協(xié)議:這是 Nginx 可以快速發(fā)展的強(qiáng)大動(dòng)力。BSD 許可協(xié)議不只是允許用戶免費(fèi)使用 Nginx ,它還允許用戶在自己的項(xiàng)目中直接使用或修改 Nginx 源碼,然后發(fā)布。
三、服務(wù)器安全設(shè)置
如果你的應(yīng)用部署在局域網(wǎng),你可能暫時(shí)不需要關(guān)注這塊,但如果你的應(yīng)用是部署在云服務(wù)器或者VPS,為了保障你的應(yīng)用安全性,建議還是需要對服務(wù)器做一些必要性的安全設(shè)置,避免被攻擊。
3.1、啟用自動(dòng)更新
首先,確保您的服務(wù)器擁有最新的軟件:
sudo apt update && sudo apt upgrade -y
以下是在使用基于Debian的服務(wù)器時(shí)會(huì)看到的常見命令:
-
使用命令
sudo apt update
來更新系統(tǒng)上的軟件包列表索引。 -
使用命令
sudo apt upgrade -y
將已安裝的軟件包升級(jí)到最新版本。使用-y
標(biāo)志可以跳過確認(rèn)步驟,直接進(jìn)行安裝。
接下來,設(shè)置自動(dòng)安全更新,這樣就不必手動(dòng)執(zhí)行更新。為此,您需要安裝并啟用unnattended-upgrades
:
sudo apt install unattended-upgrades
安裝完成后,編輯文件 /etc/apt/apt.conf.d/20auto-upgrades
并按照以下配置進(jìn)行設(shè)置:
APT::Periodic::Update-Package-Lists "1"; # 每天自動(dòng)更新軟件包列表
APT::Periodic::Unattended-Upgrade "1"; # 系統(tǒng)將自動(dòng)升級(jí)到最新版本的軟件包
APT::Periodic::AutocleanInterval "7"; # 每周運(yùn)行一次自動(dòng)清理操作,刪除舊的和不必要的包文件
最后,在文件 /etc/apt/apt.conf.d/50unattended-upgrades
中進(jìn)行編輯,以確保系統(tǒng)在需要內(nèi)核更新時(shí)自動(dòng)重新啟動(dòng):
Unattended-Upgrade::Automatic-Reboot "true";
完成以上步驟后,您的系統(tǒng)將自動(dòng)執(zhí)行安全更新,并在需要時(shí)重新啟動(dòng)以應(yīng)用內(nèi)核更新。
3.2、創(chuàng)建非root用戶
為了減少黑客攻擊造成的損害,創(chuàng)建非root用戶是必要的。以下是一些命令來創(chuàng)建非root用戶和設(shè)置SSH密鑰登錄:
- 創(chuàng)建一個(gè)新的非root用戶:
sudo adduser fastapi-user # 將fastapi-user替換為您喜歡的用戶名
- 將該用戶添加到sudo組以獲得管理員權(quán)限:
sudo usermod -aG sudo fastapi-user # 將fastapi-user替換為您創(chuàng)建的用戶名
- 使用新創(chuàng)建的用戶登錄服務(wù)器:
su - fastapi-user # 使用新用戶登錄,將fastapi-user替換為您創(chuàng)建的用戶名
- 設(shè)置使用SSH密鑰進(jìn)行身份驗(yàn)證:
如果您還沒有SSH密鑰,請?jiān)诒镜赜?jì)算機(jī)上打開終端并運(yùn)行以下命令(請注意將your-email-replace-with-your-email替換為您的實(shí)際電子郵件):
ssh-keygen -t ed25519 -C "your-email-replace-with-your-email"
這將生成一對SSH密鑰。
復(fù)制公共SSH密鑰并將其粘貼到遠(yuǎn)程服務(wù)器上(請注意將your-public-key-replace-with-your-public-key替換為實(shí)際公共密鑰):
echo "your-public-key-replace-with-your-public-key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
- 禁用root登錄和密碼身份驗(yàn)證:
使用sudo權(quán)限編輯/etc/ssh/sshd_config
文件(例如使用sudo vim /etc/ssh/sshd_config
命令)。
將以下行的值更改為所示:
PermitRootLogin no
PasswordAuthentication no
這將禁止root用戶登錄和使用密碼進(jìn)行SSH身份驗(yàn)證。
- 保存并關(guān)閉文件后,重新啟動(dòng)SSH服務(wù)以使更改生效:
sudo service ssh restart
一旦完成上述步驟,請使用新創(chuàng)建的非root用戶和SSH密鑰進(jìn)行登錄,并確保禁用了root登錄和密碼身份驗(yàn)證。
3.3、其他安全措施
大多數(shù)云提供商都提供防火墻服務(wù)。如果您的云提供商不提供防火墻服務(wù),您可以手動(dòng)配置防火墻來限制傳入流量只能到達(dá)必要的端口,例如80、443和22端口。
另外,您還可以安裝并配置fail2ban來預(yù)防暴力身份驗(yàn)證攻擊。Fail2ban是一個(gè)用于保護(hù)Linux服務(wù)器免受惡意登錄嘗試的工具。它監(jiān)視系統(tǒng)日志文件,并根據(jù)設(shè)定的規(guī)則自動(dòng)禁止源IP地址。
如果您想了解更多關(guān)于保護(hù)Linux服務(wù)器的最佳實(shí)踐,請查看Linode提供的相關(guān)指南。這些指南將為您提供有關(guān)如何設(shè)置和增強(qiáng)服務(wù)器安全性的詳細(xì)信息。
四、安裝軟件工具
為了安裝必要的軟件工具,請按照以下步驟執(zhí)行:
4.1、安裝Python:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-venv -y
4.2、安裝Supervisor和NGINX:
sudo apt install supervisor nginx -y
Supervisor 是一個(gè)用于類Unix操作系統(tǒng)(包括Linux)的進(jìn)程控制系統(tǒng),它用于監(jiān)視和管理程序的進(jìn)程。NGINX是一種常用的多功能軟件,通常用作反向代理來部署Web應(yīng)用程序。
4.3、啟用并啟動(dòng)Supervisor:
sudo systemctl enable supervisor
sudo systemctl start supervisor
使用enable
命令將確保 Supervisor 在啟動(dòng)時(shí)自動(dòng)啟動(dòng),并使用start
命令立即啟動(dòng) Supervisor 服務(wù)。
完成上述步驟后,您已成功安裝 Python、Supervisor 和 NGINX,并已啟用并啟動(dòng)了 Supervisor 服務(wù)。
五、設(shè)置 FastAPI 應(yīng)用程序
首先,將示例應(yīng)用程序克隆到/home/fastapi-user
目錄下:
git clone https://github.com/dylanjcastillo/fastapi-nginx-gunicorn
這將從公共存儲(chǔ)庫克隆代碼。如果您要部署私有GitHub存儲(chǔ)庫中的應(yīng)用程序,請?jiān)O(shè)置GitHub部署密鑰并使用該密鑰克隆存儲(chǔ)庫。
接下來,創(chuàng)建一個(gè)虛擬環(huán)境并激活它:
cd /home/fastapi-user/fastapi-nginx-gunicorn
python3.11 -m venv .venv
source .venv/bin/activate
這些命令將使您進(jìn)入項(xiàng)目目錄,并在其中創(chuàng)建一個(gè)虛擬環(huán)境并激活它。一旦成功激活,您的命令行提示符前面應(yīng)顯示.venv
。
現(xiàn)在,使用 requirements.txt 文件中指定的依賴項(xiàng)安裝所需的軟件包:
pip install -r requirements.txt
這將在當(dāng)前虛擬環(huán)境中安裝fastapi、gunicorn和uvicorn等軟件包。
為了驗(yàn)證一切是否順利,運(yùn)行應(yīng)用程序:
uvicorn main:app
運(yùn)行此命令時(shí)不應(yīng)出現(xiàn)任何錯(cuò)誤。您還可以打開新終端窗口,并連接到服務(wù)器,然后使用以下命令發(fā)出請求來驗(yàn)證它是否正常工作:
curl http://localhost:8000
您應(yīng)該會(huì)收到以下響應(yīng):
{"message":"It's working!"}
現(xiàn)在您已經(jīng)成功運(yùn)行了FastAPI應(yīng)用程序,接下來將配置Gunicorn作為WSGI服務(wù)器。
六、配置Gunicorn
配置Gunicorn有兩個(gè)步驟。首先,明確指定 Gunicorn 的配置要求。其次,設(shè)置Supervisor程序來運(yùn)行Gunicorn。
6.1 設(shè)置Gunicorn
首先,在項(xiàng)目目錄中創(chuàng)建一個(gè)名為 gunicorn_start 的文件:
vim gunicorn_start
然后,將以下內(nèi)容添加到文件中:
#!/bin/bash
NAME=fastapi-app
DIR=/home/fastapi-user/fastapi-nginx-gunicorn
USER=fastapi-user
GROUP=fastapi-user
WORKERS=3
WORKER_CLASS=uvicorn.workers.UvicornWorker
VENV=$DIR/.venv/bin/activate
BIND=unix:$DIR/run/gunicorn.sock
LOG_LEVEL=error
cd $DIR
source $VENV
exec gunicorn main:app \
--name $NAME \
--workers $WORKERS \
--worker-class $WORKER_CLASS \
--user=$USER \
--group=$GROUP \
--bind=$BIND \
--log-level=$LOG_LEVEL \
--log-file=-
這是您的設(shè)定解釋:
-
第1行表示此腳本將由bash shell執(zhí)行。
-
第3行至第11行指定您將傳遞給Gunicorn的配置選項(xiàng)。大多數(shù)參數(shù)都是直觀的,除了 WORKERS、WORKER_CLASS 和 BIND :
-
WORKERS:定義要使用的工作進(jìn)程數(shù)量,通常建議使用CPU核心數(shù)+1。
-
WORKER_CLASS:指定要使用的工作進(jìn)程類型。在此示例中,您指定Uvicorn Worker作為ASGI服務(wù)器。
-
BIND:指定Gunicorn綁定到的 server socket。
-
第13行和第14行將當(dāng)前位置更改為項(xiàng)目目錄并激活虛擬環(huán)境。
-
第16行至第24行使用指定的參數(shù)運(yùn)行Gunicorn。
保存并關(guān)閉文件。然后,通過運(yùn)行以下命令使其可執(zhí)行:
chmod u+x gunicorn_start
最后,在項(xiàng)目目錄中創(chuàng)建一個(gè)文件夾 run ,用于存儲(chǔ)您在參數(shù)中定義的Unix套接字文件BIND:
mkdir run
6.2 配置Supervisor
首先,在項(xiàng)目目錄中創(chuàng)建一個(gè)名為 logs 的目錄,用于存儲(chǔ)應(yīng)用程序的錯(cuò)誤日志:
mkdir logs
接下來,通過運(yùn)行以下命令創(chuàng)建Supervisor的配置文件:
sudo vim /etc/supervisor/conf.d/fastapi-app.conf
復(fù)制并粘貼以下內(nèi)容到文件中:
[program:fastapi-app]
command=/home/fastapi-user/fastapi-nginx-gunicorn/gunicorn_start
user=fastapi-user
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/home/fastapi-user/fastapi-nginx-gunicorn/logs/gunicorn-error.log
此配置文件指定了之前創(chuàng)建的 gunicorn_start 腳本,并設(shè)置了 fastapi-user 作為用戶。Supervisor 將在服務(wù)器啟動(dòng)時(shí)啟動(dòng)應(yīng)用程序,并在應(yīng)用程序失敗時(shí)重新啟動(dòng)它。錯(cuò)誤日志將記錄在項(xiàng)目目錄下 logs/gunicorn-error.log 文件中。
重新加載Supervisor配置并重啟服務(wù),通過運(yùn)行以下命令:
sudo supervisorctl reread
sudo supervisorctl update
最后,您可以通過運(yùn)行以下命令檢查程序的狀態(tài):
sudo supervisorctl status fastapi-app
如果一切順利,fastapi-app 服務(wù)的狀態(tài)應(yīng)顯示為 RUNNING。
您還可以通過打開新的終端窗口,連接到服務(wù)器,并使用以下命令發(fā)出GET請求來測試它:
curl --unix-socket /home/fastapi-user/fastapi-nginx-gunicorn/run/gunicorn.sock localhost
您應(yīng)該會(huì)看到以下輸出:
{"message":"It's working!"
最后,如果您對代碼進(jìn)行了更改,可以通過運(yùn)行以下命令重新啟動(dòng)服務(wù)以應(yīng)用更改:
sudo supervisorctl restart fastapi-app
現(xiàn)在您已經(jīng)擁有一個(gè)使用Gunicorn和Uvicorn作為ASGI服務(wù)器的應(yīng)用程序。接下來,您將使用NGINX設(shè)置反向代理服務(wù)器。
七、配置NGINX
為您的項(xiàng)目創(chuàng)建一個(gè)新的 NGINX 配置文件:
sudo vim /etc/nginx/sites-available/fastapi-app
打開NGINX配置文件并粘貼以下內(nèi)容:
upstream app_server {
server unix:/home/fastapi-user/fastapi-nginx-gunicorn/run/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
# add here the ip address of your server
# or a domain pointing to that ip (like example.com or www.example.com)
server_name XXXX;
keepalive_timeout 5;
client_max_body_size 4G;
access_log /home/fastapi-user/fastapi-nginx-gunicorn/logs/nginx-access.log;
error_log /home/fastapi-user/fastapi-nginx-gunicorn/logs/nginx-error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://app_server;
break;
}
}
}
這是 NGINX 配置文件。它的工作原理如下:
-
第 1 行到第 3 行
app_server
定義了一個(gè)稱為NGINX 將代理請求的服務(wù)器集群。請求被重定向到位于 的 Unix socket file/home/fastapi-user/fastapi-nginx-gunicorn/run/gunicorn.sock
。設(shè)置fail_timeout=0
告訴 NGINX 不要將服務(wù)器視為失敗,即使它沒有響應(yīng)。 -
第 1 行到第 5 行定義了 NGINX 將用于處理請求的虛擬服務(wù)器的配置。在本例中,它偵聽端口 80。將 XXXX 替換為 IP 或站點(diǎn)名稱。
-
第 12 行和第 13 行指定
keepalive_timeout
設(shè)置客戶端可以保持持久連接打開的最長時(shí)間,并client_max_body_size
設(shè)置 NGINX 允許的客戶端請求正文的大小限制。 -
第 15 行和第 16 行指定 NGINX 將寫入其訪問和錯(cuò)誤日志的位置。
-
第 18 至 27 行定義了 NGINX 將如何處理對根目錄的請求
/
。您提供一些規(guī)范來處理標(biāo)頭,并設(shè)置一個(gè)指令來將請求代理到您app_server
之前定義的。
通過運(yùn)行以下命令從文件創(chuàng)建符號(hào)鏈接來啟用站點(diǎn)配置sites-available
:sites-enabled
sudo ln -s /etc/nginx/sites-available/fastapi-app /etc/nginx/sites-enabled/
測試配置文件是否正常并重啟NGINX:
sudo nginx -tsudo systemctl restart nginx
如果一切順利,現(xiàn)在您應(yīng)該能夠從瀏覽器或使用curl
. 您應(yīng)該再次看到以下輸出:
{"message":"It's working!"}
您現(xiàn)在應(yīng)該已經(jīng)運(yùn)行了 FastAPI 應(yīng)用程序,并且 Gunicorn+Uvicorn 作為 ASGI 服務(wù)器,NGINX 在它們前面作為反向代理。
7.1、權(quán)限錯(cuò)誤
如果出現(xiàn)權(quán)限錯(cuò)誤,表示NGINX無法訪問Unix socket,您可以將用戶 www-data(通常是NGINX進(jìn)程運(yùn)行的用戶)添加到fastapi-user組中。您可以使用以下命令:
sudo usermod -aG fastapi-user www-data
如果您還沒有為API應(yīng)用購買域名,則不需要往下閱讀了。如果您已經(jīng)有域名,請繼續(xù)執(zhí)行下一步以獲取SSL證書并啟用HTTPS。
八、使用 Certbot 獲取免費(fèi) SSL 證書
這僅適用于您希望為其獲取SSL證書的域名。如果您使用的是Ubuntu,則可以跳過此步驟。否則,您首先需要安裝snapd:
sudo apt install snapd
接下來,確保您擁有最新可用版本:
sudo snap install core; sudo snap refresh core
安裝Certbot并確保certbot
命令可執(zhí)行:
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
接下來,通過以交互方式運(yùn)行以下命令為您的域名生成證書:
sudo certbot --nginx
最后,Certbot將自動(dòng)處理您證書的續(xù)訂。要測試它是否有效,請運(yùn)行以下命令:
sudo certbot renew --dry-run
如果一切順利,您應(yīng)該會(huì)看到 Congratulations, all simulated renewals succeeded… 消息。
現(xiàn)在,您應(yīng)該能夠通過HTTPS成功發(fā)送請求。
九、結(jié)論
本篇文章介紹了如何使用 NGINX、Gunicorn 和 Uvicorn 來部署 FastAPI 應(yīng)用程序。FastAPI 是最流行的 Python Web 框架之一。它已成為部署機(jī)器學(xué)習(xí)驅(qū)動(dòng)的 Web 應(yīng)用程序的首選,因此你希望持續(xù)關(guān)注AI領(lǐng)域,并希望能做一定的應(yīng)用開發(fā)實(shí)踐,熟悉它還是挺有幫助的。
在這篇文章中您了解到:
-
為什么以及何時(shí)應(yīng)該使用 FastAPI、NGINX、Gunicorn 和 Uvicorn。
-
如何設(shè)置 Gunicorn+Uvicorn 作為 ASGI 服務(wù)器。
-
如何使用Supervisor來運(yùn)行Gunicorn。
-
如何使用 certbot 配置 NGINX 并生成免費(fèi)的 SSL 證書。文章來源:http://www.zghlxwxcb.cn/news/detail-745061.html
如果你對這篇文章感興趣,而且你想要了解更多關(guān)于AI領(lǐng)域的實(shí)戰(zhàn)技巧,可以關(guān)注「技術(shù)狂潮AI」公眾號(hào)。在這里,你可以看到最新最熱的AIGC領(lǐng)域的干貨文章和案例實(shí)戰(zhàn)教程。文章來源地址http://www.zghlxwxcb.cn/news/detail-745061.html
到了這里,關(guān)于FastAPI + NGINX + Gunicorn:一步一步教你部署一個(gè)高性能的Python網(wǎng)頁應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!