logo
0
0
WeChat Login
新建文件 README.md

SecFeedAI - 安全新闻智能聚合与分析系统

GitHub stars GitHub forks GitHub issues GitHub license

项目介绍

SecFeedAI 是一个开源的安全新闻智能聚合与分析系统,通过 RSS 源实时获取全球安全新闻,结合 AI 技术进行智能分析,为安全从业者提供高效、精准的安全资讯服务。

使用场景

  • 安全研究员 - 快速获取最新的安全漏洞、威胁情报和行业动态
  • 安全运维团队 - 及时了解安全事件,辅助决策和响应
  • 安全爱好者 - 学习和跟踪安全领域的最新发展
  • 企业安全部门 - 作为内部安全情报收集和分析工具

功能特点

🔍 核心功能

  • 访客模式 - 支持未登录用户以只读方式浏览仪表板、文章列表和内容分析
  • RSS 源管理 - 支持添加、编辑、删除和测试多种安全相关 RSS 源(需登录)
  • 新闻自动聚合 - 定时从配置的 RSS 源获取最新安全新闻
  • AI 智能分析 - 利用 AI 技术对新闻进行自动摘要、关键词提取和分析
  • 实时推送 - 支持将分析结果推送到指定的 Webhook 地址
  • 系统状态监控 - 实时监控系统运行状态和性能指标
  • JWT 认证 - 基于令牌的安全认证机制,支持 24 小时有效期

📊 技术亮点

  • 前后端分离架构 - 基于 Go + Vue3 的现代化架构
  • 高性能数据库 - 采用 PostgreSQL 存储数据,Redis 缓存加速
  • 定时任务调度 - 灵活的任务调度机制,支持自定义执行频率
  • RESTful API - 标准的 RESTful API 设计,易于扩展和集成
  • 现代化 UI - 基于 Vue3 + Tailwind CSS 的响应式设计

技术栈

后端

  • 语言: Go 1.20+
  • 框架: Gin Web Framework
  • 数据库: PostgreSQL 14+, Redis 6+
  • ORM: GORM
  • 定时任务: 自定义调度器
  • AI 分析: Eino AI API

前端

  • 框架: Vue 3 + TypeScript
  • 构建工具: Vite
  • 路由: Vue Router
  • 状态管理: Pinia
  • UI 框架: TDesign Vue Next + Tailwind CSS
  • HTTP 客户端: Axios
  • 图标库: Lucide Vue Next

快速开始

🐳 Docker 部署(推荐)

最简单的部署方式,使用 Docker Compose 一键部署:

# 克隆项目
git clone https://github.com/YouChenJun/SecFeedAI.git
cd SecFeedAI

# 运行一键部署脚本
./start.sh

脚本会自动引导你完成配置,包括:

  • ✅ 自动生成安全密码和密钥
  • ✅ 交互式配置向导
  • ✅ 一键启动所有服务
  • ✅ 显示完整的访问凭证

详细文档: QUICKSTART.md | DOCKER.md


💻 本地开发部署

如果你想本地开发或调试,可以按照以下步骤手动部署:

环境要求

  • Go: 1.20+ (后端)
  • Node.js: 16+ (前端)
  • PostgreSQL: 14+ (数据库)
  • Redis: 6+ (缓存)

安装部署

1. 克隆项目

git clone https://github.com/YouChenJun/SecFeedAI.git
cd SecFeedAI

2. 配置文件

后端配置
cd backend
cp configs/config.example.yaml configs/config.yaml

编辑 configs/config.yaml 文件,配置数据库、Redis 和 API 密钥等信息:

server:
  port: "8080"
  mode: "debug"

database:
  host: "localhost"
  port: "5432"
  user: "postgres"
  password: "postgres"
  dbname: "secnews"
  sslmode: "disable"

redis:
  host: "localhost"
  port: "6379"
  password: ""
  db: 0

eino:
  api_key: "your_eino_api_key"
  base_url: "https://api.eino.ai/v1"

pusher:
  webhook_urls:
    - "https://your-webhook-url.com"

auth:
  username: ""  # 首次运行时通过初始化页面设置
  password: ""  # 首次运行时通过初始化页面设置
  jwt_secret: ""  # 可选,留空将自动生成
  guest_mode: true  # 访客模式,允许未登录用户只读访问
