如何将Python项目部署到云服务器上?

将Python项目部署到云服务器是一个常见的需求。以下是详细的部署步骤和最佳实践:

1. 准备云服务器

选择云服务商

  • 阿里云、腾讯云、华为云(国内)
  • AWS、Google Cloud、Azure(国际)

基础配置

# 登录服务器后更新系统
sudo apt update && sudo apt upgrade -y

# 安装必要的软件
sudo apt install python3 python3-pip python3-venv nginx git -y

2. 项目准备

创建项目目录结构

/myproject/
├── app/
│   ├── __init__.py
│   └── main.py
├── requirements.txt
├── wsgi.py
└── config/
    └── settings.py

生成requirements.txt

# 在本地开发环境中
pip freeze > requirements.txt

3. 部署Flask/Django应用示例

Flask应用部署

wsgi.py文件

import sys
sys.path.insert(0, '/path/to/your/project')

from app import app as application

if __name__ == "__main__":
    application.run()

Django应用部署

settings.py配置

# 生产环境配置
DEBUG = False
ALLOWED_HOSTS = ['your-domain.com', 'your-server-ip']

# 数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'myproject',
        'USER': 'myuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

# 静态文件
STATIC_ROOT = '/path/to/your/project/staticfiles'

4. 使用Gunicorn部署

安装和配置Gunicorn

# 安装Gunicorn
pip install gunicorn

# 测试运行
gunicorn --bind 0.0.0.0:8000 wsgi:application

# 创建Gunicorn配置文件
cat > gunicorn.conf.py << 'EOF'
bind = "127.0.0.1:8000"
workers = 4
worker_class = "sync"
worker_connections = 1000
max_requests = 1000
max_requests_jitter = 100
timeout = 30
keepalive = 2
preload_app = True
EOF

5. Nginx反向X_X配置

Nginx配置文件

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        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/project/staticfiles/;
        expires 30d;
    }

    location /media/ {
        alias /path/to/your/project/media/;
        expires 30d;
    }
}

启用Nginx配置

# 创建符号链接
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/

# 测试配置
sudo nginx -t

# 重启Nginx
sudo systemctl restart nginx

6. 使用Systemd管理服务

创建Gunicorn服务文件

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/path/to/your/project
Environment="PATH=/path/to/your/project/venv/bin"
ExecStart=/path/to/your/project/venv/bin/gunicorn --config gunicorn.conf.py wsgi:application
Restart=always

[Install]
WantedBy=multi-user.target

管理服务

# 启动服务
sudo systemctl start myproject

# 设置开机自启
sudo systemctl enable myproject

# 查看状态
sudo systemctl status myproject

# 重启服务
sudo systemctl restart myproject

7. 安全配置

防火墙设置

# 开放HTTP和HTTPS端口
sudo ufw allow 'Nginx Full'

# 或者指定端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

SSL证书(使用Let’s Encrypt)

# 安装Certbot
sudo apt install certbot python3-certbot-nginx

# 获取SSL证书
sudo certbot --nginx -d your-domain.com

# 自动续期测试
sudo certbot renew --dry-run

8. 数据库配置

PostgreSQL安装

# 安装PostgreSQL
sudo apt install postgresql postgresql-contrib

# 创建数据库和用户
sudo -u postgres psql
CREATE DATABASE myproject;
CREATE USER myuser WITH PASSWORD 'securepassword';
GRANT ALL PRIVILEGES ON DATABASE myproject TO myuser;
q

9. 自动化部署脚本

deploy.sh

#!/bin/bash

PROJECT_DIR="/path/to/your/project"
VENV_DIR="$PROJECT_DIR/venv"

echo "开始部署..."

# 拉取最新代码
cd $PROJECT_DIR
git pull origin main

# 激活虚拟环境
source $VENV_DIR/bin/activate

# 安装依赖
pip install -r requirements.txt

# 收集静态文件(Django)
python manage.py collectstatic --noinput

# 迁移数据库
python manage.py migrate

# 重启服务
sudo systemctl restart myproject
sudo systemctl restart nginx

echo "部署完成!"

10. 监控和日志

日志配置

# logging.conf
import logging
import logging.handlers

logger = logging.getLogger('myproject')
logger.setLevel(logging.INFO)

handler = logging.handlers.RotatingFileHandler(
    '/var/log/myproject/app.log',
    maxBytes=10*1024*1024,  # 10MB
    backupCount=5
)
formatter = logging.Formatter(
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
handler.setFormatter(formatter)
logger.addHandler(handler)

最佳实践

  1. 使用虚拟环境:避免包冲突
  2. 环境变量:敏感信息不要硬编码
  3. 定期备份:数据库和重要文件
  4. 监控:设置错误监控和性能监控
  5. CI/CD:使用GitLab CI或GitHub Actions自动化部署

这样就可以成功将Python项目部署到云服务器上并保持稳定运行。

未经允许不得转载:CLOUD技术博 » 如何将Python项目部署到云服务器上?