温馨提示×

Ubuntu上Python代码如何部署

小樊
39
2025-10-12 04:03:17
栏目: 编程语言

Ubuntu上Python代码部署完整流程

1. 准备基础环境

首先更新系统包索引,安装Python 3、pip(Python包管理工具)及常用编译依赖(用于后续安装某些Python包):

sudo apt update
sudo apt install python3 python3-pip build-essential libssl-dev libffi-dev -y

2. 隔离项目依赖(虚拟环境)

为避免不同项目间的依赖冲突,强烈建议使用虚拟环境。以venv模块为例:

# 创建虚拟环境(myenv为环境目录名,可自定义)
python3 -m venv myenv
# 激活虚拟环境
source myenv/bin/activate
# 激活后,终端提示符会显示环境名(如“(myenv)”)

3. 安装项目依赖

进入项目目录,通过requirements.txt文件批量安装依赖(若项目未提供该文件,需手动指定依赖):

cd /path/to/your_project  # 替换为项目实际路径
pip install -r requirements.txt  # 安装所有依赖

4. 运行Python代码

  • 普通脚本:直接执行Python文件(如main.py):
    python main.py
    
  • Web应用:若使用Flask/Django等框架,开发阶段可使用内置服务器(仅用于测试):
    • Flask:flask run(需在代码中设置FLASK_APP=main.py
    • Django:python manage.py runserver

5. 生产环境优化部署

5.1 使用Gunicorn作为WSGI服务器

Gunicorn是Python常用的WSGI HTTP服务器,能替代内置服务器处理生产环境的并发请求。

# 安装Gunicorn(在虚拟环境中)
pip install gunicorn
# 启动Gunicorn(以Flask应用为例,假设应用对象为app,文件名为app.py)
gunicorn -w 4 -b 127.0.0.1:8000 app:app
# 参数说明:-w 4表示4个工作进程(根据CPU核心数调整);-b绑定地址和端口

5.2 配置Nginx反向代理

Nginx作为反向代理,负责处理静态文件、负载均衡及SSL终止,提升应用性能和安全性。

# 安装Nginx
sudo apt install nginx -y
# 创建Nginx配置文件(以myapp为例)
sudo nano /etc/nginx/sites-available/myapp
# 添加以下内容(替换your_domain_or_ip为实际域名或IP)
server {
    listen 80;
    server_name your_domain_or_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;
    }
    # 可选:配置静态文件目录(需替换为实际路径)
    location /static/ {
        alias /path/to/your_project/static/;
    }
}
# 启用配置(创建软链接到sites-enabled目录)
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
# 测试Nginx配置语法
sudo nginx -t
# 重启Nginx使配置生效
sudo systemctl restart nginx

5.3 设置开机自启(systemd服务)

通过systemd服务让应用在系统启动时自动运行,并实现进程守护(崩溃后自动重启)。

# 创建systemd服务文件
sudo nano /etc/systemd/system/myapp.service
# 添加以下内容(替换your_username、your_groupname、/path/to/your_project为实际值)
[Unit]
Description=Gunicorn Server for My Python App
After=network.target

[Service]
User=your_username  # 替换为运行应用的用户(如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 -w 4 -b 127.0.0.1:8000 app:app
Restart=always      # 崩溃后自动重启
RestartSec=10       # 重启间隔10秒

[Install]
WantedBy=multi-user.target
# 重载systemd配置
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start myapp
# 设置开机自启
sudo systemctl enable myapp
# 检查服务状态
sudo systemctl status myapp

6. Docker部署(可选)

若需要环境一致性或快速迁移,可使用Docker打包应用。

6.1 创建Dockerfile

在项目根目录下创建Dockerfile(无后缀名):

# 使用官方Python轻量级镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制项目文件
COPY . .
# 暴露端口(应用监听的端口,如Gunicorn的8000端口)
EXPOSE 80
# 使用Gunicorn启动应用(以Flask为例)
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:80", "app:app"]

6.2 构建并运行Docker容器

# 构建镜像(myapp为镜像名,可根据需求修改)
docker build -t myapp .
# 运行容器(-p将容器端口映射到主机端口)
docker run -d -p 80:80 myapp
# 查看运行中的容器
docker ps

以上步骤覆盖了Ubuntu上Python代码的主要部署方式,可根据项目规模(如小型脚本、中型Web应用、大型分布式系统)和需求(如是否需要快速迭代、是否强调环境一致性)选择合适的方法。生产环境建议优先使用Gunicorn+Nginx+systemd的组合,兼顾性能、稳定性和可维护性。

0