《Django 项目部署实战:Gunicorn+Nginx 全流程(含 Windows 踩坑解决)》
一、前言:为什么要做Django部署?
刚学Django时,我只会用`python manage.py runserver`启动项目,但这只是开发环境专用的调试服务器,存在三大致命问题:
- 不支持高并发,仅能承载少量测试请求 - 安全性差,`DEBUG=True`模式会泄露项目源码和敏感信息
- 无法处理静态文件,生产环境性能拉胯 行业内Django生产环境的标准方案是 **Gunicorn + Nginx** 架构,两者分工明确:
| 组件 | 核心作用 | |------|----------|
| Gunicorn | Python WSGI应用服务器,负责运行Django项目,处理业务逻辑 |
| Nginx | 高性能反向代理服务器,负责接收用户请求、转发动态请求、处理静态文件、安全防护 |
本文将从零带你完成Django项目部署,全程附操作截图,同时解决Windows环境下的兼容性坑, -
二、环境前置准备
1. 开发环境说明 - 操作系统:Windows 10
- Python版本:3.14.3
- Django版本:6.0
- 项目目录:`D:\Code\djangotutorial`(项目名`mysite`)
2. 核心依赖安装
首先安装Gunicorn,直接在终端执行: ```bash pip install gunicorn ```
执行成功后会显示`Successfully installed gunicorn-25.3.0`,
如下图: 
三、Django项目初始化
1. 创建Django项目 在终端中切换到目标目录,执行项目创建命令: ```bash # 切换到D盘Code目录 D: cd Code
创建项目 django-admin startproject mysite djangotutorial ``` 执行后会生成如下目录结构: ``` djangotutorial/ ├── manage.py # 项目管理入口 └── mysite/ # 项目核心配置目录 ├── __init__.py ├── asgi.py ├── settings.py # 项目配置文件 ├── urls.py └── wsgi.py # WSGI入口,Gunicorn依赖 ```
2. 进入项目根目录 后续所有Django相关命令,都必须在`manage.py`所在目录执行: ```bash cd djangotutorial ```
四、静态文件配置与收集(核心步骤)
1. 配置STATIC_ROOT 打开`mysite/settings.py`文件,首先确保顶部导入`os`模块(新手最容易漏的步骤),然后在文件中添加静态文件收集目录配置: ```python # 顶部添加os导入 import os from pathlib import Path # 找到STATIC_URL,在下方添加 STATIC_URL = 'static/' # 新增:静态文件收集根目录 STATIC_ROOT = os.path.join(BASE_DIR, 'static') ```
注意:如果不导入`os`,执行收集命令时会报`NameError: name 'os' is not defined`错误,对应你之前的报错截图。
2. 执行静态文件收集 在项目根目录执行命令: ```bash python manage.py collectstatic ``` 终端会提示`You have requested to collect static files...`,输入`yes`回车确认,执行成功后会显示: ``` 127 static files copied to 'D:\Code\djangotutorial\static'. ``` (此处插入你静态文件收集成功的终端截图)
五、Gunicorn启动与Windows踩坑解决
1. Gunicorn启动测试 在项目根目录执行启动命令: ```bash gunicorn mysite.wsgi:application --bind 127.0.0.1:8000 ```
2. Windows兼容性坑解决 此时Windows环境下会直接报错: ``` ModuleNotFoundError: No module named 'fcntl' ```
错误原因:`fcntl`是Linux系统专属的底层文件控制模块,Windows系统没有该模块,因此Gunicorn原生不支持Windows环境。 作业通关解决方案: 由于是课程作业,无需强制在Windows上运行Gunicorn,直接采用Django自带的`runserver`完成演示,同时在博客中说明兼容性问题:
注:本次开发环境为Windows系统,Gunicorn依赖的`fcntl`模块仅适用于Linux,存在平台兼容性限制。因此本作业在本地验证阶段,采用Django自带的`runserver` WSGI服务器进行功能演示,该方案符合WSGI规范,能够验证全流程业务逻辑。
3. Django项目启动验证 执行启动命令: ```bash python manage.py runserver ``` 终端显示启动成功后,打开浏览器访问`http://127.0.0.1:8000`,即可看到Django默认欢迎页: (此处插入你浏览器显示火箭页面的截图) 页面说明: - 「安装成功了!恭喜你!」:Django项目初始化完成,服务器正常运行 - 「你看到这个页面是因为DEBUG=True在你的设置文件里,而你没有配置任何URL」:开发模式下的默认提示,生产环境需关闭`DEBUG`
六、Nginx部署方案(生产环境完整配置)
1. Nginx作用说明 即使Windows下不用Gunicorn,也需要在博客中体现完整生产方案,Nginx的核心作用: - 反向代理:转发用户请求到Django应用 - 静态文件处理:直接返回静态资源,减轻Django压力 - 安全防护:隐藏后端服务,防止直接暴露Python环境 - 负载均衡:支持多实例部署,提升并发能力。

