之前在Github上看到一个非常好的项目--gobackup,是利用Go语言写了一个备份服务器文件的脚本。正好自己也在做这个相关的运维脚本的开发,就拿来研究了下。然后发现做的功能已经非常成功了,但是我想能不能做的更加Easy点?换句话说,对于运维开发人员,最喜欢的运维方式,永远都是傻瓜式运维,No Script,No Shell&Python,No Configuration items.所以,我就开发了下脑洞,做了个前台配置界面,以及定时任务配置界面。
Ok,首先是前台如何实现。Electron? No, We choose Go Electron。这个项目是zserge/lorca。不过大神给的方案和Electron还是存在差别。那就是这个Lorca属于直接sys call Chrome内核的方式来build一个前台界面。这样有利的地方就是,build之后的APP 大小不大(相对于Electron),但是问题又出现了,没有装Chrome的电脑,就无法正常显示界面了。浏览了下代码,大神给的方法是如果在指定路径下没有找到Chrome内核,就提示用户下载一个。我准备给大神提个Issue,就是提供两种build 方案,打包内核和不打包内核的,根据用户场景来灵活匹配。
这个Backup应用的前台界面使用了比较成熟的Bootstrap方案。主要就是因为开发方便,对于我这个偏后端的小伙子来说并不是那么的难以驾驭(其实也考虑过直接用React来写。但是目前被Redux搞的头晕,就放弃了)。所以直接用Bootstrap构建了一个多页面的简单前台。然后再在不同的按钮上绑定事件,来进行后台的处理。
但是,主体功能还是要通过Go来实现的嘛。借用大神的解决方法,将JavaScript与后台Go函数进行绑定,用异步的方式来处理前端的逻辑。或者对界面进行响应。具体请参考源码,不太清楚的请直接提Issue。
本来,想直接通过lorca来载入本地的页面和JS文件。但是发现无法正常的加载JS文件。所以最后取了个巧,退而求其次,直接用模拟载入网页的方式,来渲染我们的UI。这里我选的是beego(想不到吧,把beego用在单机应用上)。用beego来承载页面跳转逻辑与前台加载的任务。
还有个小地方需要说一下。之前的backup程序,主要通过在Linux系统中添加Crontab表达式的方法来进行定时任务的设置。这样是挺好,但是为什么不一次把任务都弄好呢?所以我加了一个生成Crontab表达式的界面。但是这个表达式可不是让你在服务器上手工设置的。我们的目标是傻瓜式运维。所以,你只需要点点点,就over了。 那么不设置Linux的crontab的话,那么这个功能如何实现呢?这就要感谢另一个小巧而强大的库--gcron . 那么就需要对原来的backup进行下魔改了----我加入了读取生成crontab表达式的函数,并且传入了gcron定时任务配置,接着有定时任务去定时启动备份程序。当然,不配也行,直接执行一次,退出程序就OK。
涉及到的库: Beego,lorca,gcron,backup,bootstrap 等。感谢各位大神出色的轮子,让我们的运维开发工作变得简单快捷。
后期需要继续改进的,主要是页面的跳转要进行修改,要努力贴近原生的体验。再则就是加入对数据库的配置备份,还在考虑前台后台的交互逻辑的问题。
如果大家觉得有什么想了解的,欢迎提issue。