Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦
作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载。
个人博客
对于技术人员来说,拥有自己的个人博客应该是一件令人向往的事情,可以记录和分享自己的观点,想到这件事就觉得有意思,但是刚开始写博客的时候脑海中是没有搭建个人博客这一想法的,因为刚起步的时候连我都不清楚写博客能坚持到第几篇,不过随着时间的推移,博客量的增加,搭建一个私人博客网站的想法就越来越强烈,独立开发,独立维护,然后根据需要一点点的再往项目中添加其他功能,这种感觉虽然没有体会过,不过应该会挺酷的。
一边工作,一边更新ssm-maven的代码和博客,其实这些工作所占用的时间点很密集,足够让我忙的找不着北了,由于时间原因也拖更了不少博客。就是在这种情况下,我另一边还在为自己的博客个人站做准备,修改了Tale项目,做了大量的编码工作,然后现在又开始为这个项目的上线及相应的介绍博文做准备,也是有点傻劲儿的。
OK,说了这么多,肯定很多人觉得我在自夸,没错,我就是在夸我自己,因为真的挺辛苦的,有的时候自己还是要给自己一点掌声和自我鼓励的,不然我都不知道我做了这么多是为了什么,哈哈哈哈哈。
选择Tale作为模板的原因及个人想法
开源的商业博客平台很多,优秀之作也自然不少,不过一般都是商业平台,像开发人员的话,可能更追求灵活性及可维护行,因此自己开发一个博客平台或者在优秀的开源博客进行二次开发更好。巧合的是,当我在构思该如何着手这方面工作的时候,看到了一篇关于Java开源博客系统Tale的介绍博文,当时公司的工作也多,因此收藏了起来,一段时间之后才去研究,然后开始按照自己的想法去改造进行了二次开发,这个后面再说,还是说说Tale博客系统,当我打开这个博客网站的时候,目光瞬间就被吸引住了,简单、美观、大方,感觉看上去特别的舒服,炎炎夏日中的一件白衬衫,清爽,洁白,真的是第一眼就喜欢上了这个博客。接着就去研究了项目的部署(过程不表),体验了一下后台功能,作为一个博客模板来说功能是较为齐全的,基本能够满足私人博客网站的需求,因此就打算将此系统来作为自己的个人博客网站模板。
首页的效果如下图所示,由于原Tale网站无法打开就无法看到Tale的效果图了,此截图为我的网站首页图片,模板是一样的,相信你看到这张效果图也会喜欢上这个博客的:
至于为什么又花了一个多月的时间进行二次开发,以致于5月13日才上线,有以下原因:
- 原项目是使用Blade框架进行开发
- 域名及云服务器购买,网站的ICP备案
- 整合docker、docker-compose
- install流程修改
- 部分功能修改
- 工作太忙,无法全部投入
- 刚好是13号,对,13
原Tale博客后台的系统设置中,有关闭「允许重新安装」的选项,这个默认设置为「关闭」,但是实际还是能够进入安装页面,如果有网友能够猜出博主的数据库用户名和密码的话,估计就能把对方的博客给一锅端了。现在这个问题应该是修复了,但是3月份刚看到这个项目的时候是存在这个问题的,因此也就动了修改的心思。
另外一个原因,就是代码里的install模块,下载下来运行之后,总觉得这个过程很别扭,首先,这是一个私人的博客系统,数据库的相关配置应该是确定了的,不出意外的话应该不会有改动的,直接写在代码里应该更好,个人感觉install模块中初始化数据库步骤的意义并不是很大甚至有些多余(个人看法),另外就是直接暴露出这个页面和接口地址并不是特别安全,因此就想重写这个过程。
这一个多月的时间里做了以下修改:首先是项目整体由Blade框架开发改造为SpringBoot+Mybatis开发,接着是整合了Docker使得部署简易化,其次就是完全删除了原来的install过程,改为由docker-compose实现的一句脚本命令完成数据库的初始化及项目启动,无需多余操作,主要参考了tale和my-blog-project项目。
整合Docker简化部署过程
原来的部署过程有:
- 搭建Java运行环境,
- 安装mysql数据库,
- 初始化数据,
- 运行jar包。
其实也没有太多的步骤,但是那段时间刚好在上手Docker,因此就特别的想在项目中整合Docker,检验一下自己的知识掌握程度,同时也使得部署的步骤更少,但是删除了install过程后,又忍不住思考是否能让mysql数据库安装及数据的初始化也通过Docker来实现,就不需要人为的再去搭建数据库和运行数据库脚本了(其实就是懒),这个实现过程花费时间较长,最终通过docker-compose及一些shell脚本命令实现了整个过程,只要运行一行shell启动脚本命令即可实现Mysql数据库的创建、数据导入、Mysql容器的创建及启动、blog容器创建及启动、两个容器的连接交互、项目启动。
启动脚本如下:
#!/usr/bin/env bash
set -e
mvn clean install -Dmaven.test.skip=true
# 停止原先运行的容器
docker-compose stop
docker-compose rm -f
#删除名称为none的镜像
docker images|grep none|awk '{print $3 }'|xargs docker rmi
# 使用docker-compose启动多容器应用
docker-compose up --build -d
# 日志
docker-compose logs -f
代码太多啦,就不放上来了,以后有时间的话会针对不同的功能和技术做详细介绍的,接下来是赏图时间: 首页:
文章详情页:
登录页:
文章列表页:
文章编辑页:
分类编辑:
结语
网站的持续运行需要各项基础设施的搭建,而服务期的续费和维护及各种配套服务的购买也需要一定的费用,希望朋友们给予一点支持,谢谢!
个人对这个博客系统还是挺满意的,以后也会陆陆续续添加功能进来,比如搜索引擎啊,缓存功能,ELK日志系统等等,进一步来完善这个系统,当然ssm项目的进阶篇近期可能就要拖更了,有时间再写吧。
这是我的个人博客地址,欢迎大家去浏览、指导和批评。
- JS魔法堂:再次认识Function.prototype.call
- MySQL(六)之MySQL常用操作符
- 无人驾驶的基本算法及简单介绍
- CentOS6.5安装Java 8以及Tomcat8
- Java基础06 组合
- 警告:MySQL-server-5.6.21-1.linux2.6.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
- MySQL(五)之DDL(数据定义语言)与六大约束
- Java基础08 继承
- 关于python字典类型最疯狂的表达方式
- centos6.5使用yum安装mysql
- Java基础09 类数据与类方法
- MySQL(四)之MySQL数据类型
- JS魔法堂:ASI(自动分号插入机制)和前置分号
- Java基础05 实施接口
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MySQL允许在唯一索引字段中添加多个NULL值
- [OHIF-Viewers]医疗数字阅片-医学影像-中间插播一下-es6-使用const加箭头函数声明函数相对于function声明函数有什么好处?
- 日志切割工具-Logrotate实现nginx日志切割
- JVM元数据区
- Linux下指定pip install和make install安装路径
- 日志追踪 sentry
- PHP-FPM多方面调优策略
- 自动部署项目脚本
- 探索性数据分析,Seaborn必会的几种图
- Neurocomputing模板下载及编译
- C++ 11 nullptr关键字
- 【Code】OGB:图机器学习的基准测试数据集
- pytorch 如何设置 可学习参数
- Python实现6种排序算法,快排只有6行?
- 解决git不小心提交大文件导致无法提交问题