Elastic Beanstalk环境包持久化:重启/更新后如何保留依赖库?
解决方案
方案1:使用.ebextensions配置文件实现自动部署(推荐)
这是Elastic Beanstalk官方原生支持的方案,完全适配EB的生命周期管理逻辑:
- 在你的Node.js项目根目录下创建名为
.ebextensions的文件夹 - 在该文件夹中新建后缀为
.config的YAML格式配置文件,比如命名为install_chromium.config - 在配置文件中写入安装逻辑,示例内容如下:
commands: install_chromium: command: | curl https://intoli.com/install-google-chrome.sh | bash # 根据实际系统版本补充安装缺失的依赖库,Amazon Linux 2用yum,Amazon Linux 2023换为dnf yum install -y atk at-spi2-atk cups-libs gtk3 libdrm libxkbcommon xorg-x11-server-Xvfb libXcomposite libXdamage libXrandr libXtst alsa-lib
- 将修改后的项目代码重新打包部署到EB环境即可,之后每次新实例启动、环境版本更新、实例重启时,EB都会自动执行配置中的安装命令,无需手动介入。
- 如果你使用puppeteer这类依赖Chromium的Node.js库,建议在EB控制台「配置」-「软件」-「环境属性」中添加环境变量
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true,避免重复下载内置Chromium二进制文件,直接调用系统预装的版本即可。
方案2:构建自定义AMI实现依赖持久化
如果Chromium及依赖安装耗时较长,每次实例启动执行安装会拖慢部署速度,可选择自定义镜像方案:
- 启动一个当前EB环境正在使用的基础AMI实例,通过SSH连接后手动安装好Chromium及所有需要的依赖
- 将该实例制作为自定义AMI,记录对应的AMI ID
- 在EB控制台「配置」-「容量」-「AMI ID」处填写你制作的自定义AMI ID,保存并更新环境即可
- 后续所有新启动的实例都会基于已预装依赖的镜像启动,不需要每次执行安装逻辑,启动速度更快。
注意事项
- 运行Chromium时如果出现沙箱权限报错,可在启动参数中添加
--no-sandbox --disable-setuid-sandbox,生产环境有安全要求的场景建议单独配置沙箱权限,不直接关闭沙箱。
内容的提问来源于stack exchange,提问作者Gheeroppa
相关产品推荐
相关产品推荐

