Ubuntu上Python代码部署完整流程
首先更新系统包索引,安装Python 3、pip(Python包管理工具)及常用编译依赖(用于后续安装某些Python包):
sudo apt update
sudo apt install python3 python3-pip build-essential libssl-dev libffi-dev -y
为避免不同项目间的依赖冲突,强烈建议使用虚拟环境。以venv模块为例:
# 创建虚拟环境(myenv为环境目录名,可自定义)
python3 -m venv myenv
# 激活虚拟环境
source myenv/bin/activate
# 激活后,终端提示符会显示环境名(如“(myenv)”)
进入项目目录,通过requirements.txt文件批量安装依赖(若项目未提供该文件,需手动指定依赖):
cd /path/to/your_project # 替换为项目实际路径
pip install -r requirements.txt # 安装所有依赖
main.py):python main.py
flask run(需在代码中设置FLASK_APP=main.py)python manage.py runserverGunicorn是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绑定地址和端口
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
通过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
若需要环境一致性或快速迁移,可使用Docker打包应用。
在项目根目录下创建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"]
# 构建镜像(myapp为镜像名,可根据需求修改)
docker build -t myapp .
# 运行容器(-p将容器端口映射到主机端口)
docker run -d -p 80:80 myapp
# 查看运行中的容器
docker ps
以上步骤覆盖了Ubuntu上Python代码的主要部署方式,可根据项目规模(如小型脚本、中型Web应用、大型分布式系统)和需求(如是否需要快速迭代、是否强调环境一致性)选择合适的方法。生产环境建议优先使用Gunicorn+Nginx+systemd的组合,兼顾性能、稳定性和可维护性。