目录
各位Python宇航员!准备好将你的代码送上云端了吗?今天我们要把开发机变成火箭发射基地,探索从本地开发到生产部署的完整星际航行!🌌
🛠️ 第一章:容器化革命 - 打包你的数字宇宙飞船
1.1 Docker引擎启动
# Dockerfile (多阶段构建优化版)
# 构建阶段
FROM python:3.10-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
# 生产阶段
FROM python:3.10-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
RUN useradd -M astronaut && chown -R astronaut /app
USER astronaut
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "launchpad:app"]
🌐 第二章:星际高速公路 - WSGI与Nginx的完美搭档
2.1 Gunicorn发射台配置
# gunicorn_config.py
workers = 4
worker_class = "uvicorn.workers.UvicornWorker"
bind = "0.0.0.0:8000"
timeout = 120
keepalive = 5
accesslog = "-"
errorlog = "-"
2.2 Nginx太空站路由
# nginx.conf
upstream rocket {
server web:8000;
}
server {
listen 80;
client_max_body_size 100M;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://rocket;
}
location /static {
alias /app/static;
expires 30d;
access_log off;
}
gzip on;
gzip_types text/plain text/css application/json application/javascript;
}
⚙️ 第三章:自动化星际物流 - CI/CD流水线搭建
3.1 GitHub Actions发射流程
# .github/workflows/launch.yml
name: Space Deployment
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
- run: pip install -r requirements.txt
- run: pytest --cov=.
deploy:
needs: test
runs-on: ubuntu-latest
env:
DOCKER_USER: ${{ secrets.DOCKER_USER }}
DOCKER_PWD: ${{ secrets.DOCKER_PWD }}
steps:
- uses: actions/checkout@v3
- name: Build and push
uses: docker/build-push-action@v3
with:
tags: yourusername/space-rocket:latest
push: true
- name: Deploy to server
uses: appleboy/ssh-action@v0.1.10
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
docker pull yourusername/space-rocket:latest
docker-compose down
docker-compose up -d
📦 第四章:太空站运维指南 - 生产环境最佳实践
4.1 监控系统仪表盘
# prometheus_config.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'rocket_metrics'
static_configs:
- targets: ['web:8000']
- job_name: 'nginx_metrics'
metrics_path: /status/format/prometheus
static_configs:
- targets: ['nginx:80']
4.2 日志管理系统
# docker-compose.yml
version: '3.8'
services:
web:
image: yourusername/space-rocket:latest
environment:
- LOG_LEVEL=INFO
volumes:
- logs:/app/logs
loki:
image: grafana/loki:2.6.1
ports:
- "3100:3100"
volumes:
logs:
🚦 第五章:星际航行检查清单
- 安全加固:
# 安全中间件示例
from secure import SecureHeaders
secure_headers = SecureHeaders()
@app.middleware("http")
async def set_secure_headers(request, call_next):
response = await call_next(request)
secure_headers.framework.fastapi(response)
return response
- 性能优化矩阵:
# caching_config.py
CACHE_CONFIG = {
"default": {
"CACHE_TYPE": "RedisCache",
"CACHE_REDIS_URL": "redis://cache:6379/0",
"CACHE_DEFAULT_TIMEOUT": 300
}
}
“任何足够先进的科技,皆与魔法无异。” —— 亚瑟·克拉克