次元印象,一个SpringCloud构建的动漫交流论坛
传说Github上的**程序员有一半是二次元,于是为了吸引更多star我边学习SpringCloud技术边开发了这个动漫交流论坛。
次元印象 ( acimage) 是一个基于SpringCloud构建的前后端分离的动漫交流论坛。后端使用 SpringCloud+Mybatis-Plus+Reids+Rabbitmq+Elasticsearch。前端使用 Vue + ElementUi + Vite 。项目已经上线。各位Github的二次元们,还不来点个star(๑•̀ㅂ•́)و✧。
*次元印象o(≧▽≦)ツ~动漫交流论坛 www.acimage.top (只适配网页端,如果画面显小,可以适当放大浏览器,视觉效果更佳)。
首页
论坛页
- 以图识图,即上传图片,识别出论坛内相似图片及其所在话题。
- 多样化搜索,可以同时根据关键词、分类、标签以及排序字段等搜索,并根据关键词高亮匹配文字。
- 相关话题推荐,随机推荐。
- 话题排行榜(按star、浏览量、评论数等、活跃时间排行)。
- 用户排行榜(按话题数、star等排行)。
- 分类、标签,并且点击可筛选出符合相关分类或标签的话题。
- 实时展示最新活跃话题。
- 敏感词过滤,图片压缩。
- 消息通知
- 查看个人动态、修改个人信息。
- 登录、注册、登出,验证码防刷,邮箱验证。
- 发表话题,评论,star等。
- 较为完善的RBAC权限控制,可动态调整用户角色、角色权限、接口权限等。
- 网站基本数据展示,访客量,接口调用数等。
- 首页轮播图片管理。
- 话题、评论、用户管理。
- JWT实现单点登录,网关统一身份认证和鉴权,完善的RBAC权限控制。
- 利用Redis+Lua脚本+定时任务对变动比较频繁的数据(浏览量等)定时持久化。
- 利用Redis+Lua脚本+自定义注解,只需一个注解就可以实现针对ip、用户、和总体请求量的限流。
- 利用Dhash算法实现以图识图功能,效果还可以。
- 上传的图片均用webp压缩,极大地减少带宽压力。
后端服务
- acimage_gateway:网关,统一身份认证、鉴权,分别针对用户和总体请求量的限流
- acimage_user:用户中心,用户注册、登录,邮箱服务等
- acimage_community:社区服务,负责论坛话题相关的核心功能
- acimage_image:图片服务,负责话题图片上传、头像上传、以图识图等功能
- acimage_admin: 管理服务
后端模块
- acimage_common:公共模块,存放实体类、公共的拦截器、公共配置以及公共工具类等
- acimage_feign:放置各个模块的feign客户端
前端
- vue_manage_system:后台管理页面
- vue_acimage_web:门户网站页面
其它
- doc: 一些文档、图片和数据库文件
目前项目仍在不断完善,运行与部署流程以后再更新。
-
将doc/sql 下的三个数据库分别导入到mysql中,四个数据库分别是四个前台服务对应的数据库 -
在每个服务的application-dev.yml文件中配置mysql、redis、rabbitmq、nacos相应的地址或账号密码 -
填写acimage_common中的application-qiniu-template.yml中的七牛云账号信息,包括access-key、secret-key、domian、bucket,或者给这四个属性随便赋值(不能为空,否则NPE),但是这样无法使用上传图片。并将application-qiniu-template.yml重命名为application-qiniu.yml -
在acimage_common模块的下的application.yml配置 nacos 地址、sentinel地址(sentinel不配也不影响运行) -
启动nacos、redis、rabbitmq、mysql -
依次启动acimage_user、acimage_community、acimage_image、acimage_gateway,不这样启动的话可能会由于rabbitmq队列创建和绑定顺序的问题报错,如果遇到了,则全部服务再重新启动一遍。 -
运行前端(具体看vue_acimage_web的README)后点击默认弹出的链接即可访问首页 -
前台登录**:用户:wk,密码:wk123456 (还有几个用户可以从数据库sql文件看到,密码均为 用户名123456) -
端口:
-
acimage_user: 8100
-
acimage_image : 8090
-
acimage_community: 8080
-
acimage_gateway: 8070
-
SpringBoot、SpringCloud、MyBatis-plus、Druid(数据库连接池)、Redis(分布式缓存)、Rabbitmq(消息队列)、Elasticsearch(分布式搜索引擎)、Minio(对象存储服务)、Nginx(反向代理服务器)、Docker(应用容器引擎)
Vue2、Vue Router(路由)、ElementUi(Vue基础组件库)、axios(http客户端)、jsencrypt(基于RSA加解密的js库)、vue-dompurify-html(防xss攻击)、tinymce-vue(富文本编辑器)
Vite、TypeSript
- 分类、标签
- 话题、用户排行榜
- 随机推荐
- 相似话题推荐
- 敏感词过滤
- 接口幂等
- 细化限流
- 完善RABC权限控制,网关统一身份认证及鉴权
- 增加邮件服务,邮箱验证,验证码等
- 将图片存储在minio(原来存储在七牛云)
- elasticsearch多样化搜索,关键词高亮
- 增加用户消息通知功能
- 利用redis+lua批量提取缓存中话题和浏览量等,减少通信次数,实时展示数据。
- 增加评论表情
- 增加关注功能
- 完善sentinel和nacos等配置和使用
- 增加爬虫模块
- 完善单元测试
- 等等等
项目起初是为了学习技术搭建的,由于能力有限,还有很多不完善的地方,欢迎各位能够指正。如果有人感兴趣(多么希望真的有人感兴趣 手动捂脸)或者该项目遇到什么问题或有什么建议提issue,可联系邮箱[email protected]或进群692992463交流。喜欢的话记得点个star。