我为什么要写自己的博客

经过两个星期的奋斗,我的新博客终于搭建完成了,这是我的第三个博客,也是我写的第二个博客cms系统,我希望这会是我以后持续使用并且维护的一个博客,这篇文章算是一个小小的总结,我会在这篇文章中介绍为什么我想要自己写一个博客cms系统,和在实现这个博客cms中遇到的那些坑,以及目前博客cms的诸多不足。

下面是我的上一个博客,使用的是wordpress,服务器在境外,所以有时速度很慢。

现在看来,这个博客里几乎所有文章都非常幼稚,但不可否认的是,几乎每一篇文章都是当时的我投入不少心血写出来的。

接下来说我为什么要搭建自己的博客。

事实上,我的第一个博客就是我自己搭建的,现在仍然运行在校网上,但事实是,我几乎从未维护过它——当然,除了最开始的几篇测试性的文章。在那个博客搭建完成不就就被我彻底抛弃了,以至于现在我连截图都拿不出来,抛弃那个博客有几个原因,首先一开始当时并没有想要长久地维护那个博客,其次,那个博客的实现很糟糕,功能根本不完善,并且不支持富文本,根本上只是一个实验性的项目,最后它的服务器在校网上,根本很难算是一个网站。

之后很长一段时间内我都在使用wordpress写博客,不可否认的是,wordpress的功能非常强大,并且非常容易上手,但是在使用wordpress的过程中我从未感到是自己博客的主人,这种感觉就像是国王赐给了你一座城堡,你接受了它,城堡成为了你的领地,但是,你却一点也不了解城堡的构造,也许每个房间下面都有一个隐蔽的地道,你不知道。也许你放在房间里的东西第二天早晨就会神秘地消失。并且,当你想要改造自己的城堡时,你会发现根本无从下手,或者发现有一堆难以理解的图纸。

这也是我决定重新写一个博客的重要原因,另一方面是因为一个非常geek的理由

Because I Can

接下来说明一下搭建一个博客cms的大致步骤以及一些我自己遇到的坑:

购买服务器及域名

There is nothing tricky on it.基本上几十块钱一个月就可以买到配置足够的服务器,域名则另看,一般来说足够博客初期的流量消耗,而且拥有一台外网的linux服务器对于学习新知识也是有很大帮助的。这部分比较坑的是域名的备案,相对比较麻烦,而且时间也拖得比较久,我的经验是两周左右。

选择开发语言以及框架

一个好的语言对于快速开发特别重要,虽然我喜欢python的简洁,但是我最后还是选择了php,原因是在有点囧,是因为最近在实习php……

至于框架,我选择了一个比较流行的框架laravel,据说是吸收了很多ruby on rails的东西,而且框架也比较年轻,使用上来说也确实非常适合像个人博客这样的小型网站,上手也很轻松,很棒的框架。

搭建开发环境

这一部分主要是要搭建一个自己的开发和上线系统,相信没有人希望网站在开发的过程中服务会受到影响,所以个人建议是自己开发一个小的版本系统和一个小的上线系统(或者使用现有的git,svn之类的版本控制),迭代式的开发会产生很多的版本和回滚,但是由于独立开发,却不怎么产生分支,所以很多git和svn的功能其实都是没有用到的,而且git和svn其实都会有一些不符合自己需求的地方,所以在这种灵活的开发环境下写一个自己的版本系统其实也是一种解决方案(ps:而且其实做个简单的代码量不大)

上线系统其实倒是可选的,市面上也有一些开源的东西,比如jekins,但是这些东西可能对于个人博客来说太重了,所以我也选择自己开发了非常简单一套,这里有一些坑,比如一些比较关键路径的权限和所有者,还有一些上线时需要进行的操作,比如备份代码和调试模式的改变等等。

编写代码

编写一个博客系统时很自然地会考虑以下这几个问题:

  • 使用什么样的存储结构,sql?redis?memche?还是纯静态?
  • 富文本解决方案是什么?
  • 后台和权限系统如何快速实现?
  • 怎样防止常见的攻击手段(sql注入,xss等)?

这些问题的解决方案其实都不复杂,但是想要完美地做好也不太容易,下面给出我对这几个问题的考虑:

  • 博客使用mysql存储文章,在瓶颈段加上redis实现加速
  • 采用markdown编写,现成的解决方案有一些,比如showdown.js,marked.js等前端解决方案,还有一些后端解决方案,个人使用的是marked和editor.js实现(纯前端解决方案),这一块的实现其实我并不满意
  • 使用laravel的中间件实现
  • 进行前后端的参数过滤

进行优化

网站进行优化的方法有很多,但是优先度是不同的,当静态资源加载需要1s而数据库查询仅仅需要100ms时,应该优先对静态资源进行优化,重要的是找出网站速度的瓶颈,并针对性的进行优化。提供几个优化的可能方向和解决方案:

  • js和css的加载 对每个资源进行分析,是使用一些公共的cdn,还是使用自己网站的静态资源,再或是购买cdn服务,还有一个比较关键的优化点是css或js的合并。
  • 图片延迟加载 一些图片的延迟加载不仅可以使网站的响应速度加快,还能节省流量。
  • 找出适合使用ajax的地方 并不是网站的所有地方都适合使用ajax,始终记得原则是ajax的使用应该使网站更快,更灵活。

现在博客已经开源在 oschina