【问题标题】:Why we need to setup AWS and POSTgres db when we deploy our app using Heroku?为什么我们在使用 Heroku 部署应用程序时需要设置 AWS 和 POSTgres db?
【发布时间】:2021-11-29 19:25:24
【问题描述】:

我正在通过观看下面的 youtube 视频构建一个 web api,直到 AWS S3 存储桶设置我理解一切正常。但他首先在本地部署所有内容,然后在确保一切正常后,他将所有静态文件传输到 AWS,对于 DB,他从 SQLdb3 切换到 POSgres。

django portfolio

我仍然不明白为什么我们需要将静态文件放到 AWS 并创建 POSTgresql 数据库,即使有来自 django 的 SQLdb3 默认数据库。我在想,如果我是唯一的管理员,并且仅从 Heroku 连接我的 GitHub 就足够了,并且每当我在 api 中更改某些内容时,只需将这些更改推送到 github master 就可以了。

为什么我们需要使用 AWS 来设置静态文件位置并设置 rds(关系数据库)并从头开始做这些事情。还是没看懂!

谁能帮忙解释一下? 谢谢

【问题讨论】:

  • 我知道我有点从中间跳入主题,但也许专业知识会很快得到它:)

标签: django postgresql api github heroku


【解决方案1】:

数据库

视频指南鼓励您从 SQLite 切换到数据库服务器(如 MySQL 或 PostgreSQL)有几个原因:

  1. SQLite 很棒,但如果您预计会有大量流量,则无法很好地扩展
  2. 如果您想将应用程序分布在多台服务器上,SQLite 将不起作用。回到 Herky,如果您使用多个 Dynos 为您的应用程序提供服务,您将遇到问题,因为每个 Dyno 将使用不同的 SQLite 数据库。如果您通过管理员编辑某些内容,它将随机发生在其中一个数据库上,从而导致不一致
  3. 某些 Django 功能在 SQLite 上不可用

SQLite 是 Django 中的默认数据库,因为它开箱即用,并且在本地/开发环境中用于原型设计非常快速且易于使用。

但是,它通常不适合生产网站。此外,虽然将 sqlite.db 文件与代码一起存储可能很诱人,例如在 git 存储库中,但它被认为是一种不好的做法,因为您的数据库可能包含敏感数据(例如密码、用户名、电子邮件等)。 )。因此,严格区分代码和数据是一种很好的做法。

另一种说法是,您的代码和数据具有不同的生命周期。您希望能够在不重新部署代码的情况下编辑数据库中的数据,并在不接触数据库的情况下更新代码。

即使您可以通过 GitHub 删除对某些文件的公开访问权限,这也不是一个好的做法,因为当您在一个有多个开发人员的团队中工作时,开发人员可能可以访问代码但不能访问生产数据,因为它通常是敏感的.如果您与 5 个人一起工作,并且每个人都有您的数据库副本,则意味着丢失或被盗的风险要高 5 倍;)

静态文件

当您在本地工作时,Django 内置的runserver 命令会为您处理 CSS、Javascript 和图像等静态资源的服务。

但是,此服务器也不是为生产使用而设计的。它在开发中运行良好,但在生产网站上会很快开始失败,这应该比您的本地版本处理更多的请求。

因此,您需要将这些静态文件托管在其他地方,而 AWS 是您可以做到这一点的地方。 AWS 将以一种非常有效的方式为您提供这些文件。如果您使用的是专用服务器,还有其他可用选项,例如使用 Nginx 配置反向代理来为您提供文件。

据我所知,您在视频中描述的进展正在将您从本地开发环境带入更高效和可扩展的生产设置。这是意料之中的,因为从非常简单的东西(SQLite,Django 的内置 runserver)开始,然后再转向更复杂和抽象的主题和工具,并不那么令人生畏。

【讨论】:

  • 这是清除迷雾的好答案 :) 但我不明白某些部分,因为我们可以将 github 设置为私有(不能公开访问 db 和静态文件)来保护一些敏感信息,而不是清楚为什么我们不能仅从 github 连接部署 api。实际上是的,当我尝试从没有 AWS 连接的 github 分支进行部署时,当我进行 AWS 连接时,我遇到了一些错误,当我进行 AWS 连接时,页面开始像他展示的那样工作。但是为什么我们仍然需要使用 AWS 或任何其他服务呢?为什么github还不够?
  • 我已经添加了关于为什么不应该将数据库与代码一起存储的说明。至于静态文件,这真的是另一回事:它们通常不敏感。只是需要以某种方式为它们提供服务,就像 Heroku 为您的应用程序的其他部分提供服务一样,您必须为此选择一些东西(AWS,在您的教程中)
  • 好的,现在明白了。我非常感谢这样一个包含很多细节的好答案。当我只使用 github 并且进行 AWS 静态文件设置和 rds 设置时,我遇到了一些错误,它开始工作。而且 AWS 在 750 小时后收费对吗?所以一个月后它会收费还是每次heroku想要连接静态文件?哪一个?如果您在这方面分享您的知识,我会很感激 :) 我不想让 pezos 变得富有 :))
  • 不客气,我知道所有这一切都会让人感到困惑。我对 AWS S3 定价并不十分熟悉,但据我所知,您将根据存储在那里的数据量(静态文件)以及 AWS 为您服务的流量付费。由于它只是一堆小的静态文件,可能不到 1 美元/月,但你应该自己看看。我自己从未使用过 Heroku,但我希望它们的定价取决于 Dyno 性能/使用时间。
  • 大部分是我自己的虚拟专用服务器(您可以在 Digital Ocean 等服务上租用便宜的)和专用服务器,因为我还想了解系统管理和开发以及 Heroku 和 AWS 服务把它从你身上拿走(这很好,我也想学)
猜你喜欢
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 2019-08-21
  • 2015-07-16
  • 1970-01-01
相关资源
最近更新 更多