1. 准备工作:系统更新与基础工具安装
在Debian系统上部署Python项目前,需先更新系统包并安装必要工具(如pip、venv、git、nginx等),确保环境符合要求:
sudo apt update && sudo apt upgrade -y # 更新系统包
sudo apt install -y python3 python3-pip python3-venv git nginx # 安装基础工具
这一步为后续依赖管理、虚拟环境创建及Web服务配置奠定基础。
2. 依赖管理与虚拟环境隔离
为避免项目依赖与系统Python环境冲突,需使用虚拟环境隔离项目依赖,并通过requirements.txt文件管理依赖版本:
# 进入项目目录
mkdir myproject && cd myproject
# 创建并激活虚拟环境
python3 -m venv venv
source venv/bin/activate # 激活后,终端提示符会显示虚拟环境名称
# 安装依赖(若已有requirements.txt)
pip install -r requirements.txt
# 若无requirements.txt,先安装项目依赖再生成
# pip install flask requests # 示例:安装Flask和Requests
# pip freeze > requirements.txt # 生成依赖清单
虚拟环境能有效解决“依赖冲突”问题,requirements.txt则确保不同环境(开发/生产)的依赖一致性。
3. 运行Python应用:WSGI服务器配置
生产环境不建议直接使用Python内置服务器(如app.run()),需通过WSGI服务器(如Gunicorn)提高性能。以Flask项目为例(假设应用入口为app.py,实例名为app):
# 安装Gunicorn
pip install gunicorn
# 测试Gunicorn运行(监听本地8000端口,使用4个工作进程)
gunicorn -w 4 -b 127.0.0.1:8000 app:app
-w 4:指定4个工作进程(可根据CPU核心数调整,如2*CPU核心数+1);-b 127.0.0.1:8000:绑定本地IP和端口(仅允许内部访问,避免直接暴露);app:app:第一个app是Flask应用文件名(不含.py),第二个app是Flask应用实例名。4. 反向代理配置:Nginx设置
Nginx作为反向代理服务器,负责处理HTTP请求、负载均衡及静态文件服务,提升应用性能和安全性。配置步骤如下:
# 创建Nginx配置文件(替换myproject为你的项目名)
sudo nano /etc/nginx/sites-available/myproject
# 添加以下内容(以Flask为例)
server {
listen 80; # 监听80端口(HTTP)
server_name your_domain_or_ip; # 替换为你的域名或IP
location / {
proxy_pass http://127.0.0.1:8000; # 转发到Gunicorn的地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 可选:配置静态文件服务(如CSS/JS/图片)
location /static/ {
alias /path/to/your/project/static/; # 替换为静态文件目录
}
}
# 启用配置(创建软链接到sites-enabled目录)
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
# 测试Nginx配置语法
sudo nginx -t
# 重启Nginx使配置生效
sudo systemctl restart nginx
proxy_pass:指向Gunicorn的监听地址(需与Gunicorn的-b参数一致);static/:配置静态文件目录,避免Nginx将静态请求转发给Gunicorn,提升性能。5. 服务管理:Systemd守护进程
为确保应用在系统重启后自动启动,需使用Systemd创建守护进程:
# 创建Systemd服务文件
sudo nano /etc/systemd/system/myproject.service
# 添加以下内容(替换路径和用户)
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=your_username # 替换为你的Linux用户名(如ubuntu)
Group=www-data # 通常为www-data(Nginx用户)
WorkingDirectory=/path/to/your/project # 替换为项目目录
Environment="PATH=/path/to/your/project/venv/bin" # 指定虚拟环境路径
ExecStart=/path/to/your/project/venv/bin/gunicorn --workers 4 --bind unix:myproject.sock -m 007 app:app
[Install]
WantedBy=multi-user.target
User/Group:指定运行服务的用户(避免使用root,提升安全性);WorkingDirectory:项目目录;Environment:指定虚拟环境路径;ExecStart:Gunicorn启动命令(使用Unix socket替代端口,提升性能)。# 启动服务并设置为开机自启
sudo systemctl start myproject
sudo systemctl enable myproject
# 查看服务状态(确认是否运行)
sudo systemctl status myproject
Systemd会监控服务状态,若服务崩溃会自动重启,确保应用高可用性。
6. 可选优化:SSL加密(Let’s Encrypt)
若需通过HTTPS提供服务,可使用Let’s Encrypt免费获取SSL证书:
# 安装Certbot(Nginx插件)
sudo apt install -y certbot python3-certbot-nginx
# 获取证书并自动配置Nginx
sudo certbot --nginx -d your_domain_or_ip # 替换为你的域名或IP
# 按照提示完成配置(如选择“Redirect to HTTPS”)
Certbot会自动修改Nginx配置,添加SSL证书路径及HTTPS重定向规则,无需手动编辑配置文件。
7. 防火墙配置(UFW)
若系统启用了ufw防火墙,需允许HTTP(80)和HTTPS(443)流量:
sudo ufw allow 'Nginx Full' # 允许HTTP和HTTPS
sudo ufw enable # 启用防火墙(若未启用)
sudo ufw status # 查看防火墙状态
这一步确保外部用户能访问你的应用,同时阻止非法端口访问。
8. 测试部署
完成上述步骤后,在浏览器中访问http://your_domain_or_ip(或https://your_domain_or_ip,若配置了SSL),应能看到Python项目正常运行。若遇到问题,可通过以下命令排查:
# 查看Gunicorn日志(若使用Systemd)
sudo journalctl -u myproject -f
# 查看Nginx日志
sudo tail -f /var/log/nginx/error.log
日志会显示具体的错误信息(如端口冲突、权限问题、依赖缺失),帮助快速定位问题。