2. Windows下Nginx安装与配置
(1) 从[Nginx官网](sslocal://flow/file_open?url=https%3A%2F%2Fnginx.org%2Fen%2Fdownload.html&flow_extra=eyJsaW5rX3R5cGUiOiJjb2RlX2ludGVycHJldGVyIn0=)下载Windows稳定版,解压到无中文、无空格的路径(如`D:\nginx-1.26.0`)
(2)打开`conf/nginx.conf`文件,替换`server`块为如下配置:
```nginx server { listen 80; server_name 127.0.0.1 localhost;
# 静态文件代理配置 location /static/ { alias D:/Code/djangotutorial/static/; expires 30d;
# 静态文件缓存30天,提升性能 }
# 动态请求转发到Django服务器 location / { proxy_pass http://127.0.0.1:8000; 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; } }
(3) 重启Nginx生效: ```bash # 进入Nginx目录 cd D:\nginx-1.26.0 # 重载配置 nginx -s reload ```
(4)验证:先启动Django服务器,再访问`http://127.0.0.1`,即可正常访问项目,静态资源正常加载。

七、常见问题排查清单
| 问题现象 | 原因 | 解决方案 |
|----------|------|----------|
| `python manage.py collectstatic` 报`No such file or directory` | 未进入项目根目录,找不到`manage.py` | 执行`cd D:\Code\djangotutorial`切换到项目目录 |
| 报`NameError: name 'os' is not defined` | `settings.py`中未导入`os`模块 | 在文件顶部添加`import os` |
| Gunicorn报`No module named 'fcntl'` | Windows不支持Linux专属模块 | 改用`runserver`演示,或在Linux服务器部署 |
| 访问页面样式丢失 | 静态文件未收集,或Nginx配置错误 | 重新执行`collectstatic`,检查Nginx`alias`路径 |
| 生产环境访问报400 | `DEBUG=False`时未配置`ALLOWED_HOSTS` | 在`settings.py`中添加`ALLOWED_HOSTS = ['你的域名/IP', '127.0.0.1']` |
八、总结与作业提交说明
1. 本次部署全流程回顾
(1) 环境准备:安装Python、Django、Gunicorn
(2) 项目创建:`django-admin startproject`初始化项目
(3) 静态文件:配置`STATIC_ROOT`,执行`collectstatic`收集资源
(4)服务器启动:解决Windows Gunicorn兼容问题,用`runserver`完成验证
(5) Nginx配置:完成反向代理与静态文件处理,实现生产环境架构
2. 作业提交说明: 本次作业完整覆盖了Django项目部署的全流程,包含: - 项目目录结构 - 静态文件配置与收集日志 - Gunicorn兼容性问题与解决方案 - 项目启动成功页面 - Nginx完整生产配置 所有操作均附详细截图,可直接用于CSDN作业提交。
3. 后续拓展 - 生产环境部署:将项目迁移到Linux服务器,完整执行Gunicorn+Nginx部署 - 服务化:用Systemd(Linux)或NSSM(Windows)将Gunicorn注册为系统服务,实现开机自启 - HTTPS配置:申请SSL证书,配置Nginx HTTPS访问,提升安全性。
更多推荐




所有评论(0)