Ubuntu环境下Python项目部署全流程
在部署前需确保系统具备Python运行环境和必要的工具:
sudo apt update
sudo apt install python3 python3-pip python3-venv -y
python3 --version # 确认Python版本(如3.8.10)
pip3 --version # 确认pip版本(如21.1.2)
使用虚拟环境隔离项目依赖,避免全局污染:
python3 -m venv myenv # 创建名为myenv的虚拟环境
source myenv/bin/activate # 激活后终端提示符前缀变为(myenv)
通过requirements.txt文件批量安装项目所需依赖(需提前在本地生成该文件):
cd /path/to/your_project # 进入项目根目录
pip install -r requirements.txt # 安装所有依赖
根据项目类型选择运行方式:
python main.py
app.py且包含app实例,可使用:flask run --host=0.0.0.0 --port=5000 # 需设置FLASK_APP=app.py环境变量
python manage.py runserver 0.0.0.0:8000
开发服务器不适合生产环境,需使用Gunicorn(同步框架)或Uvicorn(异步框架)提升性能:
pip install gunicorn
app.py,app为实例):gunicorn -w 4 -b 127.0.0.1:8000 app:app # 4个工作进程,绑定本地8000端口
pip install uvicorn
uvicorn app:app --host 0.0.0.0 --port 8000 # 异步框架推荐
Nginx作为前端服务器,负责处理静态文件、负载均衡及SSL终止,提升应用性能和安全性:
sudo apt install nginx -y
/etc/nginx/sites-available/myapp),内容如下:server {
listen 80;
server_name your_domain_or_ip; # 替换为域名或IP
location / {
proxy_pass http://127.0.0.1:8000; # 转发到Gunicorn/Uvicorn端口
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/static/files/;
}
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法
sudo systemctl reload nginx # 重新加载Nginx
通过systemd服务确保应用在系统重启后自动启动:
sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=Gunicorn Server for My Python App
After=network.target
[Service]
User=your_username # 替换为实际用户名
Group=www-data # 通常使用www-data组
WorkingDirectory=/path/to/your/project
Environment="PATH=/path/to/your/project/myenv/bin" # 虚拟环境路径
ExecStart=/path/to/your/project/myenv/bin/gunicorn --workers 3 --bind unix:/run/myapp.sock -m eventlet myproject.wsgi # Django示例
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp.service
sudo systemctl enable myapp.service # 开机自启
sudo systemctl status myapp.service # 检查状态
若服务器启用了UFW防火墙,需允许HTTP(80端口)和应用端口(如8000)通过:
sudo ufw allow 80/tcp # 允许HTTP
sudo ufw allow 8000/tcp # 允许应用端口
sudo ufw enable # 启用防火墙
http://your_domain_or_ip,确认应用是否正常响应。tail -f /var/log/nginx/error.log # Nginx错误日志
journalctl -u myapp.service -f # systemd服务日志
以上步骤覆盖了Ubuntu环境下Python项目部署的核心流程,可根据项目类型(如Flask/Django/FastAPI)和需求调整配置(如SSL证书、数据库连接等)。