【问题标题】:How to use AWS for free hosting of a web app (Docker, Nginx, Angular, Django)?如何使用 AWS 免费托管 Web 应用程序(Docker、Nginx、Angular、Django)?
【发布时间】:2020-02-11 01:34:34
【问题描述】:

我是一个完全的初学者,刚刚完成了我的网络应用程序的第一个版本。

我正在使用 Docker、Nginx、Angular 和 Django。请注意,后端处理静态文件并使用简单的数据库进行用户注册。

我想将它部署到免费的云解决方案。我听说我可以使用 AWS Elastic Beanstalk,但发现配置和定价策略都有些复杂。

问题 谁能指导我考虑什么,甚至更好,我必须做出哪些选择才能在 AWS 上免费托管我的 Web 应用程序?

PS:我不知道我是否必须提及这一点,但如果网络应用程序吸引了令人满意的用户数量,我会调整实现,以便用户能够上传和使用我的服务自己的数据(而不是 csv 文件)。在这种情况下,我可能不得不使用其他 AWS 服务或迁移到其他云解决方案。只是说他们俩都很受欢迎!

【问题讨论】:

  • 您可以查看AWS Free Tier 中的内容。我觉得它非常有限,像 EC2 这样的核心服务将您限制为最小的实例大小,并且“免费”在一年后用完。

标签: django angular amazon-web-services docker nginx


【解决方案1】:

假设您知道如何部署到 Linux 机器,Elastic Beanstalk 对您的用例没有用处(它用于自动扩展)。我会做以下事情:

【讨论】:

  • 感谢您的回答。那么,我的数据库是转到 ECS 还是 EC2?
  • 理想情况下我会把它放在 RDS 上(在免费层中可用)。 EC2 只是一个服务器(例如安装 Ubuntu)。 ECS 适用于 docker 等容器。
  • 很好,那怎么样?我可能会在 EC2 上部署我的 2 个容器,第一个是 Nginx 服务 Angular 静态文件,而第二个是 Django 应用程序。此外,我将使用 RDS 作为我的数据库,当然也将它与 EC2 连接。这样对吗?有替代品吗?
  • 这是正确的,但您可以使用 S3 来提供 Angiular 静态文件。这意味着您可以获得 S3 的好处,它非常适合提供静态文件,并且可以使用 cloudfront 轻松添加 ssl,除非您特别需要使用 NGINX 容器。
【解决方案2】:

您可以在免费套餐(1 年)限制内轻松地在 AWS 上托管 Angular 应用程序。到目前为止,我已经使用 AWS S3 + AWS Cloudfront 托管了一些 Angular 应用程序。

AWS S3 用于托管您的静态文件。您首先执行ng serve --prod,Angular 编译器将在其中生成一个/dist 文件夹(在您的项目目录中),其中包含所有运行您所需的静态文件(即js、图像、字体等)角度应用程序。然后,您将所有静态文件上传到 AWS S3 存储桶。

AWS Cloudfront 是一种云缓存 服务。正如“缓存”一词所暗示的那样,它会缓存您的静态文件。通过在 S3 存储桶前面设置 Cloudfront 缓存,它允许您绕过免费层限制的每月 20,000 个 GET 请求 - 因为用户的 HTTP 请求将从 Cloudfront 缓存而不是直接从您的 S3 存储桶提供。 Cloudfront 免费套餐每月为您提供 200 万个 HTTP(S) 请求。

在 AWS S3 而不是 EC2 实例(P.S. Elastic beanstalk 也创建 EC2 实例)上托管的好处是您可以在 1 个免费套餐帐户中拥有多个 S3 存储桶和 Cloudfront 分配。只要保持在限制范围内,S3:2,000 个 PUT 请求,20,000 个 GET 请求; Cloudfront:200 万个 HTTPS 请求。您最终可以使用一个 AWS 免费套餐帐户托管多个应用程序。但是,如果您使用的是 EC2,则几乎只能使用 1 个实例(因为 31 天 x 24 小时 = 744 小时,比 750 小时限制少了 6 小时)。除非您将 EC2 实例设置为开启和关闭。

有很多指南演示了如何做到这一点,以下是其中的一些:

  1. Deploy an Angular with S3 and CloudFront

  2. Use S3 and CloudFront to host Static Single Page Apps (SPAs) with HTTPs and www-redirects

【讨论】:

  • 感谢您的详细回答。但是,我的数据库呢?您是否在建议的解决方案(Cloudfront 和 S3)中考虑了这一点?
  • 啊,我的错。您可以使用 AWS RDS 在 AWS 上托管数据库实例。对于您的 Django API 服务器,您可以将其托管在 AWS EC2 上 - 使用 docker,您可以轻松地部署在 EC2 linux 实例上。这是一个指南Django-Nginx-Docker Production Setup with AWS。抱歉,我从来没有托管过 Django 应用程序,因为我的同事(后端)做到了……希望这至少可以为您指明正确的方向,并帮助您确定需要哪种云服务 b/c 有这么多不同的服务使用...
  • 不错。因此,“正确”的免费解决方案是 EC2(除了数据库)和 RDS(仅数据库)。我可以分别在“每月 750 小时”和“20 GB 存储空间”的限制下免费使用两者吗?
  • 是的,毫无疑问,RDS 是独立于 EC2 的云服务,因此它们不能一起计算。
猜你喜欢
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 2014-06-28
  • 2018-06-29
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
相关资源
最近更新 更多