Elastic Beanstalk 预部署 Laravel 节点错误

Posted

技术标签:

【中文标题】Elastic Beanstalk 预部署 Laravel 节点错误【英文标题】:Elastic Beanstalk pre-deploy Laravel Node error 【发布时间】:2021-12-07 06:02:33 【问题描述】:

在我使用 GitHub 包之一时,在 Laravel 上部署 Elasticbean 茎的问题

https://github.com/rennokki/laravel-aws-eb

我在我的根项目中删除了 .ebextensions 和 .platform 文件夹。

当我部署并遇到错误时,我决定检查日志报告,它说这是由于 node.js

2021-10-20 10:48:34,072 [INFO] -----------------------Starting build-----------------------
2021-10-20 10:48:34,079 [INFO] Running configSets: Infra-EmbeddedPostBuild
2021-10-20 10:48:34,082 [INFO] Running configSet Infra-EmbeddedPostBuild
2021-10-20 10:48:34,086 [INFO] Running config postbuild_0_Ergnation_rowing
2021-10-20 10:48:34,103 [INFO] Command 00_copy_env_file succeeded
2021-10-20 10:48:36,241 [INFO] Command 01_install_composer_dependencies succeeded
2021-10-20 10:48:36,263 [ERROR] Command 02_install_node_dependencies (sudo npm install) failed
2021-10-20 10:48:36,263 [ERROR] Error encountered during build of postbuild_0_Ergnation_rowing: Command 02_install_node_dependencies failed
Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 573, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 273, in build
    self._config.commands)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/command_tool.py", line 127, in apply
    raise ToolError(u"Command %s failed" % name)
cfnbootstrap.construction_errors.ToolError: Command 02_install_node_dependencies failed
2021-10-20 10:48:36,266 [ERROR] -----------------------BUILD FAILED!------------------------
2021-10-20 10:48:36,266 [ERROR] Unhandled exception during build: Command 02_install_node_dependencies failed
Traceback (most recent call last):
  File "/opt/aws/bin/cfn-init", line 176, in <module>
    worklog.build(metadata, configSets)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 135, in build
    Contractor(metadata).build(configSets, self)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 561, in build
    self.run_config(config, worklog)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 573, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py", line 273, in build
    self._config.commands)
  File "/usr/lib/python3.7/site-packages/cfnbootstrap/command_tool.py", line 127, in apply
    raise ToolError(u"Command %s failed" % name)
cfnbootstrap.construction_errors.ToolError: Command 02_install_node_dependencies failed

我决定检查文件,这个文件显示

02_install_node_dependencies:
    command: "sudo npm install"
    cwd: "/var/app/staging"

看来安装node.js的方法是正确的

我已尝试“Sudo yum install -y nodejs”并再次部署,但控制台日志一直显示错误sudo npm install,即使我删除它仍然显示错误 npm 问题

02_install_node_dependencies (sudo npm install) failed
2021-10-20 11:48:45,727 [ERROR] Error encountered during build of postbuild_0_Ergnation_rowing: Command 02_install_node_dependencies failed
Traceback (most recent call last):

【问题讨论】:

【参考方案1】:

如果您使用的是 Amazon Linux 2,我建议您使用 Hooks,因为您将拥有更多控制权。

根据docs:

在 Amazon Linux 2 平台上,我们建议使用 Buildfile、Procfile、 和平台挂钩来配置和运行您的自定义代码 实例配置期间的环境实例。

您仍然可以在 .ebextensions 中使用命令和容器命令 配置文件,但它们并不容易使用。为了 例如,在 YAML 文件中编写命令脚本可能具有挑战性 从语法的角度来看

在这种情况下,在您的项目中创建以下文件

.platform/hooks/prebuild/install_node_js.sh

这是文件的内容:

#!/bin/sh

# Install  Node  alongside with the paired NPM release

if [[ ! "$(node --version)" =~ "v12" ]]; then   
    sudo yum remove -y nodejs npm

    sudo rm -fr /var/cache/yum/*

    sudo yum clean all 

    curl --silent --location https://rpm.nodesource.com/setup_12.x | sudo bash -

    sudo yum install nodejs -y
fi

就是这样,部署你的代码,你应该让 Node 启动并运行。

【讨论】:

以上是关于Elastic Beanstalk 预部署 Laravel 节点错误的主要内容,如果未能解决你的问题,请参考以下文章

在添加/删除 ENV 变量时,Elastic Beanstalk 导致我的 Rails 6 应用程序预编译资产中断

在 AWS Elastic Beanstalk 上使用 Docker 预编译资产

如何在Elastic Beanstalk容器中提供Rails应用程序的webpacked资产?

带有 Puma 和 Nginx 服务页面的 Elastic Beanstalk 上预编译资产的 Rails 4 应用程序以及旧资产链接

Python 3.4 Docker 容器中的 AWS Elastic Beanstalk container_commands

如何使用TFS 2017部署到Elastic Beanstalk?