什么是 Django 服务器?
要明确一个核心概念:Django 自带的服务器(runserver)是一个为开发而生的轻量级 Web 服务器。

- 开发服务器:当你使用
python manage.py runserver命令时,你启动的就是这个服务器。 - 不适合生产:它绝对不能用于生产环境,因为它没有被设计为高性能、高安全、高可用的服务器,它没有处理静态文件(如 CSS, JS, 图片)的最佳方式,也无法承受高并发流量。
当谈论“Django 服务器”时,我们通常分为两种情况:
- 开发用的内置服务器
- 生产环境下的真实服务器 (这通常是指一个更强大的 Web 服务器,如 Nginx 或 Apache,它们与一个应用服务器如 Gunicorn 或 uWSGI 协同工作来运行 Django 应用)。
Django 开发服务器 (runserver)
这是你日常开发时最常接触到的服务器。
如何启动?
在你的 Django 项目根目录下(即 manage.py 文件所在的目录),打开终端,运行:
python manage.py runserver
默认情况下,它会启动在 0.0.1:8000,你可以在浏览器中访问 http://127.0.0.1:8000 来查看你的项目。

常用启动选项
-
指定端口:
python manage.py runserver 8080
-
指定 IP 地址:
python manage.py runserver 0.0.0.0:8000
0.0.0表示监听所有可用的网络接口,这使得同一局域网内的其他设备可以通过你的电脑的 IP 地址访问到你的开发服务器。注意:这会带来安全风险,仅建议在受信任的网络环境中使用。
-
自动重载: 这是
runserver最方便的特性之一,当你修改了项目中的 Python 代码(如models.py,views.py)并保存文件后,开发服务器会自动检测到变化并重启,无需你手动停止再启动,它会将所有的改动反映在页面上。 -
提供静态文件: 在开发模式下,
runserver也能为你提供静态文件(CSS, JavaScript, images 等),你需要在settings.py中配置STATIC_URL和STATICFILES_DIRS,并运行python manage.py collectstatic。
(图片来源网络,侵删)
Django 生产环境服务器部署
当你的项目准备上线时,你需要一个更强大的组合,业界标准的部署架构是:
客户端请求 → Web 服务器 (Nginx) → 应用服务器 (Gunicorn) → Django 应用
为什么需要这个组合?
-
Nginx (Web 服务器):
- 角色:像一个前台接待,它负责直接处理客户端的 HTTP 请求。
- 优点:
- 高性能处理静态文件:Nginx 处理静态文件(CSS, JS, 图片)的效率远高于 Django,可以极大地减轻 Django 的负担。
- 反向代理:将动态请求(需要 Django 处理的)转发给 Gunicorn,它还能处理负载均衡、SSL 终止(HTTPS)等。
- 安全性:可以提供额外的安全层,如防止恶意请求。
-
Gunicorn (应用服务器):
- 角色:像一个工人车间,它是一个 WSGI (Web Server Gateway Interface) 服务器,专门用来运行你的 Django 应用。
- 优点:
- 多进程/多线程:Gunicorn 可以创建多个 worker 进程来并发处理来自 Nginx 的请求,从而提高应用的吞吐量和稳定性。
- 成熟稳定:是 Python 社区最流行、最稳定的应用服务器之一。
-
Django (应用):
- 角色:像核心工程师,它专注于处理业务逻辑、数据库交互、模板渲染等。
部署步骤概览
-
准备环境:
- 在服务器上创建一个虚拟环境。
- 安装 Django 和 Gunicorn:
pip install django gunicorn
-
测试 Gunicorn:
- 在你的项目根目录下,你可以直接用 Gunicorn 来启动 Django,看看它是否能工作:
gunicorn --bind 0.0.0.0:8000 myproject.wsgi
myproject是你的项目名(manage.py所在的目录名)。wsgi是 Django 默认的 WSGI 配置文件。
- 在你的项目根目录下,你可以直接用 Gunicorn 来启动 Django,看看它是否能工作:
-
使用 Nginx 作为反向代理:
-
安装 Nginx:
sudo apt-get install nginx(基于 Debian/Ubuntu)。 -
配置 Nginx,创建一个服务器配置文件(
/etc/nginx/sites-available/myproject大致如下:server { listen 80; server_name your_domain.com; # 你的域名或服务器IP location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /path/to/your/project; # 你的项目根目录 } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; # 将请求转发给 Gunicorn 的 Unix socket } }
-
-
使用 Systemd 管理 Gunicorn:
-
为了让 Gunicorn 在后台稳定运行,并能在系统启动时自动启动,我们使用
systemd。 -
创建一个服务文件:
sudo nano /etc/systemd/system/gunicorn.service -
写入配置内容,指定 Gunicorn 的路径、用户、工作目录等。
[Unit] Description=gunicorn daemon Requires=gunicorn.socket After=network.target [Service] User=www-data # 运行服务的用户 Group=www-data # 运行服务的用户组 WorkingDirectory=/path/to/your/project ExecStart=/path/to/your/venv/bin/gunicorn \ --access-logfile - \ --workers 3 \ --bind unix:/run/gunicorn.sock \ myproject.wsgi:application [Install] WantedBy=multi-user.target
-
-
启动并启用服务:
- 启动并启用 Gunicorn socket 和服务:
sudo systemctl start gunicorn.socket sudo systemctl enable gunicorn.socket sudo systemctl start nginx sudo systemctl enable nginx
- 启动并启用 Gunicorn socket 和服务:
-
防火墙设置:
确保服务器的防火墙允许 HTTP (80) 和 HTTPS (443) 端口的流量。
总结与最佳实践
| 特性 | Django runserver |
生产环境 (Nginx + Gunicorn) |
|---|---|---|
| 用途 | 仅用于开发 | 用于生产环境 |
| 性能 | 低,单进程 | 高,多进程/多线程,异步处理 |
| 静态文件 | 可以处理,但效率低 | Nginx 专门处理,效率极高 |
| 稳定性 | 自动重启,但不稳定 | 长期稳定运行,由 systemd 管理 |
| 安全性 | 基本无安全考虑 | 可通过 Nginx 增强安全 |
| 部署 | 无需配置,一键启动 | 需要配置 Nginx、Gunicorn、systemd |
核心要点:
- 开发时:放心大胆地使用
python manage.py runserver,享受它自动重载带来的便利。 - 上线前:必须停止使用
runserver,并开始学习使用 Nginx 和 Gunicorn 的组合部署方案。 - 安全第一:永远不要将
runserver暴露在公网上,生产环境务必使用 HTTPS(通常通过 Nginx 配置 Let's Encrypt 实现)。 - 工具链:除了 Nginx 和 Gunicorn,你还应该了解 Docker 和 Docker Compose,它们可以极大地简化部署流程,实现环境一致性。
希望这个详细的解释能帮助你全面理解 Django 服务器的各个方面!
