{"id":18859024,"url":"https://github.com/rawchen/blog","last_synced_at":"2025-04-09T13:09:59.256Z","repository":{"id":107706493,"uuid":"361467138","full_name":"rawchen/Blog","owner":"rawchen","description":"前后端分离博客 - SpringBoot + Vue","archived":false,"fork":false,"pushed_at":"2022-01-25T15:58:37.000Z","size":4649,"stargazers_count":334,"open_issues_count":7,"forks_count":30,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-02T12:04:14.067Z","etag":null,"topics":["blog","mybatis","redis","springboot","vue"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rawchen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-25T15:34:50.000Z","updated_at":"2025-03-05T14:20:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"eaa48a88-e5cb-4a8f-9938-786a92953108","html_url":"https://github.com/rawchen/Blog","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rawchen%2FBlog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rawchen%2FBlog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rawchen%2FBlog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rawchen%2FBlog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rawchen","download_url":"https://codeload.github.com/rawchen/Blog/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248045245,"owners_count":21038554,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","mybatis","redis","springboot","vue"],"created_at":"2024-11-08T04:15:41.621Z","updated_at":"2025-04-09T13:09:59.236Z","avatar_url":"https://github.com/rawchen.png","language":"Java","readme":"\u003cp align=\"center\"\u003e\n\t\u003ca href=\"\" target=\"_blank\"\u003e\n\t\t\u003cimg src=\"https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/favicon-gif.gif\" alt=\"Blog · Logo\" style=\"width: 200px; height: 200px\"\u003e\n\t\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"https://img.shields.io/badge/JDK-1.8+-orange\"\u003e\n\t\u003cimg src=\"https://img.shields.io/badge/SpringBoot-2.2.7.RELEASE-brightgreen\"\u003e\n\t\u003cimg src=\"https://img.shields.io/badge/MyBatis-3.5.5-red\"\u003e\n\t\u003cimg src=\"https://img.shields.io/badge/Vue-2.6.11-brightgreen\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Redis-3.2.100-brightgreen\"\u003e\n\t\u003cimg src=\"https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Frawchen%2FBlog\u0026count_bg=%2379C83D\u0026title_bg=%23555555\u0026icon=\u0026icon_color=%23E7E7E7\u0026title=hits\u0026edge_flat=false\"\u003e\n\u003c/p\u003e\n\n\n\n\n\n## 简介\n\n前后端分离Blog系统，基于 Spring Boot + Vue 前后端分离博客系统\n\n自用博客，长期维护，欢迎勘误。此项目本是学习过程中的产物，参考了许多优秀的教程和项目。\n\n\n\u003e [https://blog.rawchen.com](https://blog.rawchen.com)\n\u003e\n\u003e [https://admin.rawchen.com](https://admin.rawchen.com)\n\n## 后端\n\n1. 核心框架：[Spring Boot](https://github.com/spring-projects/spring-boot)\n2. 安全框架：[Spring Security](https://github.com/spring-projects/spring-security)\n3. Token 认证：[jjwt](https://github.com/jwtk/jjwt)\n4. 持久层框架：[MyBatis](https://github.com/mybatis/spring-boot-starter)\n5. 分页插件：[PageHelper](https://github.com/pagehelper/Mybatis-PageHelper)\n6. NoSQL缓存：[Redis](https://github.com/redis/redis)\n7. Markdown 转 HTML：[commonmark-java](https://github.com/commonmark/commonmark-java)\n8. 离线 IP 地址库：[ip2region](https://github.com/lionsoul2014/ip2region)\n9. 定时任务：[quartz](https://github.com/quartz-scheduler/quartz)\n10. UserAgent 解析：[yauaa](https://github.com/nielsbasjes/yauaa)\n\n\n\n邮件模板参考自[Typecho-CommentToMail-Template](https://github.com/MisakaTAT/Typecho-CommentToMail-Template)\n\n基于 JDK8 开发，8以上要添加依赖：\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ejavax.xml.bind\u003c/groupId\u003e\n    \u003cartifactId\u003ejaxb-api\u003c/artifactId\u003e\n    \u003cversion\u003e2.3.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n\n\n## 前端\n\n核心框架：Vue2.x、Vue Router、Vuex\n\nVue 项目基于 @vue/cli4.x 构建\n\nJS 依赖及参考的 css：[axios](https://github.com/axios/axios)、[moment](https://github.com/moment/moment)、[nprogress](https://github.com/rstacruz/nprogress)、[v-viewer](https://github.com/fengyuanchen/viewerjs)、[prismjs](https://github.com/PrismJS/prism)、[APlayer](https://github.com/DIYgod/APlayer)、[MetingJS](https://github.com/metowolf/MetingJS)、[lodash](https://github.com/lodash/lodash)、[mavonEditor](https://github.com/hinesboy/mavonEditor)、[echarts](https://github.com/apache/echarts)、[tocbot](https://github.com/tscanlin/tocbot)、[iCSS](https://github.com/chokcoco/iCSS)\n\n\n\n### 后台 UI\n\n[Element UI](https://github.com/ElemeFE/element)：后台 CMS 部分完全基于 Element UI 开发\n\n\n\n### 前台 UI\n\n[Semantic UI](https://semantic-ui.com/)：主要使用，页面布局样式，语义化的 css，该框架 Vue 版的开发完成度不高，见 [Semantic UI Vue](https://semantic-ui-vue.github.io/#/)\n\n[Element UI](https://github.com/ElemeFE/element)：部分使用，一些小组件，弥补了 Semantic UI 的不足，便于快速实现效果\n\n文章排版：基于 [typo.css](https://github.com/sofish/typo.css) 修改\n\n\n\n## 快速开始\n\n1. 创建 MySQL 数据库`blog`，并运行`blog.sql`初始化表数据\n2. 修改配置信息`blog-api/src/main/resources/application-dev.properties`\n3. 安装 Redis 并启动\n4. 启动后端SpringBoot服务\n5. 分别在`blog-cms`和`blog-view`目录下执行`npm install`安装依赖\n6. 分别在`blog-cms`和`blog-view`目录下执行`npm run serve`启动前后台页面\n\n\n\n## 注意事项\n\n- 本人使用的 MySQL 版本为5.5.61\n- 数据库中默认用户名密码为`admin`，`admin`，因为是个人博客，没打算做修改密码的页面，可在`util.HashUtils`下的`main`方法手动生成密码存入数据库\n- 注意修改`application-dev.properties`的配置信息\n  - Redis 若没有密码，留空即可\n  - 注意修改`token.secretKey`，否则无法保证 token 安全性\n\n\n\n## 隐藏功能\n\n- 在前台访问`/login`路径登录后，可以以博主身份（带有博主标识）回复评论，且不需要填写昵称和邮箱即可提交\n- 在 Markdown 中加入`\u003cmeting-js server=\"netease\" type=\"song\" id=\"歌曲id\" theme=\"#25CCF7\"\u003e\u003c/meting-js\u003e` 可以在文章中添加 [APlayer](https://github.com/DIYgod/APlayer) 音乐播放器，`netease`为网易云音乐，其它配置及具体用法参考 [MetingJS](https://github.com/metowolf/MetingJS)\n- 提供了两种隐藏文字效果：在 Markdown 中使用`@@`包住文字，文字会被渲染成“黑幕”效果，鼠标悬浮在上面时才会显示；使用`%%`包住文字，文字会被“蓝色覆盖层”遮盖，只有鼠标选中状态才会反色显示。例如：`@@隐藏文字@@`，`%%隐藏文字%%`\n- 大部分个性化配置可以在后台“站点设置”中修改\n\n\n\n## 项目截图\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/01.png)\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/02.png)\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/03.png)\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/04.png)\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/05.png)\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/06.png)\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/07.png)\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/08.png)\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/09.png)\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/10.png)\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/11.png)\n\n![](https://cdn.jsdelivr.net/gh/rawchen/JsDelivr/static/blog/screenshot/12.png)\n\n\n\n## Stargazers\n\n[![](https://reporoster.com/stars/rawchen/blog)](https://github.com/rawchen/blog/stargazers)\n\n## Forkers\n\n[![](https://reporoster.com/forks/rawchen/blog)](https://github.com/rawchen/blog/network/members)\n\n\n## 如何贡献\n\nFork 项目到你自己仓库，本地拉取你 fork 的项目并部署修改。\n提交本地仓库更改，推送到你 fork 的项目仓库中。\n在我的项目发起 Pull requests，我看到后将考虑合并到主分支。\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frawchen%2Fblog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frawchen%2Fblog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frawchen%2Fblog/lists"}