外观
容器、服务器与云部署
部署从最简单、可观察的方案开始:静态站点用托管平台,单个 API 用容器或 Serverless;只有真实规模、隔离和调度需求出现时再引入 Kubernetes。
Docker
Docker 镜像固定系统依赖和启动方式,不自动保证数据、GPU 驱动和外部服务可复现。
dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN pip install uv && uv sync --frozen --no-dev
COPY . .
CMD ["uv", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]使用 .dockerignore 排除 Git、数据、权重和本地环境;固定基础镜像版本,多阶段构建减少产物,容器使用非 root 用户。密钥通过运行时注入,不写入 Dockerfile、构建参数或镜像层。
Docker Compose
Compose 用一份 YAML 启动 API、数据库和缓存等本地服务。增加 healthcheck,使用命名 Volume 保存状态,把示例变量放 .env.example,真实 .env 不提交。Compose 适合开发、小型单机部署和集成测试,不等同于跨节点编排。
Kubernetes
Kubernetes 用 Deployment、Service、ConfigMap、Secret、Job 等资源管理容器。只有团队能承担集群升级、网络、存储、监控和安全时才采用。
设置 requests/limits、健康检查、滚动策略和命名空间;训练任务通常使用 Job 与调度扩展,不把长训练塞进 Web Deployment。Secret 只解决分发接口,不自动提供加密、轮换和最小权限。
Nginx
Nginx 常用于静态文件、TLS 终止和反向代理。正确转发 Host、客户端 IP 和协议头,对上传大小、超时和长连接按应用设置。配置修改后先运行 nginx -t,再平滑 reload;日志避免记录 Token 和敏感查询参数。
Netlify 与 Vercel
两者都能连接 Git 仓库完成预览和生产部署。Netlify 适合静态站点与其函数生态,Vercel 与主流前端框架集成紧密。比较构建环境、路由、函数运行时、地域、团队权限和成本,不要只凭默认模板选择。
浏览器可见的环境变量都不是秘密。预览部署也可能泄露未发布内容,应设置访问控制。
Cloudflare Pages
Pages 支持从 Git 或构建产物发布站点,并可结合 Functions 处理动态请求。确认构建命令、输出目录、Node 版本和环境变量作用域;静态资产适合 Pages,复杂后端可独立为 Worker 或其他服务。
Cloudflare Workers
Workers 在 Cloudflare 网络上运行 Serverless 代码。请求处理应无共享进程内状态,把可持久状态放入绑定服务;返回流时保持流式传输,不先完整缓冲大响应。异步副作用使用运行时提供的生命周期机制,避免响应结束后任务被丢弃。
项目声明 compatibility date,并通过绑定访问 KV、R2 等资源。密钥使用 Secret 管理,不写进配置文件。具体 API、限制和计费会变化,应在部署前查阅当前官方文档。
Cloudflare KV
KV 是分布式键值存储,适合配置、会话提示和读取密集缓存。它不是强一致数据库;写入传播和并发更新要求决定了它不适合余额、锁和强一致计数。Key 设计要支持访问模式,并对缓存内容设置合理过期。
Cloudflare R2
R2 是 S3 兼容对象存储,适合数据集、模型、图片和构建产物。对象存储不是文件系统:覆盖、列举和并发写需要按对象语义设计。使用签名 URL 或受控 Worker 提供私有下载,设置生命周期、CORS 和最小权限凭据。
一条务实的部署路径
text
静态文档 → GitHub Pages / Netlify / Vercel / Pages
单个模型 Demo → Gradio / Streamlit 托管或一个容器
API + 数据库 → Docker Compose 起步,托管数据库优先
边缘 API / 轻量状态 → Workers + KV / R2
多服务、跨节点和复杂调度 → 评估 Kubernetes所有部署都应具备健康检查、结构化日志、错误追踪、备份恢复、访问控制和回滚版本。发布前核对数据是否允许离开研究环境。
参考:Docker 文档、Kubernetes 文档、Nginx 文档、Cloudflare Pages、Workers、KV、R2。