【问题标题】:Failed to install Puppeteer and Chromium with Bit-bucket's pipeline to AWS Elastic Beanstalk使用 Bit-bucket 的管道将 Puppeteer 和 Chromium 安装到 AWS Elastic Beanstalk 失败
【发布时间】:2020-10-25 18:39:13
【问题描述】:
我使用 Bitbucket 的管道将 Node.js express 部署到 AWS Elastic beanstalk。
代码包括安装Puppeteer v5.0.0
安装时会下载 Chromium。
下载 Chromium 时由于访问权限导致部署失败,见下图:
错误:无法下载 Chromium r756035!设置“PUPPETEER_SKIP_CHROMIUM_DOWNLOAD”环境变量以跳过下载。
错误:EACCES:权限被拒绝,mkdir
'/tmp/deployment/application/node_modules/puppeteer/.local-chromium'
如何设置权限以使安装成功完成?
【问题讨论】:
标签:
node.js
amazon-elastic-beanstalk
puppeteer
bitbucket-pipelines
【解决方案1】:
只需在 nodeAPP 的根目录中添加 .npmrc 文件,其中包含以下内容:
unsafe-perm=true
这将强制 NPM 尝试始终在运行脚本的上下文中运行。所以你不会被'permission denied'屏蔽
【解决方案2】:
GitHub 存储库维护@https://github.com/amarinediary/Marionette。以下内容可能不是最新的。有关维护版本,请参阅 GitHub 链接。
您可以将 AWS Elastic Beanstalk 配置文件 (.ebextensions) 添加到 Web 应用程序的源代码中,以配置您的环境并自定义其中包含的 AWS 资源。
在我们的例子中,如果我们不启用 EPEL 并且如果我们继续安装 Chromium 作为 npm install 的一部分,Puppeteer 将无法启动 Chromium,因为 libatk-1.0.so.0 不可用。
修补程序
将以下内容添加到您的应用根目录:
- 创建一个
.npmrc 文件。
- 将以下内容添加到您的
.npmrc 文件中:
unsafe-perm=true
.npmrc 文件定义了 npm 在运行命令时的行为方式。将unsafe-perm 设置为true 会在运行包脚本时抑制UID/GID 切换。设置 unsafe-perm 标志以使用 root 权限运行脚本。
- 创建一个
.ebextensions 文件夹。
- 在
.ebextensions 文件夹中,创建一个01_enableEPEL.config 文件并添加以下内容。
commands:
01_enableEPEL:
command: sudo amazon-linux-extras install epel -y
- 在
.ebextensions 文件夹中,创建一个02_installEPELPackages.config 文件并添加以下内容
packages:
yum:
chromium: []