如何在 AWS 上部署 Django Rest Framework 和 React

Posted

技术标签:

【中文标题】如何在 AWS 上部署 Django Rest Framework 和 React【英文标题】:How to Deploy Django Rest Framework and React on AWS 【发布时间】:2020-04-21 16:23:38 【问题描述】:

我是部署 Django 和 AWS 的新手。所以现在我想将我的单独项目 (drf + react) 部署到 AWS。

那么如何将单独的项目部署到 AWS?

EC2 与 Elastic BeanStalk 哪个更适合这种环境?

我已经搜索了一天但我没有找到任何有用的信息并找到类似的东西但我不明白=> Deploying Separate React Frontend and Django DRF API

【问题讨论】:

Django 有很多选择。 Elastic bean talk , ECS , deployment via cloudformation on ec2 等。有很多关于 elasticbeanstalk Django 的文章 @ArunK,是的,这么多选项让我很困惑。我只是想知道我是否需要通过弹性 beantalk 部署 drf 并通过 Amplify 控制台做出反应,或者我可以部署这个单独的项目来组合一个并部署到弹性 beantalk。哪个更好以及如何做。我只看到一些初学者的文章,并没有很好地理解。如果您知道部署该案例的一些解释,我会非常喜欢它。谢谢。 【参考方案1】:

你问了一个难题。我想我可以让你轻松一点。

首先让我们看看选项的区别。

服务前端应用

选项 1:Django 服务react app

在此选项中,Django 应用程序将在路由中为您的应用程序提供服务,例如 /app/。基本上/app 的路由会加载 react 应用的 index.html。就这么简单。

为了使其工作,您需要使用npm run build 构建您的反应应用程序并将文件复制到 Django 的静态文件夹。目前很好? 选项 1 提供的好处之一,选项 2 没有,您可以将相同的域用于后端和前端,例如 www.example.com

选项 2:在 S3 中部署前端

您仍然需要使用npm run build 构建 React 应用程序,但您不会将其复制到 Django,换句话说,您不希望 Django 为您的前端应用程序提供服务,您希望 s3 服务于静态网站。此方法需要一个单独的子域或域来托管反应应用程序。

这是选项之间的唯一区别。您的前端应用程序将对 Django api 进行 api 调用,这对于两个选项都是相同的。我的首选选项是选项 2,以降低复杂性。

部署

我会选择 elasticbeanstalk,因为它很容易上手。您可以在 elasticbeanstalk 控制台中执行所有操作,从负载均衡器到 SSL、健康检查、更改 EC2 实例的 EC2 密钥对等。部署非常简单。它支持多种环境,您可以将一个 AWS 账户用于您的测试和生产环境。

【讨论】:

我正在尝试如你所说,但如何设置 mysql 您不能在同一个 elasticbeanstalk 应用程序中部署应用程序和 mysql 服务器。如何使用亚马逊 RDS。您还可以为 mysql 设置 EC2 实例 当我将 Django 部署到 eb 时,它总是显示 favicon.ico 500 Internal Server Error 并且您是否已经遇到过这种问题?我在这里问=> ***.com/questions/59623908/… 因此,如果您选择选项 1,Django 为 react 应用程序的构建版本提供服务,那么您如何在弹性 beanstalk 中创建 React 的构建版本,因为 git 不跟踪构建文件夹?我知道使用 Heroku,你有 NodeJS 和 Python 的构建包,所以他们创建了构建版本,但是你怎么能用 AWS 做到这一点呢? 当您为 elasticbeanstalk 创建部署包时,它应该包含已构建的 react 应用程序。如果您使用 ci/cd 工具构建,您可以先构建 react 应用程序,创建 Django 应用程序的 zip 文件并包含您构建的 react 应用程序。希望这会有所帮助。

以上是关于如何在 AWS 上部署 Django Rest Framework 和 React的主要内容,如果未能解决你的问题,请参考以下文章

Django-rest-auth 和 AWS - 错误 401

同一 AWS 实例上的 Django Rest Framework 和 Angular App

使用 postgres 在 AWS 上部署的 django 项目 - 如何创建数据库

如何在 AWS Elastic Beanstalk 上部署 django 频道 2.x?

如何将 Django 应用程序部署到 (AWS) 域名?

如何将 Django Fixtures 部署到 Amazon AWS