# leadnews **Repository Path**: xylve/leadnews ## Basic Information - **Project Name**: leadnews - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-12 - **Last Updated**: 2026-04-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LeadNews 头条新闻平台 ## 项目简介 LeadNews 是一个基于微服务架构的分布式新闻内容管理平台,包含移动端用户App和自媒体管理后台两大核心系统。项目采用前后端分离架构,支持文章发布、内容审核、智能推荐、全文搜索、用户互动等完整的内容生态功能。 ## 核心功能 ### 移动端功能 - **文章浏览**: 支持多种文章布局(无图/单图/多图),按频道分类展示 - **智能推荐**: 基于用户行为和兴趣的个性化内容推荐 - **全文搜索**: 基于Elasticsearch的高效文章搜索 - **用户互动**: 点赞、收藏、评论、关注等社交功能 - **行为追踪**: 记录用户阅读历史、点击行为,优化推荐算法 ### 自媒体管理后台 - **内容创作**: 自媒体作者文章编辑、图文发布 - **内容审核**: AI智能审核(百度AI) + 人工审核双重机制 - **账号管理**: 自媒体账号注册、认证、权限管理 - **数据统计**: 文章阅读量、点赞量、粉丝增长等数据分析 - **素材管理**: 基于MinIO的图片、文件存储管理 ### 系统特性 - **定时任务**: 基于XXL-Job的文章发布调度、数据同步 - **消息队列**: 基于Kafka的异步消息处理、日志收集 - **内容安全**: 文本敏感词过滤、图片OCR识别与鉴黄 - **静态化**: 文章页面Freemarker静态化生成,提升访问性能 ## 技术栈 ### 后端技术 | 技术 | 版本 | 说明 | |------|------|------| | Java | 1.8 | 开发语言 | | Spring Boot | 2.3.9.RELEASE | 基础框架 | | Spring Cloud | Hoxton.SR10 | 微服务框架 | | Spring Cloud Alibaba | 2.2.5.RELEASE | 微服务组件 | | MyBatis-Plus | 3.4.1 | ORM框架 | | MySQL | 5.7 | 关系型数据库 | | Redis | - | 缓存数据库 | | MongoDB | - | 文档数据库(评论存储) | | Elasticsearch | 7.2.0 | 全文搜索引擎 | | Kafka | 2.6.6 | 消息队列 | | Nacos | - | 服务注册与配置中心 | | ZooKeeper | - | 分布式协调服务 | | XXL-Job | 2.2.0 | 分布式定时任务 | | MinIO | - | 对象存储服务 | | Gateway | - | API网关 | | OpenFeign | - | 服务间调用 | | JWT | 0.9.1 | 认证授权 | ### 前端技术 - **移动端**: Vue.js + Webpack (SPA单页应用) - **管理后台**: Vue.js + Element UI - **反向代理**: Nginx 1.18.0 ### 开发工具 - Maven: 项目构建与依赖管理 - Lombok: 简化Java代码 - Knife4j + Swagger: API文档生成 - Log4j2: 日志框架 ## 项目结构 ``` leadnews/ ├── leadnews-common/ # 公共模块(通用工具类、异常处理、拦截器等) ├── leadnews-model/ # 实体模型模块(POJO、DTO、VO) ├── leadnews-utils/ # 工具类模块 ├── leadnews-feign-api/ # Feign远程调用接口模块 ├── leadnews-basic/ # 基础组件模块 │ └── file-starter/ # 文件上传 Starter(MinIO) ├── leadnews-gateway/ # 网关模块 │ ├── leadnews-app-gateway/ # 移动端网关(端口: 51601) │ └── leadnews-wemedia-gateway/ # 自媒体网关(端口: 51602) ├── leadnews-service/ # 业务微服务模块 │ ├── leadnews-user/ # 用户微服务(APP端用户管理) │ ├── leadnews-article/ # 文章微服务(文章管理、发布) │ ├── leadnews-wemedia/ # 自媒体微服务(作者管理、素材) │ ├── leadnews-search/ # 搜索微服务(ES全文搜索) │ ├── leadnews-behavior/ # 行为微服务(用户行为记录) │ ├── leadnews-comment/ # 评论微服务(MongoDB存储) │ └── leadnews-schedule/ # 定时任务微服务(XXL-Job) ├── leadnews-test/ # 测试模块 │ ├── es-init/ # ES索引初始化 │ ├── kafka-demo/ # Kafka示例 │ ├── minio-demo/ # MinIO示例 │ ├── mongo-demo/ # MongoDB示例 │ ├── freemarker-demo/ # Freemarker示例 │ ├── xxljob-demo/ # XXL-Job示例 │ └── tess4j-demo/ # OCR识别示例 ├── web/ # 前端项目 │ ├── app-web/ # 移动端前端 │ └── wemedia-web/ # 自媒体管理后台前端 ├── nginx-1.18.0/ # Nginx服务器 ├── doc/ # 文档 │ ├── db/ # 数据库脚本 │ │ ├── leadnews.sql # MySQL数据库 │ │ ├── mongo.sql # MongoDB初始化 │ │ └── tables_xxl_job.sql # XXL-Job表结构 │ └── img/ # 项目文档图片 ├── 部署/ # 部署文档 │ ├── docker-compose/ # Docker Compose配置 │ ├── elasticsearch/ # ES部署说明 │ ├── kafka/ # Kafka部署说明 │ ├── minio/ # MinIO部署说明 │ ├── mongo/ # MongoDB部署说明 │ ├── mysql/ # MySQL部署说明 │ ├── nacos/ # Nacos部署说明 │ ├── redis/ # Redis部署说明 │ ├── xxljob/ # XXL-Job部署说明 │ └── zookeeper/ # ZooKeeper部署说明 └── pom.xml # Maven父工程 ``` ## 微服务端口说明 | 服务名称 | 端口 | 说明 | |---------|------|------| | leadnews-app-gateway | 51601 | 移动端API网关 | | leadnews-wemedia-gateway | 51602 | 自媒体API网关 | | leadnews-user | 51801 | 用户微服务 | | leadnews-article | 51802 | 文章微服务 | | leadnews-wemedia | 51803 | 自媒体微服务 | | leadnews-search | 51804 | 搜索微服务 | | leadnews-behavior | 51805 | 行为微服务 | | leadnews-comment | 51806 | 评论微服务 | | leadnews-schedule | 51701 | 定时任务微服务 | ## 快速开始 ### 环境要求 - JDK 1.8+ - Maven 3.6+ - MySQL 5.7+ - Redis 5.0+ - Nacos 2.x - Elasticsearch 7.2.0 - Kafka 2.x + ZooKeeper 3.x - MongoDB 4.x - MinIO - XXL-Job Admin 2.x ### 部署中间件 推荐使用Docker Compose一键部署所有中间件: ```bash # 1. 进入docker-compose目录 cd 部署/docker-compose # 2. 安装docker-compose(如未安装) mv docker-compose-linux-x86_64 docker-compose sudo mv docker-compose /usr/local/bin/ chmod +x /usr/local/bin/docker-compose docker-compose version # 3. 启动所有中间件 docker-compose up -d # 或单独启动某个中间件(参考"部署"目录下各子目录的README) ``` ### 数据库初始化 ```bash # 1. 导入MySQL数据库 mysql -u root -p < doc/db/leadnews.sql # 2. 导入XXL-Job表结构 mysql -u root -p < doc/db/tables_xxl_job.sql # 3. 初始化MongoDB(参考mongo.sql) ``` ### 配置修改 修改各微服务的 `bootstrap.yml` 配置文件,将中间件地址改为实际部署地址: ```yaml spring: redis: host: 192.168.58.38 # 改为你的Redis地址 port: 6379 cloud: nacos: discovery: server-addr: 192.168.58.38:8848 # 改为你的Nacos地址 config: server-addr: 192.168.58.38:8848 datasource: url: jdbc:mysql://192.168.58.38:3306/leadnews # 改为你的MySQL地址 username: root password: root kafka: bootstrap-servers: 192.168.58.38:9092 # 改为你的Kafka地址 data: mongodb: host: 192.168.58.38 # 改为你的MongoDB地址 port: 27017 ``` ### 编译打包 ```bash # 在项目根目录执行 mvn clean install -DskipTests ``` ### 启动服务 **启动顺序**: Nacos → 网关 → 微服务 ```bash # 1. 确保Nacos已启动(默认端口: 8848) # 访问 Nacos 控制台: http://192.168.58.38:8848/nacos # 2. 启动各微服务(以article服务为例) cd leadnews-service/leadnews-article mvn spring-boot:run # 3. 启动网关 cd leadnews-gateway/leadnews-app-gateway mvn spring-boot:run # 或使用IDE直接运行各模块的Application启动类 ``` ### 前端部署 ```bash # 移动端前端(已构建,直接部署到Nginx) # 文件位置: web/app-web/ # 自媒体管理后台(已构建,直接部署到Nginx) # 文件位置: web/wemedia-web/ # 配置Nginx反向代理(参考 nginx-1.18.0/conf/leadnews.conf/) ``` ### 访问地址 - **Nacos控制台**: http://192.168.58.38:8848/nacos (nacos/nacos) - **移动端前端**: http://localhost:8801 - **自媒体后台**: http://localhost:8802 - **API文档**: http://localhost:51802/doc.html (以article服务为例) - **XXL-Job控制台**: http://192.168.58.38:8080/xxl-job-admin (admin/123456) - **MinIO控制台**: http://192.168.58.38:9000 (minioadmin/minioadmin) ## 架构设计 ### 整体架构图 ``` 用户端(APP/H5) ──┐ ├──> Nginx ──> App Gateway(51601) ──> User/Article/Search/Behavior/Comment 自媒体管理后台 ───┘ └──> Wemedia Gateway(51602) ──> Wemedia/Schedule 所有微服务注册到 Nacos 进行服务发现与配置管理 微服务间通过 OpenFeign 进行RPC调用 异步消息通过 Kafka 进行解耦 ``` ### 技术亮点 1. **网关鉴权**: JWT + Gateway全局过滤器实现统一认证 2. **异步解耦**: 文章审核、消息推送等耗时操作通过Kafka异步处理 3. **全文搜索**: Elasticsearch实现文章标题、内容的分词搜索 4. **智能推荐**: 基于用户行为数据(Redis存储)实现个性化推荐 5. **内容安全**: 百度AI文本审核 + 图片OCR识别 + 敏感词过滤 6. **定时发布**: XXL-Job实现文章定时发布、数据同步任务 7. **静态化**: Freemarker生成HTML静态页面,减轻数据库压力 8. **分布式ID**: 雪花算法生成分布式唯一ID 9. **缓存策略**: Redis多级缓存(热点数据、用户行为、频道列表) 10. **文档存储**: MongoDB存储评论等非结构化数据 ## 数据库设计 项目采用多数据源架构: - **MySQL**: 存储核心业务数据(用户、文章、频道、素材等) - **MongoDB**: 存储评论、历史记录等非结构化/频繁变更数据 - **Redis**: 缓存热点数据、Session、分布式锁、用户行为数据 - **Elasticsearch**: 文章全文搜索索引 主要业务表: - `ap_article`: 文章信息表 - `ap_user`: APP用户表 - `wm_user`: 自媒体用户表 - `wm_news`: 自媒体文章表(待审核) - `ap_channel`: 频道表 - `ap_comment`: 评论表(MongoDB) ## API文档 各微服务集成Knife4j,启动后访问: ``` http://<服务IP>:<端口>/doc.html ``` 例如: - 文章服务: http://localhost:51802/doc.html - 用户服务: http://localhost:51801/doc.html - 搜索服务: http://localhost:51804/doc.html ## 常见问题 ### 1. Nacos配置无法加载 - 检查 `bootstrap.yml` 中Nacos地址是否正确 - 确保Nacos已启动且网络可达 - 检查配置文件的 Data ID 和 Group 是否匹配 ### 2. 服务间调用失败 - 确认所有服务已注册到Nacos - 检查Feign接口路径是否匹配 - 查看网关路由配置是否正确 ### 3. Elasticsearch搜索无结果 - 运行 `es-init` 模块初始化索引和数据 - 检查ES集群状态: `curl -XGET 'http://localhost:9200/_cluster/health?pretty'` - 确认文章数据已同步到ES ### 4. MinIO文件上传失败 - 检查MinIO服务是否启动 - 确认 `bootstrap.yml` 中MinIO配置(accessKey/secretKey/bucket) - 检查bucket是否已创建且权限正确 ### 5. Kafka消息未消费 - 检查Kafka和ZooKeeper服务状态 - 确认Topic已创建 - 查看消费者组是否正常: `kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list` ## 性能优化 - **Redis缓存**: 频道列表、热门文章、用户信息缓存 - **分页优化**: MyBatis-Plus + PageHelper物理分页 - **连接池**: HikariCP数据库连接池 - **静态资源**: Nginx静态资源托管 + 文章HTML静态化 - **异步处理**: Kafka异步消息、线程池并发处理 - **索引优化**: MySQL索引优化、ES分词索引 ## 开发规范 - 统一使用UTF-8编码 - 遵循RESTful API设计规范 - 使用Lombok简化POJO代码 - 统一异常处理(GlobalExceptionHandler) - 统一响应格式(R) - 日志使用Log4j2,按日期滚动 ## 部署说明 ### Docker部署(推荐) ```bash # 各服务根目录包含Dockerfile cd leadnews-service/leadnews-article docker build -t leadnews-article:latest . docker run -d -p 51802:51802 leadnews-article:latest ``` ### 传统部署 ```bash # 1. 打包 mvn clean package -DskipTests # 2. 上传jar包到服务器 scp target/*.jar user@server:/opt/leadnews/ # 3. 启动 java -jar leadnews-article-1.0-SNAPSHOT.jar ``` ## 项目维护 - **日志位置**: 各服务根目录 `leadnews.YYYY-MM-DD.log` - **健康检查**: Spring Boot Actuator + Spring Boot Admin - **监控告警**: Nacos服务监控 + XXL-Job任务监控 ## 许可证 本项目仅供学习交流使用。 ## 联系方式 如有问题,请提交Issue或联系项目维护者。