Node.js 实战之—防灾备措施

Posted 暗夜余晖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js 实战之—防灾备措施相关的知识,希望对你有一定的参考价值。

前言

博客系统上线已经3个多月了,中间没有出现过宕机事故,一直稳定运行。自己写的代码还是挺严谨的,小小鼓励一下!上周对云服务器进行了一次内存扩容,扩容后重启了一次服务器。虽然过程很短,但是因重启后导致一系列服务也需要手动启动,却是比较繁琐的。做为一个高级程序猿,怎么能让自己干这么低级的事呢?做到自动化、智能化才是我们的追求,向高逼格看齐。今天我们就来做一些防灾备措施。

本文原文地址:https://www.limitcode.com/detail/599c238769e95702e078023d.html

Mongodb 开机自动启动

把Mongodb安装成Windows服务并设置启动方式为自动启动。这样服务器重启的时候,就不用手动启动Mongodb实例了。具体做法如下:
管理员模式运行CMD窗口,管理员模式运行CMD窗口,管理员模式运行CMD窗口,重要的事情说3遍,否则安装服务会没有权限。然后cd 到Mongodb的安装目录下的bin目录,

运行命令:mongod --dbpath=db路径 --logpath=log路径 --install

回车后没有任何提示即为安装成功,控制面板——>管理工具——>服务,打开找到MongoDB服务确定安装成功。接着我们把MongoDB服务启动类型设置成自动启动,可以鼠标操作,也可以使用命令行的方式。为了提高逼格,博主这里使用命令行的方式。

运行命令:sc config MongoDB start=auto

设置为自动启动后,运行 MongoDB 服务,启动一个MongoDB实例。

运行命令:sc start MongoDB

至此,我们对MongoDB的优化告一段落。

Node 网站开机自动启动

标题描述的不太清晰,为了防止出现误导,请允许我再墨迹几句。我们实际要做的是开机实现博客网站的自动启动,也就是自动运行 node server.js 命令来启动我们的网站。要实现这个其实不难,可以通过批处理、编写自己的Windows服务来达到效果。博主比较懒,不想自己写,所以这里我们借助其他大牛写的开源 node-windows 模块来实现。

模块介绍地址:https://github.com/coreybutler/node-windows

在博客项目根目录下新建一个 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原因,博主也是被坑惨了,最后无奈之下查看源码才发现并不是自己的问题。下面附上解决方案:

技术图片


以上是关于Node.js 实战之—防灾备措施的主要内容,如果未能解决你的问题,请参考以下文章

Node.js实战之Node多进程与JXcore 打包深入运用

Node.js 切近实战 之图书管理系统

实战系列之 Node.js 玩转 Java

Node.js 实战之—优化汇总

Node.js JavaScript 片段中的跳过代码

Node.js Express博客项目实战 之 后台登录退出功能