Node.js 如何在弹性豆茎上使用Django提供React应用程序?
我以前在Heroku上有我的应用程序,它的工作方式是我有2个构建包。一个用于NodeJS,一个用于Python。Heroku运行了Node.js 如何在弹性豆茎上使用Django提供React应用程序?,node.js,django,reactjs,amazon-elastic-beanstalk,Node.js,Django,Reactjs,Amazon Elastic Beanstalk,我以前在Heroku上有我的应用程序,它的工作方式是我有2个构建包。一个用于NodeJS,一个用于Python。Heroku运行了npm运行build,然后Django从build文件夹中提供了文件 每次在GitHub存储库上有新的推送时,我都使用AWS上的代码管道来部署我的应用程序的新版本 由于我不知道如何在EB中的python环境中运行npm run build,所以我有了一个解决方法。我运行了npm run build并将其推送到我的存储库中(从.gitignore中删除了build文件夹
npm运行build
,然后Django从build
文件夹中提供了文件
每次在GitHub存储库上有新的推送时,我都使用AWS上的代码管道来部署我的应用程序的新版本
由于我不知道如何在EB中的python环境中运行npm run build
,所以我有了一个解决方法。我运行了npm run build
并将其推送到我的存储库中(从.gitignore中删除了build
文件夹),然后Django将文件发送到了EB上
然而,这并不是最好的解决方案,我想知道是否有人知道如何运行
npm run build
,就像Heroku使用他们的NodeJS buildpack在EB上运行python应用程序一样。我不太了解python,但我想你可以适应你的情况
Node.js平台的Elastic Beanstalk默认使用app.js
,然后使用server.js
,然后使用npm start
(按该顺序)启动应用程序
您可以使用配置文件更改此行为。下面是使用Node.js完成的步骤:
.ebextensions/.config
:
option_settings:
aws:elasticbeanstalk:container:nodejs:
NodeCommand: "npm run eb:prod"
# Force npm to run node-gyp also as root
unsafe-perm=true
package.json
以创建eb:prod
命令。例如:
"scripts": {
"start": "razzle start",
"build": "razzle build",
"test": "razzle test --env=jsdom",
"start:prod": "NODE_ENV=production node build/server.js",
"eb:prod": "npm run build && npm run start:prod"
}
.npmrc
文件:
option_settings:
aws:elasticbeanstalk:container:nodejs:
NodeCommand: "npm run eb:prod"
# Force npm to run node-gyp also as root
unsafe-perm=true
如果你需要更多的细节,我写了一篇关于它的博客:所以我想出了一个适合我的解决方案 因为我想在服务器上创建我的应用程序的构建版本,就像Heroku使用NodeJS buildpack那样,所以我必须创建一个命令来安装node,如下所示:
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"
选项设置:
aws:elasticbeanstalk:container:python:
WSGIPath:/wsgi.py
aws:elasticbeanstalk:应用:环境:
DJANGO\u设置\u模块:。设置
aws:elasticbeanstalk:container:python:staticfiles:
/static/:staticfiles/
容器命令:
01\u安装\u节点:
命令:“curl-sL”https://rpm.nodesource.com/setup_12.x |sudo bash-&&sudo yum安装nodejs“
忽略错误:错误
02_反应:
命令:“npm安装和npm运行生成”
忽略错误:错误
03_静态:
命令:“django-admin.py collectstatic--noinput”
希望这能帮助任何遇到同样问题的人,谢谢你的回答。我使用Python不仅为react应用程序提供服务,还用于API和身份验证。为了使用Python和Django框架,我必须使用EB for Python。所以我想知道是否有可能在我的pythoniceb中构建我的react应用程序的生产版本。必须使用
.ebextensions
自定义命令才能启动应用程序。要了解如何编辑配置文件,请执行以下操作: