使用Gunicorn和Nginx在Azure上部署Django应用时如何解决502错误网关

tmb3ates  于 2022-12-20  发布在  Go
关注(0)|答案(1)|浏览(166)

我已经尝试在Azure上部署Django应用程序一周了,我的指导老师按照我使用的完全相同的设置,他能够在Azure上部署相同的应用程序。
我已经学习了几个教程,特别是this one from Digital Ocean,我总是得到相同的结果。当我去的IP地址,我得到一个502坏网关。唯一的变化,我从教程是开放端口8000和80。我这样做是通过Azure的网络设置。
我已经尝试了教程结尾的所有故障排除建议,我已经重新启动了Gunicorn、Nginx,甚至VM。
在Azure上,我有一个运行Ubuntu 22.04的标准B1s虚拟机。我没有自定义域,只有Azure分配的静态IP。
我可以很好地在开发服务器上部署应用程序。如果我将0.0.0.0:8000绑定到gunicorn,它也会显示站点(减去样式)。
Gunicorn启动并运行。当我在启动服务后检查状态时,它显示活动的绿色。在尝试通过IP地址访问网站后,如果我再次检查Gunicorn状态,它会显示:第一个月
这是我运行sudo journalctl -fu gunicorn时得到的结果:

Dec 09 12:12:01 web-ubuntu22-vm1 gunicorn[33891]: raise HaltServer(reason, self.WORKER_BOOT_ERROR)
Dec 09 12:12:01 web-ubuntu22-vm1 gunicorn[33891]: gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
Dec 09 12:12:01 web-ubuntu22-vm1 systemd[1]: gunicorn.service: Main process exited, code=exited, status=1/FAILURE
Dec 09 12:12:01 web-ubuntu22-vm1 systemd[1]: gunicorn.service: Failed with result 'exit-code'.
Dec 09 12:12:01 web-ubuntu22-vm1 systemd[1]: gunicorn.service: Start request repeated too quickly.
Dec 09 12:12:01 web-ubuntu22-vm1 systemd[1]: gunicorn.service: Failed with result 'exit-code'.
Dec 09 12:12:01 web-ubuntu22-vm1 systemd[1]: Failed to start gunicorn daemon.
Dec  9 12:12:01 web-ubuntu22-vm1 systemd[1]: gunicorn.socket: Failed with result 'service-start-limit-hit'.
lb3vh1jj

lb3vh1jj1#

回答我自己的问题
问题是我的环境变量存储在项目的虚拟环境中。Gunicorn无法从那里访问“SECRET_KEY”。我将我的环境变量更改为存储在.env文件中,并使用django-environ包将变量导入settings.py。现在一切正常。
我的项目目录如下所示:

django-project
   ├── django-app
   ├── .env
   ├── .gitignore
   ├── django-project
   ├── manage.py
   ├── README.md
   ├── requirements.txt
   ├── static
   └── venv

如果有人遇到同样的问题,他们也可以从.bashrc导出环境变量。我认为将项目变量保存在项目目录中更干净。确保将包含环境变量的文件添加到.gitignore

相关问题