Day39 — Python Web 部署 / Go 部署 / Supervisor 进程管理

原始资料raw/day39-web-application-deployment.md 来源:Egon 林海峰运维课程 day39


内容概览

本篇涵盖三大主题:

  1. Python Web 应用部署(Django + uWSGI + Nginx)— 完整端到端流程
  2. Go 程序编译部署 — 编译型语言部署范式
  3. Supervisor 进程管理 — 生产级进程守护工具

核心知识点

1. Python 部署协议体系

层级协议/接口角色
Nginx ↔ uWSGIuwsgi 协议(二进制)或 HTTP反向代理与上游通信
uWSGI ↔ Python 应用WSGI 协议应用服务器与框架通信

2. uWSGI 两种上游协议

配置协议特点
socket = :8080uwsgi 协议配合 uwsgi_pass,性能更高,生产推荐
http = :8080HTTP 协议可被浏览器直接访问,通用但略慢

3. Nginx 三种转发指令

指令协议配合上游场景
uwsgi_passuwsgi 协议uWSGI socket 模式Python 同步 Web(生产)
proxy_passHTTP 协议Go 二进制 / uWSGI HTTP 模式 / Daphne通用 HTTP 反向代理
fastcgi_passFastCGI 协议PHP-FPMPHP 应用

4. Go 部署独特性

Go 是编译型语言,go build 产出独立二进制文件,自带 HTTP 服务器(标准库 net/http),部署时无需额外的应用服务器。

5. Supervisor

将应用作为子进程管理,实现后台运行 + 故障自动重启。配置在 /etc/supervisord.d/*.ini,通过 supervisorctl 控制。


部署流程对比

Python(Django + uWSGI + Nginx)

① 环境准备 → ② 安装 MySQL → ③ 编译 Python 3.10 → ④ 部署 Django 代码
→ ⑤ 初始化数据库 → ⑥ 配置 uWSGI(socket)→ ⑦ 配置 Nginx(uwsgi_pass)

Go

① 安装 Go → ② 编译源码(go build)→ ③ 修改配置 → ④ 初始化数据库
→ ⑤ 直接运行二进制 → ⑥ 配置 Nginx(proxy_pass)

关键配置速查

uWSGI

[uwsgi]
socket = :8080
chdir = /blog/DjangoBlog-master/
module = djangoblog.wsgi:application
processes = 4
threads = 2
master = True
max-requests = 5000
daemonize = /var/log/uwsgi.log

Nginx(代理 uWSGI)

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

Nginx(代理 Go)

location / {
    proxy_pass http://127.0.0.1:8383;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

Supervisor

[program:uwsgi]
command=/usr/local/bin/uwsgi --ini /blog/uwsgi.ini
directory=/blog
autostart=true
autorestart=true
user=root
stdout_logfile=/var/log/supervisor/uwsgi.log

Nginx 转发指令全景

# uwsgi 协议 → uWSGI 服务(Python 生产推荐)
uwsgi_pass 127.0.0.1:8080;
 
# HTTP 协议 → Go 二进制 / uWSGI HTTP 模式 / Daphne
proxy_pass http://127.0.0.1:8383;
 
# FastCGI 协议 → PHP-FPM
fastcgi_pass 127.0.0.1:9000;

参见