Day28: Python全栈火箭发射指南:从代码到云端部署

各位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;
}
用户 Nginx Gunicorn Django/Flask 发送请求 反向代理 处理请求 响应数据 返回结果 最终响应 用户 Nginx Gunicorn Django/Flask

⚙️ 第三章:自动化星际物流 - 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
代码提交
通过测试?
构建Docker镜像
推送镜像仓库
SSH连接服务器
拉取最新镜像
滚动更新服务
发送失败通知

📦 第四章:太空站运维指南 - 生产环境最佳实践

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:

🚦 第五章:星际航行检查清单

  1. 安全加固:
# 安全中间件示例
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
  1. 性能优化矩阵:
# caching_config.py
CACHE_CONFIG = {
    "default": {
        "CACHE_TYPE": "RedisCache",
        "CACHE_REDIS_URL": "redis://cache:6379/0",
        "CACHE_DEFAULT_TIMEOUT": 300
    }
}

“任何足够先进的科技,皆与魔法无异。” —— 亚瑟·克拉克

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhysunny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值