1. 准备工作
确保Ubuntu服务器已更新至最新版本,并安装基础工具(如curl、git、vim)。若需特定Python版本(如3.8、3.11),可通过sudo apt install python3.8或sudo add-apt-repository ppa:deadsnakes/ppa && sudo apt install python3.11安装。
2. 创建并激活虚拟环境
虚拟环境可隔离项目依赖,避免全局污染。在项目目录下执行:
python3 -m venv myenv # 创建虚拟环境
source myenv/bin/activate # 激活(终端提示符前缀变为(myenv))
激活后,后续操作均在虚拟环境中进行。
3. 安装项目依赖
将本地项目的requirements.txt(包含Python包列表)上传至服务器,然后在虚拟环境中安装:
pip install -r requirements.txt # 安装所有依赖(如Flask、Django、Gunicorn)
若未生成requirements.txt,可通过pip freeze > requirements.txt在本地生成。
4. 运行应用(开发/生产环境)
python app.py run --host=0.0.0.0 --port=5000python manage.py runserver 0.0.0.0:8000pip install gunicorn # 安装Gunicorn
gunicorn --workers 4 --bind 0.0.0.0:8000 app:app # 示例:4个worker,绑定8000端口(app.py中应用对象为app)
其中--workers根据CPU核心数调整(通常为2*CPU核心数+1),app:app表示app.py文件中的应用对象。5. 配置Nginx反向代理(可选但推荐)
Nginx可作为反向代理,处理静态文件、负载均衡及SSL加密,提升应用性能与安全性。
sudo apt install nginx -ysudo 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;
}
# 可选:处理静态文件(需在应用中设置STATIC_ROOT)
location /static/ {
alias /path/to/your/app/static/;
}
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/sudo nginx -t && sudo systemctl restart nginx。6. 设置Systemd服务(可选但推荐)
Systemd可确保应用在服务器重启后自动启动,并监控进程状态。
sudo nano /etc/systemd/system/myapp.service,添加以下内容(替换路径、用户及端口):[Unit]
Description=My Python Application
After=network.target
[Service]
User=your_username # 替换为服务器用户名(如ubuntu)
Group=www-data # 通常用www-data(Nginx用户)
WorkingDirectory=/path/to/your/app # 替换为项目路径
Environment="PATH=/path/to/your/app/myenv/bin" # 虚拟环境路径
ExecStart=/path/to/your/app/myenv/bin/gunicorn --workers 4 --bind unix:/run/myapp.sock app:app # 使用Unix socket(更安全)
Restart=always # 崩溃后自动重启
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload && sudo systemctl start myapp && sudo systemctl enable myappsudo systemctl status myapp(若显示active (running)则表示成功)。7. (可选)使用Docker部署
Docker可将应用及其依赖打包为容器,实现环境一致性。
Dockerfile(在项目根目录):FROM python:3.9-slim # 使用轻量级Python镜像
WORKDIR /app
COPY . . # 复制项目文件
RUN pip install --no-cache-dir -r requirements.txt # 安装依赖
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"] # 启动Gunicorn
docker build -t my-python-app .docker run -d -p 8000:8000 --name myapp my-python-app(-d表示后台运行,-p映射端口)。8. 验证部署
http://your_domain_or_ip,应看到应用页面。curl http://localhost:8000(服务器本地)或http://your_server_ip:8000(外部)验证。注意事项
ssl_certificate和ssl_certificate_key。journalctl -u myapp或Nginx的access.log/error.log),及时排查问题。