作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
Arjaan是一名高级工程师和数据科学家,负责创建关键任务, 基于python的云解决方案专注于面向国际银行和保险公司的Rasa. 他设计并教授大规模Kubernetes解决方案.
这是关于在基于django的项目中利用pydantic的系列文章的第三部分. Before we continue, 让我们回顾一下:在本系列的第一部分中, 我们主要讨论pydantic对Python类型提示的使用 简化Django设置管理. 在第二篇教程中,我们使用Docker来构建基于这个概念的web应用程序, 调整我们的开发和生产环境.
部署源代码——以及在更新后重新部署——可能是一个令人沮丧的过程,让您心碎. 在与其他部署平台建立了如此多的不良关系之后, 我很幸运能和Django和Heroku找到长久的幸福. 我想通过一个精心挑选的例子来分享我成功的秘诀.
我们想部署我们的 Django 应用程序,并确保默认情况下它是简单和安全的. Heroku通过结合效率和安全性,为我们的应用平台提供了一个无压力的关系.
我们已经做了一个样品 hello-visitor
application in part 2 在Django和pydantic系列教程中,我们讨论了我们的开发环境应该如何使用pydantic反映我们的生产环境. 这种镜像从我们的项目中移除了相当大的风险.
剩下的任务是使我们的应用程序可以在web上使用 Heroku. 注意:为了完成本教程,您必须在Heroku注册一个基本计划帐户.
Heroku is a 平台即服务,它服务于应用程序. 这些应用程序,称为应用程序,将我们的系统需求和源代码结合起来. 把我们的应用放到Heroku身上, 我们必须创建一个Heroku模块—一个结合了我们的配置的应用程序映像, add-ons, 更重要的是创建一个可部署的版本. Heroku slugs are 与Docker镜像相媲美.
Heroku 通过以下步骤完成精心安排的流程:
现在我们了解了Heroku是如何工作的以及它的基本术语, 我们将展示部署示例应用程序是多么简单.
我们需要Heroku的命令行界面 installed locally. 使用标准的snap安装使其变得简单—我们将在Ubuntu开发机器上演示这一点. Heroku文档提供了在其他平台上安装其工具集的附加步骤.
Sudo snap install——经典的英雄主义
#检查它是否有效
heroku --version
我们必须使用我们的凭据通过 authentication step:
heroku login
这将保存我们的电子邮件地址和API令牌到 ~/.netrc
file for future use.
有了Heroku, creating our app 这是部署源代码的第一步吗. 这个应用程序不仅指向我们的源代码存储库,而且还列举了我们需要的附加组件.
关于Heroku部署的一个关键注意事项是,每个应用程序必须为使用Heroku的每个人拥有一个唯一的名称. 因此,在执行这些步骤时不能使用单个示例名称. 请选择一个让您满意的名称,并将其插入本教程的指令块中. 我们的截图将列出应用程序名称为 hello-visitor
,但当您继续操作时,您唯一选择的名称将出现在这些位置.
我们使用基本的Heroku脚手架命令来创建我们的应用:
heroku apps:create
我们的应用程序需要Django项目的关系数据库,如 part 2 of our series. 我们通过Heroku浏览器界面配置所需的附加组件,步骤如下:
Once PostgreSQL 已经配置并关联到我们的应用程序, 我们可以在应用程序的配置变量中看到数据库连接字符串. To demonstrate this, 我们导航到设置,点击显示配置变量, 我们在哪里看到一个变量 DATABASE_URL
:
DATABASE_URL = postgres: / / {user}:{密码}@{主机名}:{港口}/{数据库名称}
如本系列的第1部分和第2部分所述, 我们的应用程序中固有的强大功能来自于 pydantic and 环境变量. Heroku使其配置变量在应用程序环境中自动可用, 这意味着我们的代码不需要在生产环境中进行任何更改. 我们不会详细探讨每个设置,而是将其作为练习留给您.
当我们在上面介绍Heroku时, 我们详细介绍了其管道中需要创建的关键步骤, configure, and deploy an app. 每个步骤都有包含适当设置和命令的相关文件.
我们得告诉Heroku该用哪种技术. 我们的应用程序使用Python和一组必需的依赖项,如 its requirements.txt
file. 如果我们希望应用程序使用最新的Python版本(目前默认为版本3).10.4) Heroku不需要我们明确地确定构建步骤使用哪个Python版本. 因此,我们现在将跳过显式构建配置.
Heroku的发布步骤是在部署前完成的,在我们的应用程序中有一个指定的相关命令 hello-visitor / Procfile
. 我们遵循最佳实践,创建一个单独的shell命令,列出我们想要运行的命令或依赖脚本. 赫鲁库总是会读的 hello-visitor / Procfile
文件并执行其内容.
我们在这个文件中还没有一个脚本可以引用,所以让我们创建我们的发布shell脚本, hello-visitor / heroku-release.sh
, and ask Heroku to secure 我们的部署和执行数据库迁移自动使用以下文本:
# file: hello-visitor / heroku-release.sh
cd src
python manage.py check——deploy——fail-level警告
python manage.py migrate
对于任何用户创建的shell脚本,我们必须确保它是可执行的. 下面的命令使我们的脚本在Unix发行版上可执行:
Chmod +x heroku-release.sh
现在我们已经编写了发布脚本,将其添加到应用程序中 hello-visitor / Procfile
文件,以便在发布期间运行. We create the Procfile
并增加以下内容:
# file: hello-visitor / Procfile
release: ./heroku-release.sh
在我们可以进行测试部署之前,完全配置的发布步骤只留下部署步骤定义.
我们将配置我们的应用来启动一个带有两个工作节点的web服务器.
正如我们在发布部分所做的那样, 我们将遵循最佳实践,创建一个包含部署操作的独立shell脚本. 我们将调用这个部署脚本 heroku-web.sh
然后在我们的项目根目录中创建它,包含以下内容:
# file: hello-visitor/heroku-web.sh
cd src
gunicorn hello_visitor.Wsgi——工人2——日志文件
我们通过使用以下命令更改其系统标志来确保脚本是可执行的:
chmod +x heroku-web.sh
现在我们已经创建了可执行的部署脚本,接下来更新我们的应用程序 Procfile
以便部署步骤在适当的阶段运行:
# file: hello-visitor / Procfile
release: ./heroku-release.sh
web: ./heroku-web.sh
Our Heroku app pipeline is now defined. 下一步是准备源代码使用的环境变量,因为这是按照Heroku应用程序定义屏幕的顺序进行的. 如果没有这些环境变量,我们的部署将会失败,因为我们的源代码依赖于它们.
Django需要一个秘钥, SECRET_KEY
,才能正确操作. 这个密钥将被存储, 还有其他变量, 在应用程序的相关环境变量集合中. 在完全配置环境变量之前,让我们先生成秘钥. 我们必须通过使用base64(而不是UTF-8)编码来确保该密钥中没有特殊字符。. Base64不包含非字母数字字符(如.g., +, @),当秘密作为环境变量提供时可能会导致意想不到的结果. Generate the SECRET_KEY
使用以下Unix命令:
Openssl rand -base64 70
有了这个键,我们现在可以将环境变量配置为Heroku的配置变量.
前面,我们查看了Config Vars管理面板中的数据库连接字符串. 现在我们必须导航到这个管理面板来添加变量和特定的值:
Key | Value |
---|---|
|
|
|
(使用生成的键值) |
|
|
|
|
At this point, 我们的Heroku应用程序已经配置了部署管道中的所有步骤,并设置了环境变量. 最后一个配置步骤是将Heroku指向我们的源代码存储库.
Now we ask Heroku to 将我们的应用程序与我们的GitHub存储库关联 使用说明如下:
之后,我们的仪表板应该如下所示:
现在,我们可以通过导航到手动部署部分来手动部署我们的应用, 选择我们的存储库 main
分支,并单击Deploy branch按钮.
If all goes well, 我们的部署将正确完成使用我们定义的构建和发布脚本和部署网站.
我们可以通过单击Heroku App仪表板顶部的Open App按钮来尝试部署的应用程序.
该网页将显示网站访问者的数量,每次刷新页面都会增加.
在我看来,这次部署再容易不过了. 配置步骤并不繁琐, 以及Heroku的核心构建包, 被Heroku平台亲切地呵护着, 几乎所有繁重的工作都要做吗. 更好的是,核心 Heroku Python构建包 它是开源的,并且许多其他应用程序平台都使用它吗. 因此,您在本教程中学到的方法是一种高度可转移的技能.
当我们将部署与镜像环境和动态设置管理的魔力结合在一起时, we have a stable, 独立于环境的部署,可在本地和web上工作.
遵循这种Django设置管理方法,你会得到 a single settings.py
它使用环境变量对自身进行配置.
Toptal Engineering博客向 Stephen Davidson 为了检查和测试本文中提供的代码示例.
Heroku是一个基于云的平台,托管用流行语言编写的应用程序,包括Python.
Heroku为开发人员简化了托管和部署, 甚至可以链接到源代码存储库,以实现轻松的重新部署.
Heroku和它的Python构建包使部署变得轻松. Additionally, 同样的构建包允许其他部署平台使用许多相同的Django托管和部署特性.
Arjaan是一名高级工程师和数据科学家,负责创建关键任务, 基于python的云解决方案专注于面向国际银行和保险公司的Rasa. 他设计并教授大规模Kubernetes解决方案.
世界级的文章,每周发一次.
世界级的文章,每周发一次.
Join the Toptal® community.