为什么我们在使用 Heroku 部署应用程序时需要设置 AWS 和 POSTgres 数据库?

Why we need to setup AWS and POSTgres db when we deploy our app using Heroku?

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

django portfolio

我仍然不明白这部分为什么我们需要将我们的静态文件放到 AWS 上并创建 POSTgresql 数据库,即使有一个来自 django 的 SQLdb3 默认数据库。我在想,如果我是唯一的管理员,只需从 Heroku 连接我的 GitHub 就足够了,任何时候我在 api 中更改某些内容只需将这些更改推送到 github掌握,应该就是这样。

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

谁能帮忙解释一下? 谢谢

数据库

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

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

SQLite 是 Django 中的默认数据库,因为它开箱即用,并且在 local/development 原型制作环境中速度极快且易于使用。

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

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

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

静态文件

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

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

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

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