天天看點

FastAPI 的常用項目部署方法

作者:NeilTai

Fast API 是一款常用的輕量級“接口架構”,可以幫助我們輕松建構一套 APP 或 Web 應用的接口服務。

本文不對 Fast API 的開發使用進行詳細講解,僅對如何在生産環境進行部署進行講解和說明。部署環境為 ubuntu 20.04 +

第一步:部署項目代碼

# 假設需要将項目部署在 /var/www 目錄中
$ cd /var/www/
# 假設您的代碼被托管在 github 上
$ sudo git clone https://github.com/your-git-account/your-app.git           

第二步:為項目建構 python 虛拟運作環境

# 安裝 python 虛拟運作環境
$ sudo apt install python3-virtualenv
# 也可以使用以下指令,前提是您的系統已經正常安裝了 python3 & pip
$ pip3 install virtualenv

# 進入項目目錄
$ cd /var/www/your-app
# 建立項目的虛拟運作環境
$ python3 -m virtualenv venv
# 進入項目的虛拟運作環境
$ . venv/bin/activate
# 如果您想退出虛拟環境
$ deactivate           

第三步:在虛拟環境中,安裝項目依賴

# 通常情況下,python 項目的依賴包會寫在項目的 requirements.txt 中
# 確定您目前的項目目錄已經激活了虛拟運作環境
(venv) $ pip install -r requirements.txt           

第四步:安裝用于接口架構運作的 WSGI 元件

# Gunicorn 是一個 Python 的 WSGI HTTP 伺服器
# Gunicorn所在的位置通常是在反向代理(如本文使用的 Nginx)和一個 web 應用(如本文使用的 your-app 項目)之間
(venv) $ pip install gunicorn uvicorn           

第五步:安裝 nginx

$ sudo apt install nginx-server           

第六步:編輯 nginx 站點配置檔案

# 1. 使用 vim 編輯器建立一個站點配置檔案
$ sudo vim /etc/nginx/sites-available/your-app


# 2. 檔案内容如下
# 假設項目運作在端口 9999 上
server{
       server_name your-app.your-domain.com;
       location / {
           include proxy_params;
           proxy_pass http://127.0.0.1:9999;
       }
}

# 3. 将項目站點的配置檔案指向工作目錄
$ sudo ln -s /etc/nginx/sites-available/your-app /etc/nginx/sites-enabled/

# 4. 重新開機 nginx 服務
$ sudo systemctl restart nginx.service           

第七步:讓 Gunicorn 在背景運作

# 建立一個系統服務的配置檔案
$ sudo vim /etc/systemd/system/your-app.service

# 檔案的内容如下
[Unit]
Description=Gunicorn instance to serve my-app
After=network.target

[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/var/www/my-app
Environment="PATH=/var/www/my-app/venv/bin"
# 注意需要指定上文約定好的端口号 9999 并執行您項目實際的入口檔案,fastapi 中通常是 main:app
ExecStart=/var/www/myapp/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:9999 main:app

[Install]
WantedBy=multi-user.target           

第八步:啟動項目(停止、重新開機)

# 啟動項目
sudo systemctl start my-app.service
# 或者重新開機項目
sudo systemctl restart my-app.service
# 或者停止項目運作
sudo systemctl stop my-app.service           

接下來就可以使用 your-app.your-domain.com/docs 來檢視您的接口文檔了

後續,我們将繼續講解如何讓您的接口支援 https 通路

繼續閱讀