Python Web应用部署实战:Docker与Nginx的完美结合
·
Python Web应用部署实战:Docker与Nginx的完美结合
本文将逐步指导如何通过Docker容器化和Nginx反向代理部署Python Web应用,实现高效、可扩展的生产级部署方案。以下为完整流程:
一、准备工作
-
项目结构
myapp/ ├── app.py # Flask/Django应用入口 ├── requirements.txt # 依赖清单 ├── Dockerfile # Docker构建文件 ├── nginx/ │ └── conf.d/ │ └── app.conf # Nginx配置文件 └── docker-compose.yml # 容器编排 -
Python示例应用
# app.py (Flask示例) from flask import Flask app = Flask(__name__) @app.route('/') def home(): return "Hello from Docker + Nginx!" if __name__ == "__main__": app.run(host='0.0.0.0', port=5000)
二、容器化Python应用
Dockerfile 定义构建环境:
# 使用官方Python基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露应用端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
三、配置Nginx反向代理
nginx/conf.d/app.conf 配置负载均衡:
server {
listen 80;
server_name localhost;
location / {
# 代理到Python容器
proxy_pass http://web:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
关键作用:
- 静态文件高效处理
- 负载均衡与SSL终止
- 请求缓冲提升并发能力
四、整合Docker Compose
docker-compose.yml 编排服务:
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
restart: always
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- web
五、部署与验证
- 启动服务
docker-compose up --build -d - 验证功能
- 访问
http://localhost显示应用内容 - 检查容器状态:
docker ps -a
- 访问
- 性能优势
方案 并发支持 资源占用 部署速度 传统部署 低 高 慢 Docker+Nginx 高 低 快
六、高级优化
- Gunicorn集成
修改Docker启动命令:CMD ["gunicorn", "-w 4", "-b 0.0.0.0:5000", "app:app"] - HTTPS配置
在Nginx中添加:listen 443 ssl; ssl_certificate /etc/letsencrypt/fullchain.pem; ssl_certificate_key /etc/letsencrypt/privkey.pem; - 多节点扩展
docker-compose scale web=3 # 启动3个应用实例
最终架构图:
用户请求 -> Nginx (负载均衡) -> [Web容器1, Web容器2, ...]
通过此方案,您将获得:
- 自动化的部署流程
- 资源隔离与弹性伸缩
- 企业级安全与性能
- 一键回滚的版本控制
更多推荐
所有评论(0)