You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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里有:
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    STATIC_URL = '/static/'
    
    EB默认会自动执行collectstatic,如果没生效,可以在config里强制开启:
    option_settings:
      aws:elasticbeanstalk:container:python:
        CollectStatic: true
    

最后验证步骤

  1. 把所有.ebextensions配置文件、更新后的requirements.txt、settings.py提交到git
  2. 执行 eb deploy 重新部署
  3. 如果还是有错误,执行 eb logs 查看具体报错信息,定位问题

内容的提问来源于stack exchange,提问作者Audi Quattro 1992

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:01:50