Skip to content

部署指南

一句话总结:将应用部署到生产环境。

📍 本章定位

  • 服务方案:全部方案
  • 学习方式:📖 选学
  • 在流程中的作用:将应用部署到生产环境
  • 核心知识点:部署流程、容器化、CI/CD
  • 预计时长:按需查阅
  • 完成后能做什么:能够将应用部署到生产环境

一、部署总览

1.1 部署方式

1.2 部署流程


二、传统部署

2.1 物理服务器部署

问题:需要购买和维护物理服务器。

解决方案:使用云服务器。

部署步骤

bash
# 1. 购买云服务器
# 阿里云、腾讯云、AWS 等

# 2. 连接服务器
ssh root@your-server-ip

# 3. 安装依赖
apt update
apt install -y python3 python3-pip nginx

# 4. 上传代码
scp -r ./project root@your-server-ip:/var/www/

# 5. 配置 Nginx
cat > /etc/nginx/sites-available/myapp << EOF
server {
    listen 80;
    server_name your-domain.com;
    
    location / {
        proxy_pass http://localhost:8000;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
    }
}
EOF

# 6. 启用配置
ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx

# 7. 启动应用
cd /var/www/project
pip install -r requirements.txt
python app.py

优点

  • 完全控制服务器
  • 适合长期运行

缺点

  • 需要维护服务器
  • 成本较高

2.2 虚拟机部署

问题:需要管理虚拟机。

解决方案:使用云虚拟机。

部署步骤

bash
# 1. 创建虚拟机
# 使用 VirtualBox、VMware 等

# 2. 安装操作系统
# Ubuntu、CentOS 等

# 3. 配置网络
# 设置静态 IP、端口转发

# 4. 安装依赖
apt update
apt install -y python3 python3-pip nginx

# 5. 部署应用
# 同物理服务器部署

优点

  • 隔离性好
  • 易于管理

缺点

  • 资源占用较多
  • 性能不如物理服务器

三、容器化部署

3.1 Docker 部署

问题:环境不一致,部署困难。

解决方案:使用 Docker 容器化。

部署步骤

dockerfile
# Dockerfile
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["python", "app.py"]
bash
# 构建镜像
docker build -t myapp .

# 运行容器
docker run -d -p 8000:8000 myapp

# 查看容器
docker ps

# 查看日志
docker logs <container-id>

优点

  • 环境一致性
  • 易于部署
  • 资源隔离

缺点

  • 需要学习 Docker
  • 增加复杂性

3.2 Docker Compose 部署

问题:多容器应用部署复杂。

解决方案:使用 Docker Compose。

部署步骤

yaml
# docker-compose.yml
version: '3'
services:
  app:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://user:password@db:5432/mydb
    depends_on:
      - db
  
  db:
    image: postgres:15
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres_data:/var/lib/postgresql/data
  
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app

volumes:
  postgres_data:
bash
# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 停止所有服务
docker-compose down

优点

  • 多容器管理
  • 易于配置
  • 环境一致性

缺点

  • 需要学习 Docker Compose
  • 增加复杂性

四、云原生部署

4.1 Kubernetes 部署

问题:大规模容器编排困难。

解决方案:使用 Kubernetes。

部署步骤

yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:latest
        ports:
        - containerPort: 8000
        env:
        - name: DATABASE_URL
          valueFrom:
            secretKeyRef:
              name: myapp-secrets
              key: database-url
yaml
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
  - port: 80
    targetPort: 8000
  type: LoadBalancer
bash
# 部署到 Kubernetes
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

# 查看部署状态
kubectl get deployments
kubectl get pods
kubectl get services

优点

  • 自动扩缩容
  • 高可用性
  • 易于管理

缺点

  • 复杂性高
  • 学习曲线陡峭

4.2 Docker Swarm 部署

问题:需要简单的容器编排。

解决方案:使用 Docker Swarm。

部署步骤

bash
# 初始化 Swarm
docker swarm init

# 部署服务
docker service create --name myapp --replicas 3 -p 8000:8000 myapp

# 查看服务状态
docker service ls
docker service ps myapp

# 扩缩容
docker service scale myapp=5