前端配置
cd ../frontend
cp .env.example .env

编辑 .env 文件,配置后端 API 地址:

VITE_API_BASE_URL=http://localhost:8080

3. 认证设置

SecFeedAI 现在包含完整的认证系统和访客模式支持。首次运行时,系统会自动检测配置状态:

首次运行初始化:

  1. 启动后端和前端服务后,访问前端页面(http://localhost:5173
  2. 系统会自动检测到认证未配置,跳转到初始化页面
  3. 填写管理员信息:
    • 用户名(至少3个字符)
    • 密码(至少6个字符)
    • JWT密钥(可选,留空将自动生成)
    • 是否启用访客模式(默认启用)
  4. 点击"完成设置",系统会自动将认证信息写入 backend/configs/config.yaml

访客模式说明:

当启用访客模式(guest_mode: true)时:

  • 未登录用户可以访问仪表板、文章列表和内容分析页面(只读)
  • RSS 源管理需要登录后才能访问
  • 登录页面会显示"以访客模式继续"按钮,允许用户在不登录的情况下浏览内容
  • 页面顶部会显示橙色的"访客模式"徽章
  • 访客模式仅允许 GET 请求,所有写操作(POST/PUT/DELETE)都需要登录

安全建议:

  • 修改默认密码:首次登录后请立即修改默认密码
  • 保护配置文件:确保 backend/configs/config.yaml 文件权限为 600
    chmod 600 backend/configs/config.yaml
    
  • 使用强密码:密码应包含字母、数字和特殊字符
  • 生产环境:生产环境建议使用 HTTPS
  • 访客模式:如果不需要访客访问,可以在配置文件中设置 guest_mode: false

已配置系统:

如果 config.yaml 中已包含认证配置,访问前端时会直接跳转到登录页面,使用配置的用户名和密码登录即可。

Token 有效期: 访问令牌有效期为 24 小时,过期后需要重新登录。

4. 启动后端服务

cd backend
# 安装依赖
go mod download
# 启动服务
go run cmd/server/main.go

后端服务将在 http://localhost:8080 启动。

5. 启动前端服务

cd ../frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev

前端服务将在 http://localhost:5173 启动。

构建生产版本

后端构建

cd backend
go build -o server cmd/server/main.go
./server

前端构建

cd frontend
npm run build
# 构建产物将生成在 dist 目录

API 文档

后端提供了完整的 RESTful API,主要包括以下端点:

认证接口(公开访问)

  • POST /api/v1/auth/login - 用户登录,获取访问令牌
  • POST /api/v1/auth/setup - 首次运行时初始化认证配置
  • GET /api/v1/auth/setup/status - 检查认证配置状态和访客模式
  • GET /api/v1/auth/verify - 验证访问令牌有效性(需要认证)

RSS 源管理

  • GET /api/v1/rss/sources - 获取 RSS 源列表(访客可访问)
  • POST /api/v1/rss/sources - 创建 RSS 源(需要认证
  • PUT /api/v1/rss/sources/:id - 更新 RSS 源(需要认证
  • DELETE /api/v1/rss/sources/:id - 删除 RSS 源(需要认证
  • POST /api/v1/rss/sources/:id/test - 测试 RSS 源(需要认证

新闻管理

  • GET /api/v1/articles - 获取新闻列表(访客可访问)
  • GET /api/v1/articles/:id - 获取新闻详情(访客可访问)
  • GET /api/v1/articles/dashboard - 获取仪表板统计数据(访客可访问)

分析结果

  • GET /api/v1/analysis/results - 获取分析结果列表(访客可访问)
  • GET /api/v1/analysis/results/:id - 获取分析结果详情(访客可访问)
  • POST /api/v1/analysis/analyze - 手动触发 AI 分析(需要认证

系统状态

  • GET /api/v1/system/status - 获取系统状态(访客可访问)

认证说明:

  • 需要认证的接口必须在请求头中携带有效的 JWT 令牌:
    Authorization: Bearer <your_token>
    
  • 访客可访问的接口(仅 GET 请求)在启用 guest_mode 时无需认证即可访问
  • 所有 POST/PUT/DELETE 操作都需要登录后才能执行

项目结构

SecFeedAI/
├── backend/                 # 后端代码
│   ├── cmd/                # 命令行入口
│   │   └── server/         # 主服务器入口
│   ├── configs/            # 配置文件
│   │   ├── config.yaml     # 主配置文件
│   │   └── config.example.yaml  # 配置示例
│   ├── internal/           # 内部包
│   │   ├── analyzer/       # AI 分析器
│   │   ├── api/            # API 处理程序
│   │   │   ├── routes.go   # 路由配置
│   │   │   ├── auth_handler.go  # 认证处理
│   │   │   ├── rss_handler.go   # RSS 源管理
│   │   │   ├── article_handler.go  # 文章管理
│   │   │   └── analysis_handler.go  # 分析结果
│   │   ├── middleware/     # 中间件
│   │   │   └── auth.go     # JWT 认证和访客模式中间件
│   │   ├── model/          # 数据模型
│   │   ├── repository/     # 数据仓库
│   │   ├── scheduler/      # 任务调度器
│   │   └── service/        # 业务逻辑
│   └── pkg/                # 公共包
│       └── config/         # 配置管理
└── frontend/               # 前端代码
    ├── public/             # 静态资源
    ├── src/                # 源代码
    │   ├── api/            # API 客户端
    │   ├── components/     # Vue 组件
    │   ├── router/         # 路由配置(含访客模式路由守卫)
    │   ├── stores/         # Pinia 状态管理
    │   │   └── auth.ts     # 认证状态和访客模式
    │   ├── views/          # 页面视图
    │   │   ├── Login.vue   # 登录页(含访客模式入口)
    │   │   ├── Setup.vue   # 初始化页面
    │   │   ├── Dashboard.vue  # 仪表板
    │   │   ├── RSSManagement.vue  # RSS 源管理
    │   │   ├── ArticleList.vue  # 文章列表
    │   │   └── Analysis.vue  # 内容分析
    │   ├── App.vue         # 主应用组件(含访客模式 UI)
    │   └── main.ts         # 应用入口
    └── dist/               # 构建产物

贡献指南

欢迎参与 SecFeedAI 项目的开发!无论是报告 Bug、提交功能建议,还是直接贡献代码,我们都非常欢迎。

贡献流程

  1. Fork 本项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交 Pull Request

开发规范

  • 代码风格: 遵循 Go 官方代码风格和 Vue 3 最佳实践
  • 提交信息: 清晰、简洁的提交信息,使用英文
  • 测试: 为新增功能编写测试用例
  • 文档: 更新相关文档

许可证

本项目采用 MIT 许可证,详见 LICENSE 文件。

联系方式

致谢

感谢所有为 SecFeedAI 项目做出贡献的开发者和社区成员!

更新日志

最新功能 (v1.1)

🎉 访客模式

  • 支持未登录用户以只读方式访问系统
  • 可在初始化时配置是否启用访客模式
  • 访客可访问:仪表板、文章列表、内容分析
  • 访客不可访问:RSS 源管理(需要登录)
  • 页面顶部显示"访客模式"徽章
  • 登录页面提供"以访客模式继续"按钮

🔐 认证系统增强

  • 完整的 JWT 认证机制
  • 首次运行自动引导初始化
  • 支持访问令牌验证
  • Token 24 小时有效期
  • 三级权限控制:公开、访客可访问、完全保护

🎨 UI/UX 优化

  • 登录页面重新设计,优化间距和布局
  • Header 增加 RSS 品牌标识(蓝色背景)
  • 访客模式视觉提示(橙色徽章)
  • TDesign Vue Next 组件库集成
  • 响应式设计优化

🛠️ 技术栈更新

  • 前端:添加 Pinia 状态管理、TypeScript 支持
  • 前端:升级 UI 框架为 TDesign Vue Next
  • 后端:访客模式中间件实现
  • 路由:精细化权限控制(GET vs POST/PUT/DELETE)

SecFeedAI - 让安全新闻触手可及,让 AI 分析赋能安全!

About

SecFeedAI 是一个开源的安全新闻智能聚合与分析系统,通过 RSS 源实时获取全球安全新闻,结合 AI 技术进行智能分析,为安全从业者提供高效、精准的安全资讯服务。