Strapi部署至AWS ElasticBeanstalk(Amazon Linux 2/5.7.0)后无法启动
解决Strapi在AWS ElasticBeanstalk 5.7.0环境启动失败的问题
问题分析
从错误日志来看,启动时找不到Strapi CLI依赖,核心原因是依赖安装环境与EB运行环境不匹配,或是部署流程中存在版本冲突、文件权限异常。之前在5.6.4环境运行正常,升级到5.7.0后出现问题,大概率是平台环境变更引发的依赖兼容性问题。
解决方案
1. 移除Buildspec中手动指定Node版本的操作
EB 5.7.0的Node.js 16环境自带版本和手动安装的16.13.1可能存在路径冲突,导致依赖安装时使用错误Node版本,生成不兼容的node_modules。修改.buildspec.yml的install阶段:
version: 0.2 phases: install: runtime-versions: nodejs: 16.13.1 # 直接指定EB支持的Node版本,无需手动安装 commands: - echo node -v - node -v - echo update npm... - npm update -g npm - echo npm -v - npm -v - echo install yarn... - npm install -g yarn - echo yarn -v - yarn -v # 移除Docker相关命令:Strapi部署不需要在EB实例中运行Docker pre_build: commands: - echo Installing dependencies... - yarn build: commands: - echo Building... - yarn build post_build: commands: - echo Build completed on `date` artifacts: files: - "Procfile" - "package.json" - "yarn.lock" - "build/**/*" - "src/**/*" - "database/**/*" - "config/**/*" - "data/**/*" - "public/**/*" - "favicon.ico" - ".platform/**/*" - ".ebextensions/**/*" # 移除node_modules打包,避免环境不兼容
2. 在EB实例上重新安装生产依赖
CodeBuild环境生成的node_modules可能包含针对CodeBuild系统的二进制模块,和EB的Amazon Linux 2不兼容。改为在EB部署后安装依赖:
- 创建
.platform/hooks/postdeploy/01_install_deps.sh文件:
#!/bin/bash cd /var/app/current yarn install --production --frozen-lockfile
- 给文件添加执行权限:
chmod +x .platform/hooks/postdeploy/01_install_deps.sh
3. 修正Procfile的启动命令
确保直接调用项目本地的Strapi CLI,避免全局版本冲突:
web: ./node_modules/.bin/strapi start
4. 修复EB实例的文件权限
部署后文件权限异常可能导致Strapi无法读取依赖,添加.ebextensions/fix_permissions.config:
container_commands: 01_fix_permissions: command: "chown -R webapp:webapp /var/app/current"
5. 清理缓存重新部署
- 清理CodeBuild项目缓存(在CodeBuild控制台的项目设置中操作)
- 删除EB环境的旧应用版本,重新触发CodePipeline部署
内容的提问来源于stack exchange,提问作者Yuriy Matviyuk
相关产品推荐
相关产品推荐

