我正在尝试将 Django 应用程序部署到 Elastic Beanstalk。我使用 AWS CodePipeline 作为我的 CI/CD 流程。该实例能够成功部署,但是当我单击域时,它给出了 502 网关错误。我怀疑这是来自 Gunicorn 服务器未运行。
我的环境平台是Python 3.11 Linux 2023。
我怀疑 Gunicorn 没有运行,因为由于我的 AWS CodePipeline 设置方式,它无法找到我的 WSGIPath。 AWS CodePipeline 从我的存储库中读取,该存储库有一个“node”文件夹(包含我的前端)和一个“python”文件夹(包含我的 Django 应用程序)。我的“python/.ebextensions/django.config”包含以下配置:
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: myproject.wsgi:application
我猜测我的路径设置不正确,因为“myproject”不在根级别。因此,我也尝试了以下配置:
option_settings:
aws:elasticbeanstalk:application:environment:
PYTHONPATH: "/opt/python/current/app/python:$PYTHONPATH"
DJANGO_SETTINGS_MODULE: myproject.settings
aws:elasticbeanstalk:container:python:
WSGIPath: myproject.wsgi:application
这仍然给我一个 502 错误,所以我不知道从这里继续哪里。我对如何正确设置 PYTHONPATH 以便找到“myproject”感到困惑。我找不到有关应用程序文件存储路径的文档。 '/opt/python/current/' 和 '/var/app/current' 来自我的研究。
我设法通过使用自定义 Procfile 找到了解决此问题的方法:
web: gunicorn --bind :8000 --workers 3 --threads 2 --pythonpath python myproject.wsgi:application
确保 Procfile 是根级别。