部署指南
一句话总结:将应用部署到生产环境。
📍 本章定位
- 服务方案:全部方案
- 学习方式:📖 选学
- 在流程中的作用:将应用部署到生产环境
- 核心知识点:部署流程、容器化、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-urlyaml
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 8000
type: LoadBalancerbash
# 部署到 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/myapp7.3 监控告警
问题:部署后不知道状态。
解决方案:配置监控告警。
监控指标:
| 指标 | 阈值 | 告警方式 |
|---|---|---|
| CPU 使用率 | > 80% | 邮件、短信 |
| 内存使用率 | > 80% | 邮件、短信 |
| 响应时间 | > 1s | 邮件、短信 |
| 错误率 | > 5% | 邮件、短信 |
八、核心洞察
核心洞察
选择合适的部署方式。
- 传统部署:适合小型项目,完全控制
- 容器化部署:适合中型项目,环境一致
- 云原生部署:适合大型项目,自动扩缩容
- 无服务器部署:适合事件驱动,按需付费
记住:没有最好的部署方式,只有最适合的部署方式。
九、参考与延伸
[1] Docker 官方文档(2026)— Docker 容器化
[2] Kubernetes 官方文档(2026)— Kubernetes 编排
[3] GitHub Actions(2026)— CI/CD 自动化
十、下一步
完成本章后,进入: