凌峰创科服务平台

python django 服务器

什么是 Django 服务器?

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

python django 服务器-图1
(图片来源网络,侵删)
  • 开发服务器:当你使用 python manage.py runserver 命令时,你启动的就是这个服务器。
  • 不适合生产:它绝对不能用于生产环境,因为它没有被设计为高性能、高安全、高可用的服务器,它没有处理静态文件(如 CSS, JS, 图片)的最佳方式,也无法承受高并发流量。

当谈论“Django 服务器”时,我们通常分为两种情况:

  1. 开发用的内置服务器
  2. 生产环境下的真实服务器 (这通常是指一个更强大的 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 django 服务器-图2
(图片来源网络,侵删)

常用启动选项

  • 指定端口

    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_URLSTATICFILES_DIRS,并运行 python manage.py collectstatic

    python django 服务器-图3
    (图片来源网络,侵删)

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 (应用)

    • 角色:像核心工程师,它专注于处理业务逻辑、数据库交互、模板渲染等。

部署步骤概览

  1. 准备环境

    • 在服务器上创建一个虚拟环境。
    • 安装 Django 和 Gunicorn:pip install django gunicorn
  2. 测试 Gunicorn

    • 在你的项目根目录下,你可以直接用 Gunicorn 来启动 Django,看看它是否能工作:
      gunicorn --bind 0.0.0.0:8000 myproject.wsgi
      • myproject 是你的项目名(manage.py 所在的目录名)。
      • wsgi 是 Django 默认的 WSGI 配置文件。
  3. 使用 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
          }
      }
  4. 使用 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
  5. 启动并启用服务

    • 启动并启用 Gunicorn socket 和服务:
      sudo systemctl start gunicorn.socket
      sudo systemctl enable gunicorn.socket
      sudo systemctl start nginx
      sudo systemctl enable nginx
  6. 防火墙设置

    确保服务器的防火墙允许 HTTP (80) 和 HTTPS (443) 端口的流量。


总结与最佳实践

特性 Django runserver 生产环境 (Nginx + Gunicorn)
用途 仅用于开发 用于生产环境
性能 低,单进程 高,多进程/多线程,异步处理
静态文件 可以处理,但效率低 Nginx 专门处理,效率极高
稳定性 自动重启,但不稳定 长期稳定运行,由 systemd 管理
安全性 基本无安全考虑 可通过 Nginx 增强安全
部署 无需配置,一键启动 需要配置 Nginx、Gunicorn、systemd

核心要点:

  1. 开发时:放心大胆地使用 python manage.py runserver,享受它自动重载带来的便利。
  2. 上线前:必须停止使用 runserver,并开始学习使用 Nginx 和 Gunicorn 的组合部署方案。
  3. 安全第一:永远不要将 runserver 暴露在公网上,生产环境务必使用 HTTPS(通常通过 Nginx 配置 Let's Encrypt 实现)。
  4. 工具链:除了 Nginx 和 Gunicorn,你还应该了解 Docker 和 Docker Compose,它们可以极大地简化部署流程,实现环境一致性。

希望这个详细的解释能帮助你全面理解 Django 服务器的各个方面!

分享:
扫描分享到社交APP
上一篇
下一篇