You need to enable JavaScript to run this app. 无虚拟环境下基于Nginx+Gunicorn部署Django的Gunicorn配置求助
优惠活动
大模型
产品
解决方案
定价
更多

无虚拟环境下基于Nginx+Gunicorn部署Django的Gunicorn配置求助

无虚拟环境适配的Gunicorn完整生产配置流程(Ubuntu 18.04 环境)

适配前提:Django项目存放路径为/home/django_project、全程不使用Python虚拟环境、已可通过手动执行gunicorn --bind 0.0.0.0:8000 myproject.wsgi正常拉起项目服务


前置校准(无虚拟环境场景必做)

这部分是常规虚拟环境教程中通常缺失的关键校验步骤:

  • 执行which gunicorn,记录返回的全局gunicorn可执行文件绝对路径(常见路径为/usr/bin/gunicorn或/usr/local/bin/gunicorn,后续系统服务配置必须使用该绝对路径,不能直接写相对的gunicorn命令,否则系统启动时会找不到程序)
  • 调整项目目录权限,避免Web运行用户读取文件被拒绝:
    • 执行sudo chown -R www-data:www-data /home/django_project,将项目目录属主设为Nginx、Gunicorn统一使用的运行用户
    • 执行sudo chmod -R 755 /home/django_project,保证程序可以正常读取项目代码、模板、静态文件内容

配置Gunicorn常驻系统服务

手动执行gunicorn启动的服务会在终端关闭、服务器重启时中断,需要通过systemd配置实现开机自启、后台常驻:

  1. 新建systemd服务文件,执行sudo nano /etc/systemd/system/gunicorn.service
  2. 将以下配置内容写入文件,注意将ExecStart行的gunicorn路径替换为之前which gunicorn查到的实际路径:
[Unit]
Description=Gunicorn Django 服务
After=network.target

[Service]
User=www-data
Group=www-data
# 指定项目根目录,和实际项目路径保持一致
WorkingDirectory=/home/django_project
# 启动参数:3个worker进程,通过本地unix socket和Nginx通信,避免对外暴露TCP端口
ExecStart=/usr/bin/gunicorn --workers 3 --bind unix:/home/django_project/gunicorn.sock myproject.wsgi:application

[Install]
WantedBy=multi-user.target
  1. 保存退出编辑器后,依次执行以下命令完成服务注册与启动:
  • sudo systemctl daemon-reload 重载系统服务配置
  • sudo systemctl start gunicorn 立即启动Gunicorn服务
  • sudo systemctl enable gunicorn 设置服务器开机时自动启动Gunicorn
  • sudo systemctl status gunicorn 检查服务运行状态,若输出中出现active (running)字样,说明服务已正常常驻运行

Nginx 反向代理对接Gunicorn

完成Gunicorn常驻配置后,需要通过Nginx把对外80端口的请求转发到Gunicorn的本地socket上:

  1. 新建Nginx站点配置文件,执行sudo nano /etc/nginx/sites-available/myproject
  2. 写入以下配置内容,将server_name字段替换为自己的站点域名或服务器公网IP:
server {
    listen 80;
    server_name 你的站点域名或公网IP;

    # 静态文件映射路径,需和Django配置文件中STATIC_ROOT的路径保持一致
    location /static/ {
        alias /home/django_project/static/;
    }

    # 媒体文件上传路径映射
    location /media/ {
        alias /home/django_project/media/;
    }

    # 动态请求转发到Gunicorn的本地socket
    location / {
        proxy_pass http://unix:/home/django_project/gunicorn.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
  1. 依次执行以下命令完成Nginx配置启用:
  • sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/ 将配置文件软链到Nginx启用目录
  • sudo rm /etc/nginx/sites-enabled/default 删除Nginx默认的测试站点,避免域名冲突
  • sudo nginx -t 校验Nginx配置语法,看到syntax is ok、test is successful的提示即可继续
  • sudo systemctl restart nginx 重启Nginx使配置生效

无虚拟环境部署的专属注意事项

  • 所有Python依赖(Django、Gunicorn、PostgreSQL驱动等)均通过全局pip安装,不要随意修改系统Python自带的内置依赖,避免影响系统本身的功能
  • 后续更新Django项目代码、升级依赖版本时,不需要激活任何环境,直接拉取代码后执行全局pip安装对应依赖,再运行sudo systemctl restart gunicorn即可使更新生效
  • 手动测试用的gunicorn --bind 0.0.0.0:8000命令仅用于功能验证,正式生产环境不要将8000端口直接对外暴露,所有外部请求统一走Nginx反向代理转发,减少安全风险
  • 若服务器上仅运行当前这一个Django项目,无虚拟环境的部署方式完全可以稳定支撑中高访问量;若后续需要在同一台服务器上运行多个Python项目,再为每个项目单独配置虚拟环境隔离即可

内容的提问来源于stack exchange,提问作者Sapna Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 15:06:06