博客系统上线已经3个多月了,中间没有出现过宕机事故,一直稳定运行。本身写的代码仍是挺严谨的,小小鼓励一下!上周对云服务器进行了一次内存扩容,扩容后重启了一次服务器。虽然过程很短,可是因重启后致使一系列服务也须要手动启动,倒是比较繁琐的。作为一个高级程序猿,怎么能让本身干这么低级的事呢?作到自动化、智能化才是咱们的追求,向高逼格看齐。今天咱们就来作一些防灾备措施。html
把Mongodb安装成Windows服务并设置启动方式为自动启动。这样服务器重启的时候,就不用手动启动Mongodb实例了。具体作法以下:
管理员模式运行CMD窗口,管理员模式运行CMD窗口,管理员模式运行CMD窗口,重要的事情说3遍,不然安装服务会没有权限。而后cd 到Mongodb的安装目录下的bin目录,node
运行命令:mongod --dbpath=db路径 --logpath=log路径 --install
回车后没有任何提示即为安装成功,控制面板——>管理工具——>服务,打开找到MongoDB服务肯定安装成功。接着咱们把MongoDB服务启动类型设置成自动启动,能够鼠标操做,也可使用命令行的方式。为了提升逼格,博主这里使用命令行的方式。git
运行命令:sc config MongoDB start=auto
设置为自动启动后,运行 MongoDB 服务,启动一个MongoDB实例。github
运行命令:sc start MongoDB
至此,咱们对MongoDB的优化告一段落。json
标题描述的不太清晰,为了防止出现误导,请容许我再墨迹几句。咱们实际要作的是开机实现博客网站的自动启动,也就是自动运行 node server.js 命令来启动咱们的网站。要实现这个其实不难,能够经过批处理、编写本身的Windows服务来达到效果。博主比较懒,不想本身写,因此这里咱们借助其余大牛写的开源 node-windows 模块来实现。windows
模块介绍地址:https://github.com/coreybutler/node-windowsbash
在博客项目根目录下新建一个 nodeWindowServer.js 和package.json同级,名字能够随意取。而后编写以下代码:服务器
var path=require("path"); var Service = require('node-windows').Service; var svc = new Service({ name:'MyBlogs',//服务名称 description: '暗夜余晖的我的博客网站',//服务的描述 script: path.join(__dirname,'server.js')//网站的启动脚本 }); svc.on('install',function(){ svc.start(); }); svc.install();
管理员身份打开CMD窗口,而后cd到项目目录,运行如下命令安装服务:工具
node nodeWindowServer.js
安装完成后会在项目根目录下生成一个 daemon 文件夹,这里面存放的就是windows 服务的可执行文件。打开 管理工具—> 服务 能够看到已经添加了名称为MyBlogs的服务,而且启动类型为自动启动。优化
细心的博友有没有发现一个问题?
咱们的MongoDB和网站都是开机自动启动,他俩之间是没有前后顺序之分的。可是网站却依赖于MongoDB服务,怎么作到当MongoDB启动后咱们的网站才会启动呢?这个就须要咱们作服务之间的依赖设置了。而后咱们修改nodeWindowServer.js中的代码,加入依赖设置。
var path=require("path"); var Service = require('node-windows').Service; var svc = new Service({ name:'MyBlogs',//服务名称 description: '暗夜余晖的我的博客网站',//服务的描述 script: path.join(__dirname,'server.js'),//网站的启动脚本 dependencies:"MongoDB",//添加服务依赖 }); svc.on('install',function(){ svc.start(); }); svc.install();
能够看到代码中咱们添加了 dependencies :"MongoDB" 配置节点。接着把MyBlogs.exe服务删除,从新安装服务。安装完成后,咱们在 MyBlogs 服务的属性中查看依赖关系,发现并无添加上MongoDB的依赖(若是服务安装不成功,能够将项目根目录下的daemon文件夹删除后重试)。出现这个问题是由于模块自己的BUG缘由,博主也是被坑惨了,最后无奈之下查看源码才发现并非本身的问题。下面附上解决方案: