先决条件

  • Python3

  • 码头工人

  • docker-compose

设置 FastAPI 应用程序

为什么使用 Poetry 进行依赖和虚拟环境管理而不是 pip 及其等效的 python 设置

许多开发人员喜欢 Yarn 和 Npm 在 NodeJS 生态系统中提供的体验。 Poetry 为 Python 世界的开发人员提供了类似的体验。

本教程将 npm 用于依赖管理的方法与诗歌进行比较,以展示它的一些最大优势以及为什么应该使用它。

与 NodeJS 世界中的package.json文件类似,poetry 使用一个名为pyproject.toml文件的文件来指定项目的配置,并自动生成一个锁定文件来描述整个依赖树。

pyproject.toml文件如下所示;

截图 2022-08-30 at 22.44.58.png

在你的机器上设置诗歌

在您的系统中安装 python 后,您可以轻松运行

pip install poetry

对于python3

pip3 install poetry

可以通过以下方式确认安装成功

poetry --version

应用依赖和虚拟环境

安装了诗歌后,我们可以通过简单地运行以下命令来启动一个 python 应用程序

poetry init

并按照命令行提示进行操作。该命令类似于 NodeJS 生态系统中的npm init -y

应该创建一个pyproject.toml文件,您可以在其中添加依赖项(您将在项目期间使用的库)。

使用以下命令激活虚拟环境

poetry shell

最后一步是添加启动 FastAPI 应用程序的依赖项。

使用诗歌添加核心依赖项只需使用poetry add [package name即可,而添加开发依赖项则需要--dev标志。

要开始开发我们的应用程序,我们需要 fastapi 和 unicorn 作为依赖项。

poetry add fastapi uvicorn[standard] gunicorn

用uvicorn启动应用服务器

首先,我们需要创建一个名为main.py的新 python 文件,该文件将包含我们的路由以及负责实例化 FastAPI 应用程序的 app 对象。

最后,我们可以使用如下所示的命令启动应用程序;

uvicorn main:app --reload

现在您的应用程序在http://127.0.0.1:8000上运行,好消息是:FastAPI 与 Swagger 集成,文档是自动生成的,您可以通过http://127.0.0.1 检查它: 8000/文档

Dockerize FastAPI 应用程序

创建 docker 容器的第一步是指定应用程序需要运行什么、如何以及在哪个操作系统上运行,所有这些配置都驻留在名为Dockerfile的文件中。

FROM python:3.10 as python-base
RUN mkdir python_tutorial
WORKDIR  /python_tutorial
COPY /pyproject.toml /python_tutorial
RUN pip3 install poetry
RUN poetry config virtualenvs.create false
RUN poetry install 
COPY . .
CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "main:app", "--bind", "0.0.0.0:8000"]

让我们逐行跟踪文件:

第 1 行:表示基本映像(在我们的例子中是 python),我指定了 3.10 版本,您可以相应地更改它(例如 3.9、3.7、..etc)

第 2 行:让我们在容器中创建一个名为 python_tutorial 的文件夹

第 3 行:直接将创建的目录设置为我们的工作目录。(因此,下面的所有命令都将作为我们的根目录执行 w.r.t python_tutorial)

第 4 行:将包含需求的文件复制到应用程序目录。仅复制安装应用程序依赖项所需的文件,而不是直接复制应用程序中的其余文件。由于这个文件不经常更改,Docker 会检测到它并在这一步使用缓存,也为下一步启用缓存。

第 5 行:我们安装了诗歌,所以它可以用于我们的应用容器中的依赖管理

第 6 行:我们禁用容器内的虚拟环境创建,因为它仅在本地机器上需要

第 7 行:我们在容器中安装所有必需的库。

第 8 行:复制所有文件。由于这包含所有更改最频繁的代码,因此 Docker 缓存不会轻易用于此或任何后续步骤。所以,重要的是把它放在 Dockerfile 的末尾,以优化容器镜像的构建时间。

第 9 行:公开我们的应用程序以使用 gunicorn 启动应用程序。将worker设置为4,并将应用端口绑定到8000

咳咳!!!粉丝自! fan-self-sweating.gif我知道这是很多事实,所以让我们休息一下。😅

我们目录的当前结构如下所示; 截图 2022-08-30 at 23.35.12.png

为了优雅地管理我们的应用程序 docker 镜像,我们决定使用 docker-compose。使用 docker-compose,我们可以使用单个命令在同一主机上配置和启动连接到我们的应用程序的多个 Docker 容器,嘿!看起来很酷🫣

酷.gif

现在,让我们配置 docker-compose.yml

version: "3"
services:
  api:
    build: .
    image: python_tutorial
    ports:
      - "8000:8000"
    volumes:
      - .:/python_tutorial:ro

让我们看一下文件中发生了什么;

第 1 行:指定 docker-compose 的版本。

第 3 行:我们设置了一个名为 api 的服务。

第 4 → 5 行:分别指定 Docker 文件的路径和标签名称。

第 6 行:指定端口映射:

第 7 行:设置绑定挂载,以允许对应用程序进行进一步更改(开发 - 生产中不需要)

第 8 行:指定 env 文件(如果存在)

最后运行以下命令;

docker-compose up

如果您今天过得愉快,您将在终端上获得以下结果。

截图 2022-08-31 at 00.09.30.png

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