Python Web 部署实操 — Django + uWSGI 部署指南

来源:Egon 林海峰 — web 层部署 Python 程序 原始文件:raw/web层部署python程序.md 前置概念:Python/Go 部署与 Supervisor(Day39)

内容概要

本文是 Django 博客项目从零到上线的实操部署指南,涵盖 MySQL 8.0 安装、Python 3.10 编译、uWSGI 配置、Nginx 代理全流程。

部署步骤总览

1. MySQL 8.0 安装

  • 通过官方 yum 源安装 mysql-server + mysql-devel
  • 修改时区(default-time-zone = '+8:00'
  • 获取临时密码,设置强密码
  • 创建项目数据库 djangoblog

2. Python 3.10 环境

  • 前置依赖:系统 OpenSSL 1.0 → 需要编译安装 OpenSSL 1.1.1(Python 3.10 必需)
  • 编译安装 Python 3.10.12(--with-openssl 指定新版 OpenSSL)
  • pip 换阿里源
  • 安装项目依赖(pip install -Ur requirements.txt
  • 注意 mysqlclient 版本兼容性(可降级到 1.4.4)

3. Django 应用配置

  • 修改 settings.py:数据库连接、时区(Asia/Shanghai)、语言(zh-hans)、关闭 USE_TZ
  • 初始化数据库:makemigrationsmigratecreatesuperuser
  • 生成测试数据 + 收集静态文件(collectstatic / compress

4. uWSGI 安装与配置

  • 两种安装方式:pip 或源码编译
  • pip 安装可能遇到 gcc 版本问题-Wformat-signedness 需 GCC ≥ 5.0 → 通过 devtoolset-7 升级 GCC
  • uwsgi.ini 核心配置:
    • socket = :8080(uwsgi 协议,配合 nginx uwsgi_pass
    • chdir / module:项目路径和 WSGI 入口
    • processes / threads:worker 数量
    • master=True / vacuum=True / daemonize

5. Nginx 代理配置

location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8080;
}

6. 关键设计决策

  • uwsgi_pass vs proxy_pass:uwsgi 协议比 HTTP 协议更快
  • socket 模式(uwsgi 协议)配合 nginx uwsgi_pass 是生产推荐方案
  • 如果负载均衡层也是 Nginx,需要使用 proxy_pass(因为 Nginx 对外暴露的是 HTTP 协议)

与 Day39 的关系

Day39 侧重架构原理(Python 体系协议、通信链路),本文侧重具体 Django 项目的部署命令,是 Day39 概念的实际落地。

相关页面