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 - 初始化数据库:
makemigrations→migrate→createsuperuser - 生成测试数据 + 收集静态文件(
collectstatic/compress)
4. uWSGI 安装与配置
- 两种安装方式:pip 或源码编译
- pip 安装可能遇到 gcc 版本问题:
-Wformat-signedness需 GCC ≥ 5.0 → 通过devtoolset-7升级 GCC - uwsgi.ini 核心配置:
socket = :8080(uwsgi 协议,配合 nginxuwsgi_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 概念的实际落地。
相关页面
- Python 体系架构 — WSGI/uWSGI 原理
- Python/Go 部署与 Supervisor(Day39) — 前置概念
- Nginx — Nginx 代理配置
- Go 程序部署 — 编译型部署对比