软件安装

安装Python

1
2
sudo apt update
sudo apt install python3.12 python3.12-venv -y

安装Supervisor和NGINX

1
sudo apt install supervisor nginx -y

启用Supervisor

1
2
sudo systemctl enable supervisor
sudo systemctl start supervisor

设置 FastAPI 应用程序

一般使用git拉取代码

1
git clone https://github.com/dylanjcastillo/fastapi-nginx-gunicorn

创建一个虚拟环境并激活它:

1
2
3
cd /home/fastapi-user/fastapi-nginx-gunicorn
python -m venv .venv
source .venv/bin/activate

安装依赖

  • 对于一般项目,使用 requirements.txt 文件中指定的依赖项安装所需的软件包:

    1
    pip install -r requirements.txt
  • 或对于src架构的项目,执行可编辑安装

    1
    pip install -e .

验证程序,良好的项目应该可以用 pytest 验证

配置Gunicorn

设置Gunicorn

首先,在项目目录中创建一个名为 gunicorn_start 的文件:

1
vim gunicorn_start

然后,将以下内容添加到文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/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
TIMEOUT=15

cd $DIR
source $VENV

exec gunicorn app.server:app \
--name $NAME \
--workers $WORKERS \
--worker-class $WORKER_CLASS \
--user=$USER \
--group=$GROUP \
--bind=$BIND \
--log-level=$LOG_LEVEL \
--timeout $TIMEOUT \
--log-file=-

保存并关闭文件。然后,通过运行以下命令使其可执行:

1
chmod u+x gunicorn_start

最后,在项目目录中创建子目录 run,用于存储您在参数中定义的Unix套接字文件BIND,

创建子目录 log,用于存储日志

1
2
mkdir run
mkdir logs

配置Supervisor

接下来,通过运行以下命令创建Supervisor的配置文件:

1
sudo vim /etc/supervisor/conf.d/fastapi-app.conf

复制并粘贴以下内容到文件中:

1
2
3
4
5
6
7
[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

重新加载Supervisor配置并重启服务,通过运行以下命令:

1
2
sudo supervisorctl reread
sudo supervisorctl update

最后,您可以通过运行以下命令检查程序的状态:

1
sudo supervisorctl status fastapi-app