Ubuntu上Python项目部署完整流程

确保Ubuntu服务器已安装Python 3、pip及虚拟环境工具(避免全局依赖冲突):
sudo apt updatesudo apt install python3 python3-pip python3-venv -y验证安装:
python3 --version# 确认Python版本(如3.8+)pip3 --version # 确认pip可用将本地Python项目上传至服务器(如通过scp或Git):
scp -r /local/project/path username@server_ip:/remote/deploy/path进入项目目录,检查requirements.txt(项目依赖清单)是否存在。
在项目根目录下创建虚拟环境,隔离项目依赖:
python3 -m venv myenv# 创建名为myenv的虚拟环境source myenv/bin/activate# 激活环境(终端提示符显示(myenv))激活后,后续操作均在虚拟环境中进行。
通过requirements.txt安装所有依赖(确保本地与服务器依赖一致):
pip install --upgrade pip# 升级pip避免兼容性问题pip install -r requirements.txt根据项目类型启动应用(以Flask为例):
python app.py# 若app.py是入口文件且包含Flask.run()或使用Gunicorn(生产级WSGI服务器,提升性能):
pip install gunicorn# 安装Gunicorngunicorn -w 4 -b 127.0.0.1:8000 app:app# 4个工作进程,绑定本地8000端口注:
app:app表示app.py文件中的app对象(Flask/Django应用实例)。
Nginx作为前端服务器,处理静态文件、负载均衡及SSL终止,将请求转发至Gunicorn:
sudo apt install nginx -y/etc/nginx/sites-available/myapp):sudo nano /etc/nginx/sites-available/myapp添加以下内容(替换your_domain_or_ip和端口):server {listen 80;server_name your_domain_or_ip;# 替换为域名或IPlocation / {proxy_pass http://127.0.0.1:8000;# 转发至Gunicornproxy_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 /remote/deploy/path/static/;# 替换为项目静态文件路径}}sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/sudo nginx -t# 测试配置语法sudo systemctl reload nginx# 重新加载Nginx通过systemd管理应用进程,确保服务器重启后自动启动:
/etc/systemd/system/myapp.service):sudo nano /etc/systemd/system/myapp.service添加以下内容(替换路径、用户及端口):[Unit]Description=Gunicorn Server for My Python AppAfter=network.target[Service]User=your_username# 替换为运行应用的用户(如ubuntu)Group=www-data# 通常用www-data(Nginx用户)WorkingDirectory=/remote/deploy/path# 项目根目录Environment="PATH=/remote/deploy/path/myenv/bin"# 虚拟环境路径ExecStart=/remote/deploy/path/myenv/bin/gunicorn --workers 4 --bind unix:/run/myapp.sock app:appRestart=always# 崩溃后自动重启RestartSec=10 # 重启间隔10秒[Install]WantedBy=multi-user.targetsudo systemctl daemon-reloadsudo systemctl start myappsudo systemctl enable myapp# 开机自启sudo systemctl status myapp# 查看运行状态若需更彻底的环境隔离,可使用Docker打包应用:
Dockerfile(项目根目录):FROM python:3.9-slim# 使用轻量级Python镜像WORKDIR /appCOPY . .RUN pip install --no-cache-dir -r requirements.txtEXPOSE 8000CMD ["gunicorn", "--workers", "4", "--bind", "0.0.0.0:8000", "app:app"]docker build -t my-python-app .docker run -d -p 8000:8000 --name myapp my-python-applocalhost:8000。root用户运行应用,推荐用普通用户(如ubuntu)+ www-data组。location /static/)。certbot)配置HTTPS,提升安全性。以上流程覆盖了Ubuntu上Python项目从环境准备到生产部署的关键步骤,可根据项目类型(Flask/Django/FastAPI等)调整细节。