1. 准备工作:系统更新与基础工具安装
在Debian上部署Python项目前,需先更新系统软件包并安装必要工具:
sudo apt update && sudo apt upgrade -y # 更新系统
sudo apt install python3 python3-pip python3-venv build-essential libssl-dev libffi-dev -y # 安装Python、pip、虚拟环境工具及编译依赖
注:build-essential等编译依赖用于安装部分需要编译的Python包(如psycopg2-binary)。
2. 项目依赖管理:虚拟环境与requirements.txt
为避免全局依赖冲突,建议使用虚拟环境隔离项目依赖:
python3 -m venv myenv # 创建虚拟环境(myenv为环境名称,可自定义)
source myenv/bin/activate # 激活虚拟环境(激活后终端提示符会显示环境名)
pip install --upgrade pip # 升级pip到最新版本
pip install -r requirements.txt # 安装项目依赖(requirements.txt需提前准备,包含项目所需包及版本)
生成requirements.txt:若项目未创建该文件,可通过以下命令生成:
pip freeze > requirements.txt # 导出当前环境所有依赖到requirements.txt
依赖管理工具升级:如需更强大的依赖管理(如依赖冲突解决、锁定版本),可使用poetry:
curl -sSL https://install.python-poetry.org | python3 - # 安装poetry
poetry init # 初始化项目(生成pyproject.toml文件)
poetry add package_name # 添加依赖(如flask、django)
poetry install # 安装所有依赖(自动创建虚拟环境)
3. 应用服务器部署:Gunicorn配置
Gunicorn是Python常用的WSGI服务器,用于替代开发服务器(如Flask的app.run())处理生产环境请求:
pip install gunicorn # 安装gunicorn
gunicorn -w 4 -b 127.0.0.1:8000 app:app # 基本运行命令(以Flask为例:app.py为应用文件,app为Flask实例)
参数说明:
-w 4:启动4个工作进程(根据服务器CPU核心数调整,如4核可设为4-8);-b 127.0.0.1:8000:绑定本地IP的8000端口(仅允许本机访问,避免直接暴露到公网);app:app:应用路径(格式为文件名:变量名,如Django项目为myproject.wsgi:application)。4. 反向代理配置:Nginx设置
Nginx作为反向代理服务器,负责处理HTTP请求并将流量转发给Gunicorn,同时提供静态文件服务、SSL加密等功能:
sudo apt install nginx -y # 安装nginx
sudo nano /etc/nginx/sites-available/myapp # 创建Nginx配置文件(myapp为自定义名称)
配置内容(替换your_domain_or_ip为服务器IP或域名):
server {
listen 80;
server_name your_domain_or_ip; # 监听80端口(HTTP)
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;
}
# 静态文件配置(可选,需根据项目调整路径)
location /static/ {
alias /path/to/your/app/static/; # 指向项目静态文件目录
}
}
启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ # 创建符号链接到sites-enabled目录
sudo nginx -t # 测试配置文件语法(无错误则继续)
sudo systemctl restart nginx # 重启nginx使配置生效
防火墙设置:允许HTTP流量通过(若使用ufw):
sudo ufw allow 'Nginx Full' # 允许HTTP(80端口)和HTTPS(443端口)
5. 进程管理:systemd服务配置
为确保应用在系统重启后自动启动,可将Gunicorn配置为systemd服务:
sudo nano /etc/systemd/system/myapp.service # 创建systemd服务文件
配置内容(替换路径和用户信息):
[Unit]
Description=My Python Application # 服务描述
After=network.target # 在网络服务启动后启动
[Service]
User=your_username # 运行服务的用户(如ubuntu、debian)
Group=www-data # 运行服务的组(通常为www-data,用于web服务)
WorkingDirectory=/path/to/your/app # 项目根目录
Environment="PATH=/path/to/your/app/myenv/bin" # 虚拟环境路径
ExecStart=/path/to/your/app/myenv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app # Gunicorn启动命令
Restart=always # 应用崩溃后自动重启
[Install]
WantedBy=multi-user.target # 设置为多用户模式下启动
启动服务并设置开机自启:
sudo systemctl daemon-reload # 重新加载systemd配置
sudo systemctl start myapp # 启动服务
sudo systemctl enable myapp # 设置开机自启
查看服务状态:
sudo systemctl status myapp # 查看服务运行状态(若显示active(running)则为正常)
6. 可选:使用Docker容器化部署
若需环境一致性或快速迁移,可使用Docker部署:
sudo apt install docker.io -y # 安装docker
创建Dockerfile(项目根目录下):
FROM python:3.9-slim # 使用轻量级python镜像
WORKDIR /app # 设置工作目录
COPY requirements.txt . # 复制依赖文件
RUN pip install --no-cache-dir -r requirements.txt # 安装依赖(--no-cache-dir减少镜像大小)
COPY . . # 复制项目代码
EXPOSE 8000 # 暴露8000端口
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "app:app"] # 启动gunicorn
构建与运行镜像:
docker build -t my-python-app . # 构建镜像(my-python-app为镜像名称)
docker run -d -p 8000:8000 --name myapp_container my-python-app # 运行容器(-d后台运行,-p映射端口)
注:若需结合Nginx,可将Nginx配置为宿主机服务,反向代理到Docker容器的8000端口。