Python项目在Ubuntu上的部署流程
首先更新系统包列表并安装Python3及pip(Python包管理工具),确保系统具备Python运行环境:
sudo apt update
sudo apt install python3 python3-pip python3-venv -y
验证安装版本:
python3 --version # 确认Python版本(建议3.6+)
pip3 --version # 确认pip版本
使用venv
模块创建项目专属虚拟环境,隔离项目依赖避免全局污染:
cd /path/to/your_project # 进入项目目录
python3 -m venv myenv # 创建虚拟环境(myenv为环境名称,可自定义)
source myenv/bin/activate # 激活虚拟环境(激活后命令行前缀显示环境名)
⚠️ 注意:后续所有操作需在激活的虚拟环境中进行,避免依赖冲突。
将项目依赖包及其版本记录在requirements.txt
文件中(若项目已有该文件),通过pip批量安装:
pip install -r requirements.txt # 安装所有依赖
若项目未生成requirements.txt
,可通过以下命令生成(需在虚拟环境中):
pip freeze > requirements.txt # 导出当前环境依赖到文件
根据项目类型选择运行方式:
main.py
):python main.py
flask run # 或 python app.py(若app.py中有Flask实例)
python manage.py runserver
生产环境需使用高性能WSGI服务器(如Gunicorn),替代内置开发服务器:
pip install gunicorn # 安装Gunicorn
以Flask应用为例(假设应用入口为app.py
中的app
对象),启动Gunicorn:
gunicorn -w 4 -b 127.0.0.1:8000 app:app # -w指定工作进程数,-b指定绑定地址
或通过Systemd创建守护进程(确保应用随系统启动):
sudo nano /etc/systemd/system/myapp.service # 创建服务文件
写入以下内容(替换路径和用户):
[Unit]
Description=Gunicorn Server for My Python App
After=network.target
[Service]
User=ubuntu # 替换为你的系统用户
Group=www-data
WorkingDirectory=/path/to/your_project
ExecStart=/path/to/your_project/myenv/bin/gunicorn --workers 4 --bind unix:/run/myapp.sock app:app
Restart=always
[Install]
WantedBy=multi-user.target
保存后启动服务:
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp # 设置开机自启
Nginx作为反向代理,负责转发外部请求到Gunicorn,并提供静态文件服务:
sudo apt install nginx -y # 安装Nginx
创建或修改Nginx配置文件(如/etc/nginx/sites-available/myapp
):
sudo nano /etc/nginx/sites-available/myapp
写入以下内容(替换域名/IP和端口):
server {
listen 80;
server_name your_domain_or_ip; # 替换为你的域名或服务器IP
location / {
include proxy_params;
proxy_pass http://unix:/run/myapp.sock; # 转发到Gunicorn的Unix socket
}
# 可选:配置静态文件目录(需在Django/Flask中设置STATIC_ROOT)
location /static/ {
alias /path/to/your_project/static/; # 替换为静态文件目录
}
}
启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ # 创建符号链接
sudo nginx -t # 测试配置语法
sudo systemctl restart nginx # 重启Nginx
若服务器启用了UFW防火墙,需允许HTTP(80)和HTTPS(443)流量:
sudo ufw allow 'Nginx Full' # 允许HTTP和HTTPS
sudo ufw enable # 启用防火墙(若未启用)
在浏览器中访问http://your_domain_or_ip
,若看到应用页面则表示部署成功。
sudo systemctl status nginx
sudo systemctl status myapp
journalctl -u myapp -f
(实时日志)或/var/log/nginx/error.log
(Nginx错误日志)sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain.com # 替换为你的域名
workers
数量(通常为CPU核心数的2-4倍)。logrotate
),避免日志文件过大。