update: 2026-03-28 20:59

This commit is contained in:
2026-03-28 20:59:52 +08:00
parent e21d58e603
commit 1c81d4e6ea
611 changed files with 27847 additions and 65061 deletions

523
README.md
View File

@@ -1,303 +1,248 @@
# InfoGenie 万象口袋
# InfoGenie 万象口袋
> 🎨 一个多功能聚合软件应用 💬
> 跨平台多功能聚合 Web 应用资讯榜单、工具箱、小游戏、AI 工具等。
## 📋 项目概述
## 项目概述
InfoGenie 是一个前后端分离的多功能聚合应用提供实时数据接口、休闲游戏、AI工具等丰富功能。
InfoGenie 采用**前后端分离**架构:
### 🌐 部署环境
- **前端**React 18CRA+ React Router + Styled ComponentsPWA核心导航在 SPA 内,大量能力以 `public/` 下**静态 HTML** 嵌入(`FullscreenEmbed`)。
- **后端****Go + Gin + GORM + MySQL**提供健康检查、AI 代理等 REST 接口;用户登录与资料以**萌芽账户统一认证中心Sprout Gate**为准,详见仓库根目录 `SPROUT_GATE_API_DOCS.md`
- **个人中心**:仅**只读展示**认证中心同步的资料与统计;**每日签到、改资料、领萌芽币**请在认证中心完成,本站不提供签到按钮。
- **前端部署地址**: https://infogenie.shumengya.top
- **后端部署地址**: https://infogenie.api.shumengya.top
### 部署环境(示例)
### 🏗️ 技术架构
#### 前端技术栈
- **核心框架**: React 18.2.0 + React Router DOM 6.15.0
- **样式方案**: Styled Components 6.0.7 (CSS-in-JS)
- **HTTP客户端**: Axios 1.5.0
- **UI组件**: React Icons 4.11.0 + React Hot Toast 2.4.1
- **状态管理**: React Context API
- **构建工具**: Create React App
- **PWA支持**: Service Worker
#### 后端技术栈
- **Web框架**: Flask 2.3.3 (轻量、灵活、可扩展)
- **数据库**: MongoDB + PyMongo 4.5.0 (文档型数据存储)
- **认证机制**: JWT Token (PyJWT 2.8.07天有效期)
- **密码安全**: Werkzeug 2.3.7 (高强度密码哈希)
- **跨域支持**: Flask-CORS 4.0.0
- **API限流**: Flask-Limiter 3.5.0 (防止API滥用)
- **环境配置**: python-dotenv 1.0.0
- **邮件服务**: 基于SMTP协议的原生实现
#### 架构特点
- **前后端分离**: RESTful API架构无状态通信
- **混合架构**: React SPA + 静态HTML页面无缝集成
- **模块化设计**: Flask蓝图 + React组件化
- **容器化部署**: Docker + docker-compose支持
- **多环境配置**: 开发/测试/生产环境分离
### 🌟 主要功能
#### 📡 60s API 模块
- **热搜榜单**: 抖音、微博、猫眼票房、头条、网易云、知乎、HackerNews等实时热搜
- **日更资讯**: 60秒读懂世界、必应每日壁纸、历史上的今天、每日国际汇率
- **实用功能**: 百度百科词条、公网IP地址、哈希解压压缩、链接OG信息、农历信息、生成二维码、天气预报、EpicGames免费游戏
- **娱乐消遣**: 随机唱歌音频、随机发病文学、随机搞笑段子、随机冷笑话、随机一言、随机运势、随机JavaScript趣味题、随机KFC文案
#### 🎮 小游戏模块
- 2048游戏
- 别踩白方块
- 俄罗斯方块
- 移动端优化
- 即点即玩
#### 🤖 AI模型模块
- **AI变量命名助手**: 智能生成编程变量名
- **AI写诗小助手**: 基于主题创作诗歌
- **AI姓名评测**: 姓名寓意分析和评分
- **萌芽币消费系统**: 每次AI调用消耗100萌芽币
- **多模型支持**: 集成DeepSeek、Kimi等AI服务
- **需要登录验证**: JWT Token认证
#### 👤 用户系统
- **邮箱验证注册**: QQ邮箱验证码注册登录
- **用户资料管理**: 头像、用户名等个人信息
- **签到系统**: 每日签到获取经验值和萌芽币
- **等级系统**: 基于经验值的用户等级计算
- **萌芽币管理**: 虚拟货币系统用于AI功能消费
- **使用统计**: AI调用次数和萌芽币消费记录
## 🏛️ 架构设计亮点
### 🔄 混合架构创新
- **React SPA核心层**: 处理用户认证、全局状态管理和主要导航逻辑
- **静态HTML模块**: 大量功能模块使用原生HTML/CSS/JS实现降低加载时间
- **通信机制**: 通过postMessage API实现SPA与静态页面的数据交换
### 🧩 模块化设计
- **前端组件化**: 基于React的原子设计系统从原子级别到页面级别
- **后端蓝图架构**: Flask蓝图实现功能模块解耦提高可维护性
- **装饰器模式**: 横切关注点(认证、萌芽币消费)集中处理
### 🔒 安全与性能
- **多层次认证**: JWT Token + 邮箱验证码双因素认证
- **API限流保护**: 防止暴力攻击和资源耗尽
- **性能优化**: 代码分割、懒加载、PWA缓存策略
- **数据安全**: 密码哈希存储、敏感配置外部化
### 🚀 部署与扩展
- **容器化部署**: Docker + docker-compose支持
- **多环境配置**: 开发/测试/生产环境分离
- **微服务友好**: 模块化设计便于未来微服务拆分
## 🚀 快速开始
### 📋 环境要求
- **Python**: 3.8+
- **Node.js**: 14+
- **MongoDB**: 4.0+
- **npm**: 6.0+
### 📦 安装依赖
#### 后端依赖
```bash
cd InfoGenie-backend
pip install -r requirements.txt
```
#### 前端依赖
```bash
cd InfoGenie-frontend
npm install
```
主要依赖包:
- React 18.2.0
- React Router DOM 6.15.0
- Styled Components 6.0.7
- Axios 1.5.0
- React Hot Toast 2.4.1
- React Icons 4.11.0
### 🖥️ 前端部署
1. 进入前端目录:`cd InfoGenie-frontend`
2. 安装依赖:`npm install`
3. 构建生产环境应用:`npm run build`
4.`build` 目录下的所有文件上传到前端服务器的网站根目录
也可以直接运行 `InfoGenie-frontend/build_frontend.bat` 脚本进行构建。
### ⚙️ 后端部署
#### 方式一:传统部署
1. 进入后端目录:`cd InfoGenie-backend`
2. 安装依赖:`pip install -r requirements.txt`
3. 配置环境变量或创建 `.env` 文件:
```env
# 数据库配置
MONGO_URI=mongodb://localhost:27017/infogenie
# 邮件服务配置
MAIL_USERNAME=your_email@qq.com
MAIL_PASSWORD=your_email_auth_code
MAIL_SERVER=smtp.qq.com
MAIL_PORT=587
# 应用配置
SECRET_KEY=your_secret_key_here
SESSION_COOKIE_SECURE=True
FLASK_ENV=production
# AI服务配置
DEEPSEEK_API_KEY=your_deepseek_api_key
KIMI_API_KEY=your_kimi_api_key
```
4. 使用 Gunicorn 启动应用:
```bash
gunicorn -w 4 -b 0.0.0.0:5000 "app:create_app()"
```
#### 方式二Docker部署推荐
1. 进入后端目录:`cd InfoGenie-backend`
2. 构建Docker镜像
```bash
docker build -t infogenie-backend .
```
3. 使用docker-compose启动
```bash
docker-compose up -d
```
4. 或者直接运行构建脚本:
```bash
./build_docker.sh # Linux/Mac
# 或
build_docker.bat # Windows
```
#### 环境配置说明
- **开发环境**: 使用 `.env` 文件配置本地开发环境
- **生产环境**: 使用 `.env.production` 文件或环境变量注入
- **反向代理**: 配置Nginx将 `https://infogenie.api.shumengya.top` 反向代理到后端服务
### ⚙️ 配置说明
#### 前端配置
前端通过环境变量配置API基础URL
- 开发环境:`.env.development` 文件中设置 `REACT_APP_API_URL=http://localhost:5000`
- 生产环境:`.env.production` 文件中设置 `REACT_APP_API_URL=https://infogenie.api.shumengya.top`
#### 后端配置
后端通过 `config.py` 和环境变量进行配置:
- MongoDB连接通过环境变量 `MONGO_URI` 设置
- 邮件服务:通过环境变量 `MAIL_USERNAME` 和 `MAIL_PASSWORD` 设置支持QQ邮箱
- 认证配置支持QQ邮箱验证登录
- CORS配置在 `app.py` 中配置允许的前端域名
#### 60sAPI配置
60sAPI模块的静态文件位于 `frontend/60sapi` 目录,通过后端的静态文件服务提供访问。
各API模块的接口地址已配置为 `https://infogenie.api.shumengya.top/api/60s`。
#### 项目结构
```
InfoGenie/
├── InfoGenie-backend/ # 后端Python Flask应用
│ ├── app.py # 主应用入口
│ ├── config.py # 配置文件
│ ├── requirements.txt # Python依赖
│ ├── Dockerfile # Docker构建文件
│ ├── docker-compose.yml # Docker编排文件
│ ├── .env # 环境变量配置
│ ├── modules/ # 功能模块
│ │ ├── auth.py # 用户认证
│ │ ├── user_management.py # 用户管理
│ │ ├── email_service.py # 邮件服务
│ │ └── aimodelapp.py # AI模型应用
│ ├── test/ # 测试文件
│ └── 后端架构文档.md # 后端架构文档
├── InfoGenie-frontend/ # 前端应用
│ ├── src/ # React源码
│ │ ├── components/ # 公共组件
│ │ ├── pages/ # 页面组件
│ │ ├── contexts/ # React Context
│ │ ├── utils/ # 工具函数
│ │ └── styles/ # 全局样式
│ ├── public/ # 静态资源
│ │ ├── 60sapi/ # 60s API静态页面
│ │ ├── aimodelapp/ # AI模型应用页面
│ │ └── smallgame/ # 小游戏页面
│ ├── package.json # 前端依赖
│ ├── setting.json # 前端配置
│ └── 前端架构文档.md # 前端架构文档
├── README.md # 项目说明
├── LICENSE # 许可证
└── 项目架构说明.txt # 项目架构说明
```
#### 前端依赖
```bash
cd frontend/react-app
npm install
```
### 🎯 启动服务
#### 方式一:使用启动器(推荐)
```bash
# 双击运行 启动器.bat
# 选择相应的启动选项
```
#### 方式二:手动启动
**启动后端服务**
```bash
cd InfoGenie-backend
python app.py
# 后端服务: http://localhost:5002
```
**启动前端服务**
```bash
cd InfoGenie-frontend
npm start
# 前端服务: http://localhost:3000
```
## 📞 联系方式
- **开发者**: 万象口袋
- **项目地址**: https://github.com/shumengya/InfoGenie
- **演示地址**: https://infogenie.shumengya.top
- **API地址**: https://infogenie.api.shumengya.top
- **反馈邮箱**: 请通过GitHub Issues反馈
- **ICP备案**: 蜀ICP备2025151694号
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情
| 环境 | 地址 |
|------|------|
| 前端 | https://infogenie.shumengya.top |
| 后端 API | https://infogenie.api.shumengya.top |
| 认证中心 | 见前端 `REACT_APP_AUTH_URL` 配置 |
---
<div align="center">
## 技术架构
**✨ 感谢使用 InfoGenie 万象口袋 ✨**
### 前端
🎨 *一个多功能的聚合软件应用* 💬
| 技术 | 用途 |
|------|------|
| React 18、React Router 6 | UI 与路由 |
| Styled Components | 组件样式 |
| Axios | 请求封装(业务 API + 认证中心 API |
| react-hot-toast | 提示 |
| Service Worker | PWA 离线缓存 |
*支持Web、Windows、Android多平台*
### 后端(`InfoGenie-go-backend/`
</div>
| 技术 | 用途 |
|------|------|
| Go、Gin | HTTP 服务 |
| GORM | MySQL ORM |
| JWT与 Sprout Gate 颁发令牌配合) | 鉴权相关逻辑以实际代码为准 |
| godotenv | 环境变量 |
### 数据库
- **MySQL**:业务数据(如 AI 使用记录等),具体表结构见 Go 迁移/模型。
### 架构特点
- **混合前端**:列表页在 React`Api60sPage``ToolboxPage`),详情以 iframe 全屏嵌入静态页,统一走 `FullscreenEmbed`
- **60s API 静态页**`public/60sapi/**.html`;路由 **`/60sapi/:itemId`**`Api60sItemPage`)通过 `Api60sConfig.js`**`API_ITEM_STATIC_HTML`** 映射到对应 HTML。内嵌时加载 **`public/60sapi/ig-embed.js`**,在 iframe 内隐藏静态页自带顶栏,避免与外层重复。
- **模块化**:前端 `components/``pages/``config/`;后端 `internal/handler``internal/service` 等分层。
---
## 功能模块(摘要)
- **60s API**:周期资讯、热门榜单、实用功能、娱乐消遣等;配置见 `infogenie-frontend/src/config/Api60sConfig.js`
- **工具箱**`public/toolbox/` 下分 **`图片处理` / `实用工具` / `网页小玩具` / `学习工具`** 四类,入口 `ToolboxPage`(分类标签 + 卡片),点击嵌入;配置项 `offlineOk` 为真的工具在卡片上标 **「可离线」**PWA 缓存后页面可本地加载,调用外网 API 或网络流仍要联网)。**`个人主页模板` 目录仅作临时资源,不参与工具箱配置与展示**,上线前可整体从 `public/` 剔除以减小体积。
- **AI 应用**:入口 `AiModelPage`,静态页在 `public/aimodelapp/`;提示词集中在 **`public/aimodelapp/shared/ai-prompts.js`**,统一请求 **`/api/aimodelapp/chat`**。上游 **API Base / Key / 默认模型** 可由管理员在 `/admin` 写入 MySQL 表 **`site_ai_runtime`**`GET/PUT /api/admin/site/ai-runtime`),优先于 `ai_config.json`
- **休闲游戏**`public/smallgame/`
- **AI 工具**`public/aimodelapp/` 等,消耗萌芽币策略以后端与认证中心对接为准。
- **管理入口**:连续点击 Header **Logo 5 次** 输入管理员令牌进入 `/admin`(详见前端实现)。
- **60s 功能展示开关**:条目定义仍在前端 `Api60sConfig.js`**是否展示**由后端 MySQL 表 `site_60s_disabled` 控制。公开接口 `GET /api/site/60s-disabled` 返回 `{ "disabled": ["itemId", ...] }`;管理保存 `PUT /api/admin/site/60s-disabled`(请求头 `X-Site-Admin-Token`)需与后端环境变量 **`INFOGENIE_SITE_ADMIN_TOKEN`** 一致(开发环境可与管理员口令相同,见 `InfoGenie-go-backend/.env.development`)。
- **60s 上游节点**:由表 **`site_60s_upstream`**`source_id`: `self` | `official`)决定;`GET /api/site/60s-source` 供前端静默拉取(**不在** `/60sapi` 列表页展示域名);管理员 `PUT /api/admin/site/60s-source`。静态页用 `sixty-runtime.js` + URL 参数 `sixty_base`,由 `Api60sItemPage` 注入 iframe。
---
## 项目结构(当前)
```
InfoGenie/
├── InfoGenie-go-backend/ # Go + Gin 后端
│ ├── cmd/server/ # 入口 main
│ ├── internal/ # handler / service / model / router 等
│ └── go.mod
├── infogenie-frontend/
│ ├── public/
│ │ ├── 60sapi/ # 60s 类静态页 + ig-embed.js
│ │ ├── toolbox/
│ │ ├── smallgame/
│ │ ├── aimodelapp/
│ │ ├── index.html # 入口与 PWA 启动屏
│ │ └── manifest.json
│ ├── scripts/
│ │ └── inject-ig-embed.js # 批量为 60s 静态页注入 ig-embed可选
│ ├── src/
│ │ ├── App.js # 路由
│ │ ├── components/ # Header、FullscreenEmbed、…
│ │ ├── pages/ # 含 Api60sPage、Api60sItemPage、UserProfilePage、AdminPage…
│ │ ├── contexts/UserContext.js
│ │ ├── config/ # env.js、Api60sConfig.js、StaticPageConfig.js
│ │ └── utils/api.js
│ └── package.json
├── SPROUT_GATE_API_DOCS.md # 萌芽统一认证接入说明(若在本仓库)
└── README.md # 本文件
```
---
## API 端点Go 后端,常见前缀 `/api`
具体以 `InfoGenie-go-backend/internal/router` 为准,常见包括:
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/` | 服务信息 |
| GET | `/api/health` | 健康检查 |
| GET | `/api/auth/check` 等 | 与历史兼容的鉴权检查(若仍保留) |
| POST | `/api/aimodelapp/*` | 各类 AI 能力代理 |
| GET | `/api/aimodelapp/coins` | 与 AI 消耗相关的查询 |
用户资料、签到等以 **认证中心 OpenAPI** 为准(前端通过 `REACT_APP_AUTH_API_URL` 访问)。
---
## 快速开始
### 环境要求
- **Go** 1.21+(以后端 `go.mod` 为准)
- **Node.js** 16+、npm
- **MySQL**(开发/测试库连接串见后端 `.env` 或文档)
### 后端
```bash
cd InfoGenie-go-backend
# 配置 .env 中数据库、密钥、认证中心等
go run ./cmd/server
# 默认示例端口见 main 或配置,常见为 :5002
```
### 后端 Docker 部署(可选)
`InfoGenie-go-backend/` 目录:
1. 准备 **`.env.production`**(数据库、邮件、`INFOGENIE_SITE_ADMIN_TOKEN` 等),**不要**将其提交到仓库;镜像内不包含该文件。
2. 构建并启动(**宿主机端口 `12364` → 容器内 `5002`**,容器名 **`infogenie-backend-go`**
```bash
docker compose up -d --build
```
3. 健康检查:`http://<服务器IP>:12364/api/health`(或经反向代理后的域名)。
4. 前端 `REACT_APP_API_URL` 应指向对外的 API 地址(例如经 Nginx 反代到 `127.0.0.1:12364` 的 `https://infogenie.api.shumengya.top`)。
详见该目录下 `Dockerfile`、`docker-compose.yml`。
### 前端
```bash
cd infogenie-frontend
npm install
npm start
# http://localhost:3000
```
生产构建:
```bash
npm run build
```
### 前端环境变量(示例)
| 变量 | 说明 |
|------|------|
| `REACT_APP_API_URL` | 万象口袋 Go 后端根地址 |
| `REACT_APP_AUTH_URL` | 认证中心前端地址 |
| `REACT_APP_AUTH_API_URL` | 认证中心 API 根地址 |
以上变量在 **构建时** 写入前端包Create React App。修改后需重新执行 `npm run build`。
---
## 生产部署(前端)
1. **安装与构建**(在 `infogenie-frontend/` 目录)
```bash
npm ci
npm run build
```
产物为 `build/`:静态资源 + 单页 `index.html`。
2. **构建前设置环境变量**(按线上域名填写,勿提交含密钥的 `.env` 到仓库):
- Linux/macOS`REACT_APP_API_URL=https://你的后端域名 npm run build`
- 或复制 `infogenie-frontend/.env.production.example` 为 `.env.production` 后执行 `npm run build`。
3. **Web 服务器**
- 将 `build/` 内全部文件部署到站点根目录(或子路径;若子路径需设置 CRA 的 `homepage` 并确认 `PUBLIC_URL`)。
- **必须配置 SPA 回退**:所有未命中静态文件的路径应返回 `index.html`,否则刷新 `/toolbox`、`/60sapi/xxx` 等会 404。
- **Nginx 示例**(站点根部署):
```nginx
server {
listen 443 ssl;
server_name infogenie.example.com;
root /var/www/infogenie/build;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
expires 7d;
add_header Cache-Control "public, immutable";
}
}
```
4. **HTTPS**
- 全站建议 HTTPSOAuth 回调域名须与认证中心登记一致。
5. **PWA**
- 生产环境会注册 Service Worker见 `src/index.js`)。更新前端后用户可能需刷新或等待 SW 更新;大版本升级可 bump `public/manifest.json` 的 `version` / `name` 便于识别。
6. **后端**
- 单独部署 `InfoGenie-go-backend`(示例:`https://infogenie.api.shumengya.top`),与前端站点(示例:`https://infogenie.shumengya.top`)分域时,前端构建需设置 `REACT_APP_API_URL` 为后端根地址。
- **CORS**:后端中间件 `internal/middleware/cors.go` 为**宽松策略**(放行任意 Origin 并回显),便于跨域;若需收紧可改为白名单。
---
## 前端路由
| 路径 | 说明 |
|------|------|
| `/` | 首页 |
| `/login` | 跳转统一登录 |
| `/auth/callback` | OAuth 回调 |
| `/60sapi` | 60s API 分类列表 |
| `/60sapi/:itemId` | 嵌入对应静态 HTML |
| `/toolbox` | 工具箱列表 |
| `/smallgame` | 小游戏 |
| `/aimodel` | AI 应用 |
| `/profile` | 个人中心(只读) |
| `/admin` | 管理员后台(令牌) |
| `*` | 未匹配 → 首页 |
---
## 联系方式与许可
- **演示**https://infogenie.shumengya.top
- **ICP**蜀ICP备2025151694号以实际页脚为准
- **许可证**Apache License 2.0 — 见 [LICENSE](LICENSE)
---
<div align="center"><strong>万象口袋</strong> · 多功能聚合应用</div>