Ubuntu上Python项目部署完整流程
确保Ubuntu服务器已安装Python 3、pip及虚拟环境工具(避免全局依赖冲突):
sudo apt update
sudo 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 # 安装Gunicorn
gunicorn -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; # 替换为域名或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;
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 App
After=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:app
Restart=always # 崩溃后自动重启
RestartSec=10 # 重启间隔10秒
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp # 开机自启
sudo systemctl status myapp # 查看运行状态
若需更彻底的环境隔离,可使用Docker打包应用:
Dockerfile
(项目根目录):FROM python:3.9-slim # 使用轻量级Python镜像
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["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-app
localhost:8000
。root
用户运行应用,推荐用普通用户(如ubuntu
)+ www-data
组。location /static/
)。certbot
)配置HTTPS,提升安全性。以上流程覆盖了Ubuntu上Python项目从环境准备到生产部署的关键步骤,可根据项目类型(Flask/Django/FastAPI等)调整细节。