Java开源博客My-Blog之docker容器组件化修改
前言
5月13号上线了自己的个人博客,《Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦》,紧接着也在github上开源了博客的代码,到现在为止,感觉这个项目还是有一点点关注度的,包括博客站点的访问量,github仓库中MyBlog项目的访问量都还不错,总体来说是一种进步且向上的态势。
这是某个24小时内http://blog.hanshuai.xin
站点的访问日志分析面板:
但是呢,也渐渐觉得自己的个人想法有些影响了这个项目。在My-Blog博客系统最初的设计和技术选型上,其实docker算是几个技术栈中我比较注重的一个,因为近一年多来比较关注容器化技术,因此,即使是在这个博客项目中,我也较多的将重点放在docker上,不管是开发部署,还是以后的扩展计划上,更多的都是围绕docker容器技术。
不过事与愿违吧,收到的反馈和一些统计数据让我不得不重新思考整个项目,我所关注和重视的东西,其他人可能并不是特别在意和易于接受,于是我就想,我是不是并没有考虑到其他人的感受,项目既然已经开源了,是不是应该不要太个人主义了。
初露端倪
下图是My-Blog的wiki文档,从图中也可以看出原来的偏重点,将docker相关的文档放在前面,当初编写wiki文档时也是如此,开始的时候甚至并没有将非docker方式的部署教程贴出来,而是后来有不少朋友问了之后才写了#3.1这个wiki Page,但是后来发现,这一页的浏览量其实远远超出其他的文档,大家普遍都去查看非docker环境下的部署教程,也一直在问相关问题。
有一位使用了这个项目的朋友跟我说,因为项目中使用了docker技术的原因,他部署项目花了两三天才完成,仅仅是学习docker命令及相关知识就用了差不多两天,时间成本太高,这个功能对于某些朋友来说,甚至有些鸡肋,因为有些人确实只是觉得项目看起来不错,因此打算作为自己的博客模板,但是用起来却是万分复杂,基于此原因应该也有不少朋友打了退堂鼓,虽然我在wiki中也添加了一些非docker方式部署和开放的教程,但是由于个人的偏好及目录结构原因,docker模块与项目的耦合依然很高。
docker组件化修改
这是原结构图:
很明显,docker代码与java代码耦合在一起。
3.1.1版本修改后的目录结构图:
docker相关文件已单独提取出来作为docker-extension,同时配置文件和运行脚本也做了一定的修改,使得docker启动和非docker启动都可以很简单,即使切换起来也不用人为修改代码,按照wiki教程里说的方法即可。
目前项目中,唯一可以看到docker带来的便利及提供的帮助就只有mysql,因此有些朋友可能觉得docker并不是特别酷,后期的话,随着redis、nginx、logstash、elasticsearch、kinaba、kafka...等组件的添加,结合docker-compose进行容器编排,那个时候应该就会以另外一个心态来面对docker技术了,个人觉得docker真的可以算得上一个奇淫技巧,只是需要时间来发现而已,很明显,这个时间不是现在。
个人想法
docker化,个人比较熟悉也比较喜欢,而且操作起来比较方便,因此主观意向比较浓厚,就将docker相关的一些代码和功能都添加进来了,这是最初做这个项目时的想法,但是现在看起来,docker与原有代码目录搅在一起,项目目录看起来比较臃肿,而且计划中,以后会基于docker继续扩展一些功能,如果再去添加其他组件到目录中,应该会更加耦合、更加的"乱"。
再者,有些人并没有docker基础,如果想要使用这个项目,还得去学习docker相关知识,每次思考这个问题的时候,我都会试着以一个第三者的角度去想,渐渐地觉得这个项目确实有点不人性化,我只是想用一下这个博客,我还要去安装docker、学习docker命令?不学的话还不能好好用这个项目搭博客了?
因此想要将docker相关的扩展和组件剥离出来,只作为其中一个组件,"组件"这个说法不知道合适不合适、正不正确,暂时就这么叫吧,这么做的目的是将docker相关代码剥离出来,不耦合于项目中,想要使用docker相关功能的话就用,如果不想用的话完全可以按照原有的操作习惯来部署和开发My-Blog,应该将选择权交给用户,而不是我个人喜欢怎么样就怎么样,既然选择了开源,就应该将心态放开,考虑一下其他人的感受,不能太自私了,多接受别人的意见也不是一件困难的事情。
docker只是一个工具,在项目中是一个锦上添花的作用,并不是一个不可或缺的部分,因此,为了方便其他人,做出了此次的修改,进行了较大的目录结构调整。
结语
首发于我的个人博客,地址在这里
通过这次事件,我觉得不能把我们的想法和习惯强加给其他人,如果一个朋友只想简简单单搭个博客,结果看到这个博客页面和功能还行,满足要求,但是一看代码,各种框架和技术耦合在一起,又要学新东西,会让人萌生退意的。
为的是方便他人,而不是给别人添麻烦。
希望大家提出更多意见,有喜欢这个项目的也很开心邀请你共同加入项目中。
- 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 数组属性和方法
- 项目实践 | 从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附注释项目代码)
- [OHIF-Viewers]医疗数字阅片-医学影像-Module: Panel-自定义面板-中-es6-Object.defineProperty()定义属性
- (数据科学学习手札90)Python+Kepler.gl轻松制作时间轮播地图
- WEB前端安全自查和加固
- 硬核!IDEA 中使用 Git 完整入门教程!
- 神器你值得拥有——CoolFormat代码一键自动格式化工具,支持Verilog
- 一个简单现实案例挑战 PowerBI 水平测试 - 深度解析
- [译]使用DOT语言和GraphvizOnline来可视化你的ASP.NETCore3.0终结点01
- 探索 React 内核:深入 Fiber 架构和协调算法
- [经验]使用Keil MDK+Jlink-OB下载失败的解决办法
- ESP8266两种工作模式数据传输测试
- 『真香警告』这33个超级好用的CSS选择器,你可能见都没见过。
- [踩坑]STM32外部8M晶体不起振会有什么现象?
- 干掉 GuavaCache:Caffeine 才是本地缓存的王
- 美团数据怎么爬,看看这个文章吧!