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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:45:38