FastAPI如何区分多环境:开发/测试/预发布/生产环境

1 缘起

开始用FastAPI开发项目,
区分环境是部署的第一步,因此,需要区分dev/test/pre/prod等环境,
而FastAPI刚好提供了读取环境配置文件的参数,可以在启动服务时指定环境配置文件的路径,
参数为env_file,读取env_file的模块为python-dotenv,
需要手动安装:

pip install python-dotenv

有两种使用方式:
(1)run方法中配置:env_file=file_path
(2)Docker中使用:"--env-file", "file_path"
分享如下,帮助需要使用FastAPI开发的读者轻松应对环境划分。

2 应用

2.1 添加环境文件

deploy/dev.env
在这里插入图片描述

  • 文件内容
    格式:key = value
    读取到的数据都是str类型,因此,int类型的数据记得转换,
    如果value为空字符串,读取到的数据为None,因此,只需校验None。
REDIS_HOST = "192.168.179.128"
REDIS_PORT = 6379

2.2 配置环境参数

使用启动参数:env_file,配置文件路径

if __name__ == "__main__":
    env_file_path = "deploy/prod.env"
    uvicorn.run(host="0.0.0.0", port=8000, app="main:app", reload=True, env_file=env_file_path)

2.3 如何获取配置的内容

import os

REDIS_HOST = os.getenv("REDIS_HOST")
REDIS_PORT = int(os.getenv("REDIS_PORT"))

3 原理

3.1 启动方法run

uvicorn启动方法run的参数有很多,源码如下图所示,
找到我们需要的env_file,用于配置环境文件路径。
位置:uvicorn.main.run
在这里插入图片描述
当env_file不为空时,读取env_file的方法为:load_dotenv
在这里插入图片描述

load_dotenv的方法源码如下,通过源码可知,
具体的读取逻辑实在方法:set_as_environment_variables中。
位置:dotenv.main.load_dotenv

在这里插入图片描述

set_as_environment_variables方法源码如下图所示,
由源码可知,从env_file获取的数据通过os.environ写入环境配置,
因此,可以通过os.getenv(key_name)获取对应的值。

位置:dotenv.main.DotEnv.set_as_environment_variables
在这里插入图片描述

4 小结

(1)FastAPI提供的启动参数众多,包括环境配置,通过参数env_file传入,如果是Dockerfile,则使用–env_file传参;
(2)读取env_file文件的模块为python-dotenv;
(3)获取的数据均为string类型,如有其他类型的数据,注意转换数据类型。

猜你喜欢

转载自blog.csdn.net/Xin_101/article/details/130474481