将 Python 项目部署到云服务器是一个系统性的过程,下面我为你梳理一个通用、清晰的步骤指南(以 Linux 云服务器为例,如 Ubuntu/Alibaba Cloud/ECS):
✅ 一、准备工作
1. 选择并配置云服务器
- 购买云服务器(推荐 Ubuntu 20.04+ 或 CentOS 7+)
- 安装必要基础工具:
sudo apt update && sudo apt upgrade -y sudo apt install python3 python3-pip git nginx curl -y
2. 准备你的 Python 项目
确保项目包含以下关键文件:
requirements.txt(依赖清单,用pip freeze > requirements.txt生成)- 启动脚本(如
app.py、main.py或 WSGI 入口文件) - 配置文件(数据库连接、密钥等——切勿硬编码敏感信息!)
🔐 安全提示:使用环境变量管理密钥(如
SECRET_KEY,DB_PASSWORD),避免提交到 Git。
✅ 二、上传项目到服务器
方法 A:Git 拉取(推荐)
# 在服务器上创建目录
mkdir ~/myproject
cd ~/myproject
# 克隆代码(需提前配置 SSH 密钥)
git clone <your-repo-url> .
方法 B:SCP / SFTP 传输
# 本地执行
scp -r ./project/* user@your-server-ip:/home/user/myproject/
✅ 三、搭建运行环境
1. 创建虚拟环境(隔离依赖)
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
2. 安装 Web 服务器 & WSGI 容器
方案 A:Gunicorn + Nginx(生产环境主流)
sudo apt install gunicorn -y
# 测试 Gunicorn 是否可用
gunicorn --bind 127.0.0.1:8000 myapp:app
# (假设 Flask/Django 主模块为 myapp,应用对象为 app)
方案 B:Docker(更灵活,适合微服务)
# Dockerfile 示例
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "myapp:app"]
构建并运行:
docker build -t mypythonapp .
docker run -d -p 8000:8000 mypythonapp
✅ 四、配置进程守护(让服务开机自启)
使用 systemd(推荐)
创建服务文件 /etc/systemd/system/myproject.service:
[Unit]
Description=My Python Project
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myproject
Environment="PATH=/home/ubuntu/myproject/venv/bin"
ExecStart=/home/ubuntu/myproject/venv/bin/gunicorn --workers 3 --bind unix:myproject.sock myapp:app
[Install]
WantedBy=multi-user.target
启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable myproject
sudo systemctl start myproject
sudo systemctl status myproject
💡 若使用 Unix socket(
.sock),Nginx 将通过它转发请求;也可直接绑定0.0.0.0:8000(不推荐用于高并发)。
✅ 五、配置 Nginx 反向X_X(可选但强烈推荐)
编辑 /etc/nginx/sites-available/myproject:
server {
listen 80;
server_name your-domain.com; # 替换为你的域名
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/myproject/myproject.sock;
}
location /static {
alias /home/ubuntu/myproject/static/;
}
}
启用站点:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
🌐 记得在 DNS 中将域名指向服务器 IP,并配置 SSL(可用 Let’s Encrypt + Certbot):
sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d your-domain.com
✅ 六、监控与维护建议
| 项目 | 工具/方法 |
|---|---|
| 日志查看 | journalctl -u myproject -f 或自定义 logging 输出到文件 |
| 健康检查 | 添加 /health 接口,配合 Nginx proxy_next_upstream 或外部监控(如 Uptime Kuma) |
| 自动更新 | 结合 CI/CD(GitHub Actions + SSH 脚本)实现一键部署 |
| 备份 | 定期备份数据库 + 静态资源(rsync / AWS S3 / 阿里云 OSS) |
🚀 快速验证清单
✅ 访问 http://your-server-ip → 应看到应用首页
✅ curl http://localhost:8000/health → 返回 200 OK
✅ systemctl status myproject → active (running)
✅ 修改代码后重启:sudo systemctl restart myproject → 生效
需要我根据你的具体框架(Flask / Django / FastAPI)、云厂商(阿里云/AWS/腾讯云)或是否需要 Docker/K8s 进一步定制方案吗?欢迎告诉我细节 😊
CLOUD云枢