温馨提示×

Debian上Python项目如何部署

小樊
35
2025-11-07 06:47:01
栏目: 编程语言

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端口。

0