hunjanhar/news-sphere-app

GitHub: hunjanhar/news-sphere-app

一个基于 MERN 架构的全栈新闻聚合平台,结合 Terraform、Jenkins、ArgoCD 实现从基础设施到应用部署的全自动化 DevSecOps 流水线。

Stars: 0 | Forks: 0

# NewsSphere — 全栈新闻应用 一个使用 React、Node.js、MongoDB 和 Redis 构建的全栈新闻聚合与社区平台 — 部署在运行 Minikube 作为 Kubernetes 平台的单个 AWS EC2 实例上,并由 Jenkins、ArgoCD 和 HashiCorp Vault 驱动全自动化的 CI/CD pipeline。 ## 架构图 ![NewsSphere AWS 架构](https://static.pigsec.cn/wp-content/uploads/repos/cas/c8/c8102490a856778aef05528942eaa3083240075312f5bb113d69fdb456a8a5d1.png) ## 项目概述 NewsSphere 允许用户浏览头条新闻、注册/登录、对文章进行评论以及联系团队。后端从外部 API 代理新闻,并将响应缓存在 Redis 中。所有应用数据(用户、评论、联系提交)均持久化存储在 MongoDB 中。 整个基础设施 — 从 AWS VPC 到 Kubernetes deployments — 均使用 Terraform(基础设施)和 Ansible(配置)以代码形式进行管理,然后通过 ArgoCD 的 GitOps workflow 进行部署并保持同步。 ![NewsSphere 应用程序](https://static.pigsec.cn/wp-content/uploads/repos/cas/d0/d091026d2c9a9de62e3b535461b8b445534d0cd63f318ae5b5b84604add34dca.png) ![NewsSphere 应用程序](https://static.pigsec.cn/wp-content/uploads/repos/cas/c9/c9fd356ce26303b1d3c69f87cbb1bf683aa266170287c91549171103314e3bf9.png) ![NewsSphere 应用程序](https://static.pigsec.cn/wp-content/uploads/repos/cas/4b/4b7bbd350f454b9b9b00a367cfb0dd38007b26a29fb36ae2140487a8e63c18f2.png) ![NewsSphere 应用程序](https://static.pigsec.cn/wp-content/uploads/repos/cas/c8/c8f7c4a293e61ac6b00494abe610c59d055194fc1dae91274e8231d2b62d7854.png) ![NewsSphere 应用程序](https://static.pigsec.cn/wp-content/uploads/repos/cas/42/420f9102619590ece58afc27660113bc00467cb85869db1e6ebc32927436c035.png) ![NewsSphere 应用程序](https://static.pigsec.cn/wp-content/uploads/repos/cas/31/31e9714cde55bd3b379a8e31654880582fbbbca35c601ef14ecfbe7ee153aefe.png) ## CI/CD Pipeline 该 pipeline 分为两个按顺序协同工作的 Jenkins 作业。 ### CI Pipeline (`Jenkinsfile.ci`) 在每次推送到 `main` 分支时运行。 ``` Fetch Source Code │ Install Dependencies (frontend + backend npm install) │ Run Tests (Vitest for frontend, Jest for backend) [parallel] │ Security Scans ├── TruffleHog (secrets scan on git history) └── Trivy (filesystem vulnerability scan) │ SonarQube Code Analysis │ Generate Image Tag → {BUILD_NUMBER}-{short-commit} │ Docker Build ├── Build frontend image ├── Trivy scan frontend image ├── Build backend image └── Trivy scan backend image │ Push to Docker Hub → hunjanhar/news-sphere-{frontend,backend}:{tag} │ Trigger CD Pipeline (passing IMAGE_TAG) ``` ### CD Pipeline (`Jenkinsfile.cd`) 在成功构建后由 CI 自动触发。 ``` Verify Images on Docker Hub │ Update k8s Manifests → sed image tags in k8s/prod-deployment/ │ kubectl dry-run validation │ Push Secrets to Vault └── kv put secret/production/news-sphere {MONGO_URL, REDIS_URL, ...} │ kubectl create/refresh namespace + Vault token secret │ Git Commit + Push updated manifests to prod branch │ Apply ArgoCD Application (if not already running) │ ArgoCD Sync + Health Check → wait for Succeeded + Healthy │ Port-Forward Services ├── ArgoCD :8085 ├── Grafana :3000 ├── Prometheus :9090 └── App via Ingress :5000 │ OWASP ZAP DAST Scan → full scan against live app URL │ Email Notification (success or failure) ``` ## 仓库结构 ``` news_sphere/ ├── .jenkins/ │ ├── Jenkinsfile.ci # CI pipeline │ └── Jenkinsfile.cd # CD pipeline ├── frontend/ # React + Vite application ├── backend/ # Node.js + Express API ├── terraform/ # AWS infrastructure │ └── playbooks/ │ └── roles/config/tasks/ # Ansible tasks (all tooling installation) ├── remote-infa/ # Terraform remote state backend ├── k8s/ │ └── prod-deployment/ # Production manifests (kustomize) ├── argocd-config/ # ArgoCD Application definition ├── vars/ # Jenkins shared library Groovy scripts └── docker-compose.yml # Local development compose stack ``` ## 快速开始 ### 1. 前置条件 - 配置了 `ap-south-1` 访问权限的 AWS CLI - Terraform ≥ 5.0 - 本地安装了 Ansible - 已生成 SSH 密钥对(`news-sphere-ec2` / `news-sphere-ec2.pub`) ### 2. 准备远程状态(仅限首次) ``` cd remote-infa/ terraform init terraform apply ``` ### 3. 提供 EC2 + 使用 Ansible 进行配置 ``` cd terraform/ terraform init terraform apply # Terraform 将会: # 1. 创建 VPC、subnet、IGW、security group、EC2 # 2. 生成 hosts.ini inventory # 3. 等待 SSH 准备就绪 # 4. 运行:ansible-playbook -i hosts.ini playbooks/config.yml ``` Ansible playbook 会自动安装 Docker、Jenkins、Minikube、所有安全工具以及所有 Helm charts。这大约需要 15–20 分钟。 ### 4. 获取 EC2 IP ``` terraform output SERVER_IP ``` ### 5. 配置 Jenkins 打开 `http://:8080` 并配置: - Docker Hub 凭证(`docker-registry-credentials-id`) - GitHub token(`github-token`) - SonarQube token(`sonar-token-id`)和服务器 URL(`SONAR_SERVER_URL`) - Vault root token(`vault-root-token`) - MongoDB URL(`mongo-url`)、Redis URL(`redis-url`)、API key(`api-key`) - 电子邮件凭证(`EMAIL`)、服务器 URL(`server-url`)、EC2 IP(`ip`) 将 `local-shared-library` 指向此仓库,以便 Jenkins 可以从 `vars/` 加载共享库。 ## 许可证 请参阅 [LICENCE](./LICENCE)。
标签:DevSecOps, GitOps, MERN架构, MITM代理, 上游代理, 子域名突变, 搜索引擎查询, 新闻聚合平台, 系统提示词, 自定义脚本, 自定义请求头, 请求拦截