前后端分离的资讯平台,基于黑马「黑马头条」微服务项目。仓库内包含 一个后端、三个前端,以及一份已编译前端快照和 OCR 字库。
| 目录 | 角色 | 默认访问地址 |
|---|---|---|
leadnews-server |
Spring Cloud 微服务后端 | 见下方网关端口 |
leadnews-web-admin |
运营管理后台 | http://localhost:8080 |
leadnews-web-app |
用户端(Weex / Web) | http://localhost:8081 |
leadnews-web-wemedia |
自媒体端 | http://localhost:8282 |
web-dists |
三个前端的编译快照(与源码构建产物可能不完全一致) | 经本机 Nginx:8801 / 8802 / 8803 |
tessdata |
Tess4j 中文 OCR 字库(chi_sim) |
自媒体审核用 |
开发时三个前端分别代理到对应网关,不要直连各个微服务端口:
| 前端 | 开发代理 | 目标网关 |
|---|---|---|
| 管理后台 | /service_6001 |
http://localhost:51603(admin-gateway) |
| 用户端 | /app、/server_85 |
http://localhost:51601(app-gateway) |
| 自媒体端 | /wemedia |
http://localhost:51602(wemedia-gateway) |
建议启动顺序:中间件 → 后端网关与微服务 → 三个前端。若只想看已编译页面,中间件和后端起来后用 Nginx 指向 web-dists 即可。
运营使用的 Vue 后台:用户审核、内容审核、频道、敏感词等。开发接口经 config/index.js 代理到管理网关 51603。
| 项目 | 版本 |
|---|---|
| Node.js | 建议 12.x / 14.x(package.json 声明 >= 6;node-sass@4 + Webpack 3 在 Node 10/12/14 最稳,不要用 16+) |
| npm | >= 3 |
| Vue | 2.6.5 |
| Vue Router | 3.0.1 |
| Vuex | 3.0.1 |
| Element UI | 2.4.11 |
| Axios | 0.18.0 |
| ECharts | 4.1.x |
| TinyMCE | 4.9.1 |
| Webpack | 3.6.x |
cd leadnews-web-admin
npm install
npm run dev浏览器访问 http://localhost:8080。
npm run build # 生产打包,产物在 dist/(本地构建目录,不入库)面向读者的 Weex 工程,可用浏览器打开 Web 预览。开发接口经 configs/config.js 代理到 App 网关 51601。
| 项目 | 版本 |
|---|---|
| Node.js | 建议 12.x(Webpack 3 + weex-loader,与另外两个前端共用 12 即可) |
| npm | >= 3 |
| Vue | 2.5.11 |
| Vue Router | 3.0.1 |
| Vuex | 3.1.1 |
| Weex Vue Render | 1.0.17 |
| Weex UI | 0.6.14 |
| Webpack | 3.10.x |
cd leadnews-web-app
npm install
npm start浏览器访问 http://localhost:8081(会打开 web/preview.html)。
npm run build:prod:web # 打 Web 包作者使用的 Vue 后台:写稿、素材、统计等。开发接口经 config/index.js 代理到自媒体网关 51602。
| 项目 | 版本 |
|---|---|
| Node.js | 建议 12.x / 14.x(与管理后台相同,node-sass@4 + Webpack 3) |
| npm | >= 3 |
| Vue | 2.6.5 |
| Vue Router | 3.0.1 |
| Vuex | 3.0.1 |
| Element UI | 2.4.11 |
| Axios | 0.18.0 |
| TinyMCE | 4.9.1 |
| Webpack | 3.6.x |
三个前端 Node 大版本接近,可以用同一套 Node 12。不要用 Node 16+ 硬跑。
cd leadnews-web-wemedia
npm install
npm run dev浏览器访问 http://localhost:8282。
npm run build # 生产打包,产物在 dist/web-dists/ 里是三份已经编译好的前端(admin-web / app-web / wemedia-web),和源码执行 npm run build 的结果可能不完全一样,所以单独入库,供 Nginx 直接托管。
各前端自己的 dist/ 仍是本地构建产物,已被忽略,不要和 web-dists/ 混用。
Windows 上原 Nginx 入口:
http://localhost:8801
http://localhost:8802
http://localhost:8803
进入 Nginx 安装目录后执行 nginx.exe。端口和站点的对应关系以本机 Nginx 配置为准,根目录指向 web-dists 下对应子目录。
Spring Cloud 微服务。库表脚本在 leadnews-server/sql/。
| 项目 | 版本 |
|---|---|
| JDK | 1.8 |
| Maven | 3.x |
| Spring Boot | 2.3.9.RELEASE |
| Spring Cloud | Hoxton.SR10 |
| Spring Cloud Alibaba | 2.2.5.RELEASE |
| Spring Cloud Gateway | 随 Hoxton(leadnews-gateway 下三个网关) |
| OpenFeign | 随 Hoxton |
| MyBatis-Plus | 3.4.1 |
| Knife4j / Swagger | 2.0.2 / 2.9.2 |
| JWT | 0.9.1 |
| Elasticsearch 客户端 | 7.2.0 |
| XXL-JOB 客户端 | 2.2.0-SNAPSHOT |
以下为原部署环境(Linux Docker)中的版本;Redis / Mongo / Kafka 等主机在配置里仍是内网 IP,请改成自己的环境。
| 中间件 | 版本 | 地址 | 说明 |
|---|---|---|---|
| MySQL | 5.7 | localhost:3306 |
库:leadnews_user、leadnews_article、leadnews_wemedia、leadnews_admin、leadnews_schedule |
| Nacos | 1.2.0 | 配置里为 192.168.153.82:8848 |
注册与配置中心 |
| Redis | 配置未写死版本 | 配置里为 192.168.153.82:6379,密码 leadnews |
缓存、行为等 |
| MongoDB | 配置未写死版本 | 192.168.153.82:27017 |
库:leadnews-comment、leadnews-history |
| Elasticsearch | 7.4.0 | 192.168.153.82:9200 |
文章检索(客户端依赖为 7.2.0) |
| Kibana | 7.4.0 | 随 ES | 可选 |
| Kafka | 2.12-2.3.1 | 192.168.153.82:9092 |
消息与流处理 |
| Zookeeper | 3.4.14 | 随 Kafka | Kafka 依赖 |
| MinIO | 配置未写死版本 | http://192.168.153.82:9000,桶 leadnews |
对象存储,账号 minio / minio123 |
| XXL-JOB Admin | 2.3.0 | http://192.168.153.82:8888/xxl-job-admin |
热文计算等定时任务 |
| Tess4j 字库 | chi_sim |
仓库根目录 tessdata/ |
自媒体图片文字识别 |
Redis、Nacos、Mongo、ES、Kafka、MinIO 的主机请改成当前环境,不要沿用仓库里的 192.168.153.82。账号密码在各模块 application.yml / bootstrap.yml 中修改。
自媒体服务里的 OCR 路径目前是本机绝对路径:
tess4j:
data-path: D:\Project\project\leadnews\tessdata
language: chi_sim请改成当前仓库根目录下的 tessdata。
| 模块 | 端口 | 职责 |
|---|---|---|
leadnews-gateway/leadnews-app-gateway |
51601 | App 网关,用户端入口 |
leadnews-gateway/leadnews-wemedia-gateway |
51602 | 自媒体网关 |
leadnews-gateway/leadnews-admin-gateway |
51603 | 管理后台网关 |
leadnews-service/leadnews-user |
51801 | 用户、实名认证 |
leadnews-service/leadnews-article |
51802 | 文章、静态化、热文 |
leadnews-service/leadnews-wemedia |
51803 | 自媒体稿件、素材、审核 |
leadnews-service/leadnews-search |
51804 | ES 检索、搜索历史 |
leadnews-service/leadnews-behavior |
51805 | 点赞、关注、阅读行为 |
leadnews-service/leadnews-comment |
51806 | 评论(MongoDB) |
leadnews-service/leadnews-schedule |
51701 | 延迟任务 |
leadnews-service/leadnews-admin |
51809 | 运营管理接口 |
leadnews-common / leadnews-model / leadnews-utils / leadnews-feign-api / leadnews-basic |
— | 公共组件、模型、Feign、MinIO / Seata 等 |
leadnews-test |
— | 中间件示例(ES、MinIO、Kafka、Mongo、XXL-JOB、Tess4j 等),非业务必需 |
1. 准备中间件
在 Linux 上启动 Docker 后,拉起 Elasticsearch、Kibana、MySQL、MongoDB、Redis、Kafka、Zookeeper、Nacos、MinIO、xxl-job-admin:
systemctl start docker.service原环境镜像版本见上一节表格。Nacos 控制台原地址:http://192.168.153.82:8848/nacos,请换成自己的主机。
MySQL 5.7 建库并导入:
leadnews-server/sql/leadnews_user.sqlleadnews-server/sql/leadnews_article.sqlleadnews-server/sql/leadnews_wemedia.sqlleadnews-server/sql/leadnews_admin.sqlleadnews-server/sql/leadnews_schedule.sql
2. 修改配置
各服务 src/main/resources/application.yml、bootstrap.yml 中把 Nacos、MySQL、Redis、Mongo、Kafka、ES、MinIO、XXL-JOB 的地址改成当前环境。
3. 编译并启动微服务
cd leadnews-server
mvn clean install -DskipTests在 IDE 中分别运行各模块启动类,或对模块执行 mvn spring-boot:run。建议顺序:
- 三个网关:
leadnews-app-gateway、leadnews-wemedia-gateway、leadnews-admin-gateway leadnews-user、leadnews-article、leadnews-wemedia、leadnews-admin等业务服务- 需要检索、评论、行为、定时任务时再启动
leadnews-search、leadnews-comment、leadnews-behavior、leadnews-schedule
Nacos 控制台能看到对应服务名(如 leadnews-user、leadnews-app-gateway)即注册成功。
4. 再开前端
对应网关起来之后,再启动三个前端;或用 Nginx 托管 web-dists。