你好,技术爱好者尼克在这里。自从我发布一篇文章以来已经有一段时间了,但是嘿,我在这里,还有一篇新文章。

因此,当您使用 FastAPI 构建了 Python 应用程序并在本地对其进行测试并对其功能感到满意后,您希望将其带到 Web 并使其可公开访问。

本地设置

在本文中,我们将引导一个简单的应用程序,然后将其提交到 Github,最后将其部署到 AWS EC2 实例。

我们首先在我们的机器上创建一个本地工作区,然后导航到桌面并创建一个文件夹hello_fastapi并使用您的代码编辑器打开它。

接下来让我们创建一个虚拟环境来保存我们的依赖项。

virtualenv env

进入全屏模式 退出全屏模式

然后使用激活它

env/Scripts/activate on windows
source env/bin/activate on linux/unix

进入全屏模式 退出全屏模式

现在我们已经建立了环境,让我们安装我们需要的东西。

pip install fastapi uvicorn gunicorn psycopg2-binary

进入全屏模式 退出全屏模式

您可以根据您的项目需要什么来添加部门以工作。

安装了 deps 后,我们创建一个包含所有这些的文件。

pip freeze > requirements.txt

进入全屏模式 退出全屏模式

接下来在项目的根目录创建一个名为main.py的文件,并将以下代码添加到其中。

import uvicorn

if __name__ == "__main__":
    uvicorn.run("app:app", host="0.0.0.0", port=8000, reload=True)

进入全屏模式 退出全屏模式

然后使用以下代码在名为app.py的根目录创建另一个文件:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

origins = ["*"]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/", tags=["Root"])
async def read_root():
    return {"message": "Welcome to the API!"}

进入全屏模式 退出全屏模式

让我们测试一下应用程序,看看它是否在我们的本地浏览器上运行良好:

通过以下方式运行服务器:

uvicorn  app:app --reload

进入全屏模式 退出全屏模式

接下来在localhost访问您的浏览器,您应该会受到

{"message":"Welcome to bills API!"}

进入全屏模式 退出全屏模式

如果一切正常,那么我们就有了一个可以工作的应用程序,我们可以继续下一部分。

版本控制

虽然仍在项目的根目录中,但我们可以发出以下命令将代码推送到 Github:

git init
git add .
git commit -m 'initial'
git remote add origin <REMOTE URL HERE>
git push -u origin master

进入全屏模式 退出全屏模式

如果一切顺利,那么您应该将您的代码上传并存储在 Github 存储库中。我们可以安全地进行下一步。

部署到 AWS EC2

这里的假设是您有一个 AWS 帐户并创建了一个在 Ubuntu 上运行的免费层 EC2 服务器。请随时在此处](https://docs.aws.amazon.com/efs/latest/ug/gs-step-one-create-ec2-resources.html)查看有关如何执行此操作的文档[。

不过,这些步骤适用于任何 Ubuntu 机器,因此如果您使用的是 DigitalOcean、Linode 或 Oracle,它应该可以正常工作。

然后让我们 ssh 进入我们的远程机器:

ssh -i 'example.pem' ubuntu@ec2-IP-ADDRESS.us-east-2.compute.amazonaws.com

进入全屏模式 退出全屏模式

进入远程机器后,我们需要安装 Python 和 NGINX。

在终端上发出以下命令:

sudo apt update
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl
sudo -H pip3 install --upgrade pip

进入全屏模式 退出全屏模式

接下来创建一个文件夹来存放我们的文件:

mkdir apiv1 && cd apiv1

然后像之前一样创建并激活一个虚拟环境。

之后在文件夹中启动 git 并从 github 中提取您的代码。

git init
git remote add origin <REPO URL>
git pull origin master

进入全屏模式 退出全屏模式

现在我们像这样安装我们的deps:

pip install -r requirements.txt

进入全屏模式 退出全屏模式

在运行本地服务器并确保没有错误报告后停用 virtualenv。

接下来,我们需要将我们的应用程序绑定到一个 gunicorn 模块,该模块用作您的应用程序的接口,将客户端请求从 HTTP 转换为您的应用程序可以处理的 Python 调用。

所以我们首先创建一个套接字文件:

sudo nano /etc/systemd/system/gunicorn.socket

进入全屏模式 退出全屏模式

向其中添加以下代码:

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

进入全屏模式 退出全屏模式

保存并关闭该文件。接下来我们创建一个服务文件:

sudo nano /etc/systemd/system/gunicorn.service

进入全屏模式 退出全屏模式

向其中添加以下代码:

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/apiv1
ExecStart=/home/ubuntu/apiv1/env/bin/gunicorn \
          --access-logfile - \
          --workers 5 \
          --bind unix:/run/gunicorn.sock \
          --worker-class uvicorn.workers.UvicornWorker \
          app:app

[Install]
WantedBy=multi-user.target

进入全屏模式 退出全屏模式

保存并关闭。

接下来启动 Gunicorn 套接字:

sudo systemctl start gunicorn.socket

进入全屏模式 退出全屏模式

然后通过以下方式启用它:

sudo systemctl enable gunicorn.socket

进入全屏模式 退出全屏模式

现在 Gunicorn 已经设置好了,接下来我们将配置 Nginx 以将流量传递给进程。

首先在 Nginx 的站点可用目录中创建并打开一个新的服务器块:

sudo nano /etc/nginx/sites-enabled/api

进入全屏模式 退出全屏模式

向其中添加以下行:

server {
    listen 80;
    server_name server_domain_or_IP;
    location / {
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

进入全屏模式 退出全屏模式

也保存这个文件。通过以下方式测试配置是否正常:

sudo nginx -t

进入全屏模式 退出全屏模式

如果一切顺利,那么我们需要重新启动服务,然后继续:

sudo systemctl daemon-reload
sudo systemctl restart gunicorn
sudo systemctl restart nginx

进入全屏模式 退出全屏模式

最后一步是确保您已通过实例的安全组部分的port 80允许HTTP访问。如果您的应用程序的服务超过HTTPS,则对port 443执行相同的操作。

如果上述所有操作都完成,那么转到您实例的公共 IP 地址或域,希望您会看到您的应用程序显示在那里。

包起来

就是这样,伙计们,如果你在这里成功,那么对你来说是一个巨大的呐喊!

今天我们使用FastAPI构建了一个简单的 Python 应用程序,并将其部署到 AWS 提供的 EC2 Ubuntu 服务器上。

如果您觉得这有帮助,请通过点赞、评论或分享来表达爱意。您也可以在Twitter上关注我或访问我的网站。

谢谢你,直到下一次!

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