从Base64到通乐码:高密度URL安全编码的设计与实现
2026/5/8 17:58:34
大家好,我是jobleap.cn的小九。在生产环境下,我们不再简单地使用uvicorn main:app,而是需要考虑进程守护、多核并发、故障自启以及特权端口管理。
PM2本是 Node.js 领域的顶流,但因其极简的命令行界面和强大的进程监控能力,现已成为 Python 开发者在 Linux 上部署 Web 服务的热门选择。
# 安装 Node 环境及 PM2sudoaptupdate&&sudoaptinstallnodejsnpm-ysudonpminstall-g pm2PM2 可以直接托管 uvicorn 进程。为了监听80 端口,命令前必须加sudo:
sudopm2 start"uvicorn main:app --host 0.0.0.0 --port 80"--name"fastapi-demo"| 功能 | 命令 |
|---|---|
| 查看所有服务状态 | sudo pm2 list |
| 查看实时日志 | sudo pm2 logs fastapi-demo |
| 重启服务 | sudo pm2 restart fastapi-demo |
| 开机自启 | sudo pm2 save && sudo pm2 startup |
这是 Python 社区最正统的生产部署方式。Gunicorn负责管理进程(Master),Uvicorn负责处理异步请求(Worker)。这种组合兼顾了稳定性和异步高性能。
pipinstallgunicorn uvicorn使用-k uvicorn.workers.UvicornWorker参数来启动异步工作流:
sudogunicorn main:app\--workers4\--worker-class uvicorn.workers.UvicornWorker\--bind0.0.0.0:80\--daemon--workers 4: 启动 4 个进程(建议设置为2 * CPU核心数 + 1)。--daemon: 在后台运行。由于 Gunicorn 是后台运行的,需要通过查找进程 ID 来关闭:
# 查找进程并杀死psaux|grepgunicornpkillgunicorn| 特性 | PM2 | Gunicorn |
|---|---|---|
| 易用性 | 极高,像刷短视频一样简单 | 一般,需要配合 Systemd 使用 |
| 日志管理 | 自带精美日志面板,支持自动切割 | 需手动配置日志文件路径 |
| 监控 | 提供 CPU、内存实时可视化 | 需配合三方工具(如 Prometheus) |
| 适用人群 | 追求开发效率、全栈开发者 | 纯 Python 环境、追求极致底层的团队 |
在真正的生产环境中,我们通常不让Python 直接监听 80 端口,而是让 Nginx 监听 80,再转发给后端的 Python(如监听 8000 端口)。
这样做的好处:
sudo lsof -i :80。如果有输出,说明 80 端口被占用(通常是默认的 Nginx)。执行sudo systemctl stop nginx即可释放。sudo启动。pm2 restart或pkill gunicorn重新加载进程。