AWS Elastic Beanstalk部署Django+React遇WSGI模块加载失败及500错误
解决AWS EB部署Django+React的两个常见问题
我之前把Django+React项目部署到Elastic Beanstalk的时候,也踩过几乎一模一样的坑,给你一步步拆解解决办法:
问题1:Error reading /opt/python/current/app/webpack-stats.json
这个错误本质是EB的部署流程没有自动生成前端构建产物。你本地跑npm run build会生成webpack-stats.json和静态资源,但EB默认只会处理Python相关的部署步骤,不会帮你跑前端构建。
解决思路有两种,选适合你的:
方案1:本地构建后提交产物
- 本地执行
npm run build,确保项目根目录下生成了webpack-stats.json和静态文件目录(比如build/或者static/) - 检查你的
.gitignore,如果之前排除了这些文件,临时移除对应的规则(或者单独添加webpack-stats.json到git) - 提交这些文件到git,然后重新执行
eb deploy
方案2:让EB自动执行前端构建(更推荐)
在项目根目录创建.ebextensions/01_frontend_build.config文件,内容如下:
commands: 01_install_nodejs: command: | curl -sL https://rpm.nodesource.com/setup_18.x | bash - yum install -y nodejs 02_install_npm_deps: cwd: /opt/python/current/app command: npm install 03_build_frontend: cwd: /opt/python/current/app command: npm run build
这个配置会让EB在部署时自动安装Node.js、前端依赖,然后执行构建生成webpack-stats.json。
问题2:Target WSGI script '/opt/python/current/app/core/wsgi.py' cannot be loaded as Python module
这个500错误通常是WSGI路径配置、依赖缺失、权限或者Django设置问题导致的,按以下顺序排查:
1. 确认WSGI路径配置和项目结构匹配
先核对你的项目结构,假设你的结构是:
your-project/ core/ wsgi.py settings.py frontend/ manage.py requirements.txt
那EB默认的WSGI路径可能不对,需要手动指定。创建.ebextensions/02_django_config.config:
option_settings: aws:elasticbeanstalk:container:python: WSGIPath: core/wsgi.py
如果你的wsgi.py在其他目录(比如myproject/wsgi.py),把路径改成对应的即可。
2. 检查Python依赖是否完整
- 确保本地虚拟环境的依赖已经全部导出到
requirements.txt:执行pip freeze > requirements.txt,然后提交到git - 查看
eb logs里的具体错误,如果有ImportError: No module named 'xxx',说明某个依赖没在requirements.txt里,添加后重新部署
3. 修复文件权限问题
EB的运行用户(wsgi)可能没有权限读取你的Django代码文件,添加.ebextensions/03_fix_permissions.config:
commands: 01_fix_app_permissions: command: chmod -R 755 /opt/python/current/app ignoreErrors: true
4. 核对Django核心设置
- ALLOWED_HOSTS:当
DEBUG=False时,必须把EB的域名加入ALLOWED_HOSTS,比如:
测试阶段可以临时用ALLOWED_HOSTS = ['your-eb-domain.elasticbeanstalk.com', 'localhost']ALLOWED_HOSTS = ['*'],但生产环境要改回具体域名 - 静态文件配置:确保
settings.py里有:
EB默认会自动执行STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATIC_URL = '/static/'collectstatic,如果没生效,可以在config里强制开启:option_settings: aws:elasticbeanstalk:container:python: CollectStatic: true
最后验证步骤
- 把所有
.ebextensions配置文件、更新后的requirements.txt、settings.py提交到git - 执行
eb deploy重新部署 - 如果还是有错误,执行
eb logs查看具体报错信息,定位问题
内容的提问来源于stack exchange,提问作者Audi Quattro 1992
相关产品推荐
相关产品推荐

