site logo

Marico's space

CI/CD 流水线实现:Django 应用部署

Others 2026-05-16 21:07:53 12

最近折腾了一套 Django 项目的 CI/CD(持续集成/持续部署)流水线,用的是 Jenkins + Docker,部署在阿里云 ECS(类似 AWS EC2)上。这玩意儿折腾了我好几天,踩了几个坑,今天把核心架构和关键点捋清楚。

技术架构

整体架构分两层:基础设施层和集成安全层。

基础设施层:

  • 阿里云 ECS t2.medium 实例(Jenkins 控制器 + 应用宿主机)
  • 安全组配置:8080 端口(Jenkins 控制台)、8000 端口(Django 应用)

集成与安全层:

  • GitHub 个人访问令牌认证(需要 repo:read、webhook:write 权限)
  • Webhook 触发器实现流水线自动化执行

流水线组件

完整的流水线包含这几个阶段:

  • 源码管理:GitHub 仓库轮询
  • 构建阶段:从 Dockerfile 构建 Docker 镜像
  • 容器管理:停止已有容器、清理未使用镜像
  • 部署:docker run 并配置端口映射和环境变量
Jenkins Deployment Screenshot

自动化流程

完整的流程链路:

代码推送 → Webhook 触发 → Jenkins 构建 → Docker 容器化 → 自动部署

这条链路打通之后,每次往 GitHub 推代码,Jenkins 自动拉取、构建镜像、停掉旧容器、跑新容器,全程不用人工干预。

几个坑

搞这套流水线踩了这些坑:

  1. 安全组规则一开始只开了 8000,结果 Jenkins 控制台访问不了,加上 8080 才解决
  2. Docker 镜像清理没做好,磁盘占用越来越大,得加上 docker system prune
  3. Webhook 权限不够,Jenkins 收不到推送通知,PAT 权限要手动加上 webhook:write

关键收获

  • 基础设施即代码(Infrastructure as Code)思想,用配置文件管理环境
  • 容器编排基础,理解 docker run 的各项参数
  • CI/CD 认证安全最佳实践,权限要最小化
Terminal Screenshot

这套方案适合中小型 Django 项目,如果流量上来,后续可以加个负载均衡和多实例部署。

原文链接:https://dev.to/...