在DigitalOcean部署Django时Gunicorn与Nginx故障求助
解决Gunicorn Worker启动失败问题(Django + DigitalOcean部署)
从你的报错信息和操作步骤来看,核心问题是Gunicorn无法正确加载Django的WSGI模块,结合你的项目结构和配置文件,我整理了几个关键修复点:
1. 修正Gunicorn Systemd配置的路径错误
你的项目结构是:
home/ USER_NAME/ projectdir/ env/ test_project/ # 包含manage.py的Django项目根目录 test_project/ # 包含wsgi.py的配置子目录 wsgi.py
你当前在gunicorn.service中设置的WorkingDirectory是/home/MY_USER_NAME/projectdir,但这个目录下并没有直接的test_project.wsgi模块(模块实际在test_project/test_project/里)。你有两种修正方式:
方式一:调整工作目录到正确的项目根
编辑/etc/systemd/system/gunicorn.service:
[Service] # 修改WorkingDirectory为包含manage.py的目录 WorkingDirectory=/home/MY_USER_NAME/projectdir/test_project # 此时ExecStart里的WSGI路径可以保持不变 ExecStart=/home/MY_USER_NAME/projectdir/env/bin/gunicorn \ --access-logfile - \ --workers 3 \ --bind unix:/run/gunicorn.sock \ test_project.wsgi:application
方式二:修正WSGI模块路径
如果不想修改工作目录,就把ExecStart中的WSGI路径改为完整模块路径:
ExecStart=/home/MY_USER_NAME/projectdir/env/bin/gunicorn \ --access-logfile - \ --workers 3 \ --bind unix:/run/gunicorn.sock \ test_project.test_project.wsgi:application
2. 修正Systemd Socket文件的路径笔误
你在步骤14中写错了socket文件路径:/etc/systemcd/system/gunicorn.socket,正确路径应该是/etc/systemd/system/gunicorn.socket(是systemd而非systemcd)。路径错误会导致socket无法创建,进而引发Gunicorn启动失败。
修正这个问题:
# 删除错误路径的文件(如果存在) sudo rm -f /etc/systemcd/system/gunicorn.socket # 重新创建正确的socket文件 sudo vim /etc/systemd/system/gunicorn.socket
粘贴正确内容:
[Unit] Description=gunicorn socket [Socket] ListenStream=/run/gunicorn.sock [Install] WantedBy=sockets.target
3. 修复文件权限问题
确保www-data组有访问项目目录的权限,避免Gunicorn因权限不足无法读取文件:
sudo chown -R MY_USER_NAME:www-data /home/MY_USER_NAME/projectdir sudo chmod -R 755 /home/MY_USER_NAME/projectdir
4. 查看详细日志定位深层问题
如果以上步骤仍未解决,查看Gunicorn的详细日志获取具体错误原因(比如模块缺失、配置错误等):
journalctl -u gunicorn.service
5. 重新加载配置并重启服务
完成修改后,重新加载Systemd配置并重启相关服务:
sudo systemctl daemon-reload sudo systemctl restart gunicorn.socket gunicorn.service sudo systemctl restart nginx
额外检查点
- 确认Django的
settings.py中已添加你的域名和IP到ALLOWED_HOSTS:ALLOWED_HOSTS = ['IP_ADDRESS', 'MY_DOMAIN', 'www.MY_DOMAIN'] - 直接测试Gunicorn启动:激活虚拟环境,进入
~/projectdir/test_project目录,运行:gunicorn test_project.wsgi:application
如果这一步报错,说明问题出在Gunicorn与Django的基础配置上,而非Systemd或Nginx。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

