星期四

如何在Heroku上免费部署FastAPI应用

 

介绍

Heroku是一个云平台即服务(PaaS),支持Ruby on Rails,Java,Node.js,Scala,Clojure,Python,PHP和Go。Heroku的免费版本每月提供550–1000 dyno小时。如果没有人使用您的应用程序,则您的应用程序会在30分钟后进入休眠状态。如果您的每月动态小时数在限制范围内,则您的应用程序将始终免费。

Dynos是Heroku平台上的隔离虚拟Linux容器。

在本文中,您将了解设置和运行FastAPI项目并使其在Heroku上24/7处于活动状态是多么容易。

我立方米[R rently主办本FastAPI网站Heroku的作为演示

GIT

我使用Gitstart自动执行Git初始化。从您的终端运行git init添加.gitignore和自述文件并提交一条消息。这会在Github中创建一个新的仓库,它将推送所有文件。

$ mkdir my_new_project 
$ cd my_new_project
$ gitstart

设置您的Heroku帐户

个人帐户每月有550个免费动态小时基础。除了这些基本时间之外,使用信用卡验证的帐户[1]将获得每月免费dyno配额增加的450小时[2]

您需要将SSH密钥添加到Heroku。[3]
安装Heroku CLI [4],
然后从您的终端登录到Heroku并创建一个Heroku应用程序:

$ heroku登录
$ heroku创建
heroku创建输出。图片由作者提供。

您可以将自定义域添加到您的Heroku应用。[5]

如何在Heroku上为FastAPI创建require.txt

Heroku需要requirement.txt安装Python软件包。pipreqs[6]根据您项目中的导入生成它。

$ pip install pipreqs 
$ cd my_new_project
$ pipreqs ./#
如果您已经具有
require.txt $ pipreqs --force ./

由于pipreqs是基于生成的,因此import您需要requirements.txt手动添加以下内容

uvicorn == 0.12.3 
aiofiles == 0.6.0
python-multipart == 0.0.5
jinja2 == 2.11.2

您需要uvicorn在Heroku上启动ASGI服务器。您需要aiofiles静态文件。如果您的项目具有表单,请添加python-multipart如果您的项目使用模板引擎,请添加jinja2

runtime.txt

Heroku使用默认的Python版本。为了使用特定的Python版本,请在runtime.txt您的Python版本中添加例如:

python-3.8.6

程序文件

Heroku需要Procfile。

如果您在app目录中有main.py ,请添加以下内容:

网址:uvicorn app.main:app --host = 0.0.0.0 --port = $ {PORT:-5000}

如果main.py在根目录中:

网址:uvicorn main:app --host = 0.0.0.0 --port = $ {PORT:-5000}

环境变量

Heroku不使用.env文件。而是将.env文件中的值添加到Config Vars。您可以在“设置”标签下找到它。

将环境变量添加到Config Vars。图片由作者提供。

如何上传到Heroku

现在您可以将项目推送到Heroku了:

$ git push heroku main 
$ heroku open

heroku open命令在浏览器中打开您的项目。

git在终端上推送heroku main。图片由作者提供。

如何添加子域

我正在使用Cloudflare,这是我必须要做的。

选择CNAME作为类型。添加您的子域名作为名称。为内容添加您的Heroku域。您的Heroku域名类似于serene-example-4269.herokuapp.com。

下图显示了如何添加toolbox.mywebsite.com子域。

向Cloudflare添加子域。

如何使您的应用保持活动状态24/7

闲置30分钟后,Heroku应用程序进入空闲状态。您可以使用找到您的应用程序流程heroic ps

heroku ps输出显示为空闲。图片由作者提供。

您可以在最后一行找到“ idle”。

这是我的其他应用程序进程状态,显示为“启动”。

heroku ps输出显示出来。图片由作者提供。

cron-job.org [8]和Kaffeine [9]提供免费服务。两者都按计划的时间访问您的URL。

cron-job.org

您可以通过添加URL和执行计划来创建cronjob。

cron-job.org Cronjobs标签。图片由作者提供。

对于您的cronjob,您需要选择每15分钟一次。如果您每30分钟设置一次,则可能会延迟5到15秒。

选择每30分钟进行一次cronjob。图片由作者提供。

您可以轻松地编辑或删除cronjob。

如何修复失败的Cron作业

您的cron作业可能无法告诉“响应数据太大”或“输出太大”。

图片作者

cron-job.org从您的URL /脚本接受最多4 kB的响应数据。要解决此问题,您可以创建一个返回JSON字符串而不是HTML页面的终结点。

咖啡因

Kaffeine每隔30分钟会ping您的Heroku应用程序一次,因此它永远不会进入睡眠状态。

咖啡因网站。

如何从咖啡因中删除您的应用程序

网站中的链接无效,但是如果您单击下面的链接,该链接对我有用。

http://kaffeine.herokuapp.com/#decaf

从咖啡因中删除您的应用程序。

如何重命名您的应用

$ heroku apps:重命名new_app_name

重命名应用程序时,请不要忘记更新您的cron作业

如何SSH到Heroku

您可能要SSH到Heroku。heroku ps:exec做到这一点。

$ heroku ps:exec
建立凭据...完成
在⬢demo-desuyo上连接到web.1 ...
〜$

结论

Heroku为您的项目提供最多1000个小时的免费托管,其使用的RAM不足512MB。您可以使用您的域名。如果您需要自定义域上的SSL,则需要升级到Hobby层。

cron-job.org和Kaffeine提供cronjob来访问您的URL以避免睡觉。


没有评论:

发表评论

旋转的旧记忆