# 更新服务
docker service update --image myapp:v2 myapp

优点

  • 简单易用
  • 与 Docker 集成
  • 自动扩缩容

缺点

  • 功能不如 Kubernetes
  • 社区较小

五、无服务器部署

5.1 AWS Lambda 部署

问题:不想管理服务器。

解决方案:使用 AWS Lambda。

部署步骤

python
# lambda_function.py
import json

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }
bash
# 安装 AWS CLI
pip install awscli

# 配置 AWS
aws configure

# 部署 Lambda
aws lambda create-function \
  --function-name myapp \
  --runtime python3.11 \
  --handler lambda_function.lambda_handler \
  --zip-file fileb://function.zip \
  --role arn:aws:iam::123456789012:role/lambda-role

优点

  • 无需管理服务器
  • 按需付费
  • 自动扩缩容

缺点

  • 冷启动问题
  • 供应商锁定
  • 调试困难

5.2 Google Cloud Functions 部署

问题:需要无服务器部署。

解决方案:使用 Google Cloud Functions。

部署步骤

javascript
// index.js
exports.helloWorld = (req, res) => {
  res.send('Hello from Cloud Functions!');
};
bash
# 安装 gcloud CLI
curl https://sdk.cloud.google.com | bash

# 部署函数
gcloud functions deploy helloWorld \
  --runtime nodejs18 \
  --trigger-http \
  --allow-unauthenticated

优点

  • 无需管理服务器
  • 按需付费
  • 自动扩缩容

缺点

  • 冷启动问题
  • 供应商锁定
  • 调试困难

六、CI/CD 流程

6.1 GitHub Actions

问题:手动部署繁琐。

解决方案:使用 GitHub Actions 自动化。

配置示例

yaml
# .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.11'
    
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    
    - name: Run tests
      run: |
        pytest
    
    - name: Deploy
      run: |
        # 部署命令
        echo "Deploying..."

优点

  • 自动化部署
  • 集成测试
  • 版本控制

缺点

  • 需要配置
  • 学习曲线

6.2 GitLab CI/CD

问题:需要 CI/CD 流程。

解决方案:使用 GitLab CI/CD。

配置示例

yaml
# .gitlab-ci.yml
stages:
  - test
  - build
  - deploy

test:
  stage: test
  script:
    - pytest

build:
  stage: build
  script:
    - docker build -t myapp .

deploy:
  stage: deploy
  script:
    - docker push myapp
    - kubectl apply -f deployment.yaml
  only:
    - main

优点

  • 集成 Git
  • 自动化部署
  • 版本控制

缺点

  • 需要配置
  • 学习曲线

七、最佳实践

7.1 部署清单

部署前检查清单

  • [ ] 代码测试通过
  • [ ] 依赖版本锁定
  • [ ] 环境变量配置
  • [ ] 数据库迁移
  • [ ] 静态资源上传
  • [ ] 域名配置
  • [ ] SSL 证书配置
  • [ ] 监控告警配置

7.2 回滚策略

问题:部署失败需要回滚。

解决方案:制定回滚策略。

回滚步骤

bash
# Git 回滚
git revert HEAD
git push

# Docker 回滚
docker service update --image myapp:v1 myapp

# Kubernetes 回滚
kubectl rollout undo deployment/myapp

7.3 监控告警

问题:部署后不知道状态。

解决方案:配置监控告警。

监控指标

指标阈值告警方式
CPU 使用率> 80%邮件、短信
内存使用率> 80%邮件、短信
响应时间> 1s邮件、短信
错误率> 5%邮件、短信

八、核心洞察

核心洞察

选择合适的部署方式

  • 传统部署:适合小型项目,完全控制
  • 容器化部署:适合中型项目,环境一致
  • 云原生部署:适合大型项目,自动扩缩容
  • 无服务器部署:适合事件驱动,按需付费

记住:没有最好的部署方式,只有最适合的部署方式。


九、参考与延伸

[1] Docker 官方文档(2026)— Docker 容器化

[2] Kubernetes 官方文档(2026)— Kubernetes 编排

[3] GitHub Actions(2026)— CI/CD 自动化


十、下一步

完成本章后,进入:

OPC 超级个体实战指南