首页 > 解决方案 > 如何在 Elastic Beanstalk 上使用 Django 提供 React 应用程序?

问题描述

我曾经在 Heroku 上安装我的应用程序,它的工作方式是我有 2 个构建包。一个用于 NodeJS,一个用于 Python。Heroku 运行npm run build,然后 Django 提供文件build夹中的文件。

每次在我的 GitHub 存储库上有新推送时,我都会使用 AWS 上的 Code Pipeline 来部署我的应用程序的新版本。

由于我不知道如何npm run build在 EB 中的 python 环境中运行,所以我有一个解决方法。我运行npm run build并将其推送到我的存储库(build从 .gitignore 中删除了文件夹),然后 Django 在 EB 上提供文件。

然而,这不是最好的解决方案,我想知道是否有人知道如何运行npm run buildHeroku 可以使用他们的 NodeJS buildpack 为 EB 上的 python 应用程序执行此操作的方式。

标签: node.jsdjangoreactjsamazon-elastic-beanstalk

解决方案


所以我想出了一种对我有用的解决方案。

因为我想像 Heroku 使用 NodeJS buildpack 那样在服务器上创建我的应用程序的构建版本,所以我必须创建一个安装节点的命令,如下所示:

container_commands:
  01_install_node:
    command: "curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash - && sudo yum install nodejs"
    ignoreErrors: false

然后为了在 Python 环境 EB 上创建 react 应用程序的构建版本,我添加了以下命令:

container_commands:
  02_react:
    command: "npm install && npm run build"
    ignoreErrors: false

所以当然,在构建版本创建之后,你应该收集静态文件,所以这是我的工作配置文件最后的样子:

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: <project_name>/wsgi.py

  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: <project_name>.settings

  aws:elasticbeanstalk:container:python:staticfiles:
    /static/: staticfiles/

container_commands:
  01_install_node:
    command: "curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash - && sudo yum install nodejs"
    ignoreErrors: false

  02_react:
    command: "npm install && npm run build"
    ignoreErrors: false

  03_collectstatic:
    command: "django-admin.py collectstatic --noinput"

希望这对遇到相同问题的人有所帮助


推荐阅读