Heyyprakhar1/microservices-ecommerce-devsecops
GitHub: Heyyprakhar1/microservices-ecommerce-devsecops
一个基于 Flask 微服务、JWT 与 Google OAuth 的电商示例,集成 7 阶段 DevSecOps 流水线以解决实战化 DevOps 与安全治理难题。
Stars: 1 | Forks: 0
# 🛒 微服务电商平台
### DevSecOps · Kubernetes · Google OAuth · 7阶段 CI/CD 流水线
[](.)
[](.)
[](.)
[](.)
[](.)
[](.)
## 这是什么
三个 Flask 微服务 —— Auth、Product、Order,每个服务拥有独立 MySQL 数据库,并通过 Nginx API 网关运行。构建目的是实践真实的 DevOps 工作流,而非跟随教程。
每次推送到 `main` 分支都会经过 7 阶段 DevSecOps 流水线。所有阶段通过前,没有服务会被部署到服务器。Auth 支持密码登录和 Google OAuth。
这不是玩具项目。目标是做出能够在求职面试中经得起追问的项目。
## 服务
| 服务 | 端口 | 功能 |
|---|---|---|
| Auth 服务 | 5001 | 注册、登录、Google OAuth、JWT 令牌 |
| 产品服务 | 5002 | 产品目录、库存 CRUD |
| 订单服务 | 5003 | 下单与追踪订单 |
| Nginx 网关 | 80 | 所有流量的单一入口点 |
## 技术栈
| 层级 | 工具 |
|---|---|
| 服务 | Python、Flask、SQLAlchemy |
| 认证 | JWT + Google OAuth 2.0 (Authlib) |
| 数据库 | MySQL 8.0 |
| 容器 | Docker、Docker Compose |
| 镜像仓库 | Docker Hub |
| CI/CD | GitHub Actions(7 个工作流) |
| 安全 | Trivy、Gitleaks、Hadolint、Bandit、pip-audit |
| 编排 | Kubernetes(本地 kind),计划部署 EKS |
| GitOps | 计划使用 Argo CD |
| 监控 | 计划使用 Prometheus + Grafana |
## 认证 —— 两种登录方式
标准邮箱/密码注册与登录。此外支持 Google OAuth —— 在浏览器中访问 `/api/auth/google/login`,使用 Google 登录后即可获得 JWT。两种方式的令牌格式一致,因此系统其余部分不关心具体的认证方式。
```
GET /api/auth/google/login → redirects to Google
GET /api/auth/google/callback → Google returns here → JWT issued
```
Google 用户会在首次登录时自动创建账户。其密码字段保持为 null —— 尝试使用密码登录 Google 账户会返回 401。
## API 路由
### 认证 — `/api/auth`
| 方法 | 路由 | 认证 | 描述 |
|---|---|---|---|
| GET | `/health` | 否 | 健康检查 |
| POST | `/register` | 否 | 创建账户 |
| POST | `/login` | 否 | 获取 JWT 令牌 |
| POST | `/verify` | Bearer | 验证令牌 |
| GET | `/google/login` | 否 | 启动 Google OAuth |
| GET | `/google/callback` | 否 | Google OAuth 回调 |
### 产品 — `/api/products`
| 方法 | 路由 | 认证 | 描述 |
|---|---|---|---|
| GET | `/health` | 否 | 健康检查 |
| GET | `/` | 否 | 列出所有产品 |
| GET | `/` | 否 | 获取单个产品 |
| POST | `/` | JWT | 添加产品 |
| PUT | `/` | JWT | 更新产品 |
| DELETE | `/` | JWT | 删除产品 |
### 订单 — `/api/orders`
| 方法 | 路由 | 认证 | 描述 |
|---|---|---|---|
| GET | `/health` | 否 | 健康检查 |
| POST | `/` | JWT | 下单 |
| GET | `/` | JWT | 获取我的订单 |
| GET | `/` | JWT | 获取单个订单 |
| PUT | `//status` | JWT | 更新订单状态 |
## DevSecOps 流水线
```
Push to main
│
├── code-quality-scan (Flake8 + Bandit)
├── dependency-scan (pip-audit)
├── secrets-scan (Gitleaks)
├── dockerfile-scan (Hadolint)
│
▼ all pass
│
├── docker-build-push (build + push to Docker Hub)
│
▼
├── image-scan (Trivy — HIGH/CRITICAL CVEs block deploy)
│
▼
└── deploy-to-server (SSH → docker compose up)
```
**统计:** 7 个工作流 · 69+ 次提交 · 平均端到端约 3 分 14 秒 · 零密钥泄露
## Dockerfile
多阶段构建,所有服务均使用非 root 用户运行。
```
# 阶段 1 — 构建器
FROM python:3.12-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
# 阶段 2 — 运行时,非 root
FROM python:3.12-slim
RUN addgroup --system appgroup && adduser --system --ingroup appgroup appuser
WORKDIR /app
COPY --from=builder /install /usr/local
COPY app/ ./app/
COPY run.py .
RUN chown -R appuser:appgroup /app
USER appuser
```
## 本地运行
**前提条件:** 已安装 Docker 和 Docker Compose。
```
git clone https://github.com/Heyyprakhar1/microservices-ecommerce-devsecops.git
cd microservices-ecommerce-devsecops
docker compose up --build -d
```
三个服务与 MySQL 会自动启动。`init.sql` 会在首次运行时创建三个数据库。
**快速测试:**
```
# 注册
curl -X POST http://localhost:5001/api/auth/register \
-H "Content-Type: application/json" \
-d '{"username":"prakhar","email":"p@test.com","password":"test123"}'
# 登录
TOKEN=$(curl -s -X POST http://localhost:5001/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"p@test.com","password":"test123"}' | python3 -c "import sys,json; print(json.load(sys.stdin)['token'])")
# Google OAuth(在浏览器中打开)
# http://localhost:5001/api/auth/google/login
# 创建产品
curl -X POST http://localhost:5002/api/products/ \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"name":"Nike Shoes","price":99.99,"stock":50,"category":"footwear"}'
```
## 项目结构
```
microservices-ecommerce-devsecops/
├── services/
│ ├── auth-service/
│ │ ├── app/
│ │ │ ├── __init__.py
│ │ │ ├── config.py
│ │ │ ├── models.py
│ │ │ └── routes.py
│ │ ├── Dockerfile
│ │ ├── requirements.txt
│ │ └── run.py
│ ├── product-service/
│ └── order-service/
├── k8s/
│ ├── auth-service/
│ ├── product-service/
│ ├── order-service/
│ ├── mysql/
│ └── ingress.yaml
├── .github/
│ └── workflows/
│ ├── DevSecOps-pipeline.yml
│ ├── code_quality.yml
│ ├── dependency_scan.yml
│ ├── secrets-scan.yml
│ ├── dockerfile-scan.yml
│ ├── docker-build-push.yml
│ ├── image-scan.yml
│ └── deploy_to_server.yml
├── terraform/
├── docker-compose.yml
└── init.sql
```
## 状态
- ✅ 认证服务(Flask + MySQL + JWT + Google OAuth)
- ✅ 产品服务
- ✅ 订单服务
- ✅ 多阶段 Dockerfile(非 root 用户)
- ✅ Docker Compose
- ✅ DevSecOps 流水线(7 阶段,69+ 次运行)
- ✅ Kubernetes 清单(HPA、Ingress、命名空间)
- ✅ Terraform(AWS EC2 配置)
- ⏳ EKS 部署
- ⏳ Helm Chart
- ⏳ Argo CD(GitOps)
- ⏳ Prometheus + Grafana 监控
- ⏳ AI 聊天机器人服务(Ollama)
**由 [Prakhar Srivastava](https://github.com/Heyyprakhar1)** 构建
· [作品集](https://prakharsrivastavadevops.netlify.app/)
· [领英](https://linkedin.com/in/heyyprakhar1)
标签:7阶段, Argo CD, Bandit, DevSecOps, Docker, Docker Compose, Docker Hub, EKS, Flask, GitHub Actions, Gitleaks, Google OAuth, Hadolint, JWT, Nginx, NIDS, pip-audit, Python, SQLAlchemy, 上游代理, 单体网关, 后端, 多引擎聚合, 子域名突变, 安全扫描, 安全防御评估, 容器化, 左移安全, 库存管理, 无后门, 时序注入, 服务注册, 流水线, 电商, 监控系统, 网关, 自动笔记, 计划中, 订单管理, 认证, 请求拦截, 逆向工具, 面试实战