Ubuntu上Python应用部署完整流程
sudo apt update && sudo apt upgrade -ysudo apt install python3 python3-pip python3-venv git curl -ygit clone https://github.com/your-username/your-python-app.git /opt/your-appscp -r /local/path/to/app user@your_server_ip:/opt/your-app虚拟环境可隔离项目依赖,避免全局包冲突:
cd /opt/your-app
python3 -m venv venv # 创建虚拟环境
source venv/bin/activate # 激活虚拟环境(激活后命令行前会显示(venv))
若项目根目录有requirements.txt文件(包含Flask、Django等依赖),执行:
pip install --upgrade pip && pip install -r requirements.txt
(若未生成requirements.txt,可通过pip freeze > requirements.txt生成)
Python内置开发服务器(如app.run())不适合生产环境,需用Gunicorn作为WSGI服务器:
# 安装Gunicorn
pip install gunicorn
# 启动应用(假设应用入口为app.py,应用对象为app)
gunicorn -w 4 -b 127.0.0.1:8000 app:app
# 参数说明:-w 4(4个工作进程)、-b 绑定地址(127.0.0.1仅本地访问)、app:app(app.py中的Flask/Django应用对象)
Nginx可作为反向代理,处理静态文件、负载均衡及SSL加密:
# 安装Nginx
sudo apt install nginx -y
# 创建Nginx配置文件(针对你的应用)
sudo nano /etc/nginx/sites-available/your-app
# 添加以下内容(替换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;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 可选:处理静态文件(如CSS/JS/图片)
location /static/ {
alias /opt/your-app/static/; # 指向应用中的静态文件目录
}
}
# 启用配置(创建软链接到sites-enabled目录)
sudo ln -s /etc/nginx/sites-available/your-app /etc/nginx/sites-enabled/
# 测试Nginx配置语法
sudo nginx -t
# 重启Nginx使配置生效
sudo systemctl restart nginx
通过systemd创建服务,实现应用随系统重启自动启动:
# 创建systemd服务文件
sudo nano /etc/systemd/system/your-app.service
# 添加以下内容(替换路径、用户、组为实际值)
[Unit]
Description=Gunicorn server for Your Python App
After=network.target
[Service]
User=your_username # 替换为你的Ubuntu用户名(如ubuntu)
Group=www-data # 通常用www-data组(Nginx默认用户)
WorkingDirectory=/opt/your-app
Environment="PATH=/opt/your-app/venv/bin"
ExecStart=/opt/your-app/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
Restart=always # 崩溃后自动重启
[Install]
WantedBy=multi-user.target
# 重载systemd配置
sudo systemctl daemon-reload
# 启动服务并设置开机自启
sudo systemctl start your-app
sudo systemctl enable your-app
# 检查服务状态(确认是否运行中)
sudo systemctl status your-app
若服务器启用了UFW防火墙,需开放80(HTTP)和443(HTTPS)端口:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable # 启用防火墙(若未启用)
若需确保开发与生产环境一致,可使用Docker打包应用:
# 创建Dockerfile(在应用根目录)
nano Dockerfile
# 添加以下内容(以Flask为例)
FROM python:3.9-slim
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["gunicorn", "-w 4", "-b 0.0.0.0:8000", "app:app"]
# 构建Docker镜像
docker build -t your-python-app .
# 运行Docker容器(映射80端口到宿主机)
docker run -d -p 80:8000 your-python-app
打开浏览器访问http://your_domain_or_ip,若看到应用首页(如Flask的"Hello, World!"),则部署成功。