Node.js 切近实战(十二) 之Linux部署

之前的话我们的项目都是跑在windows上,今天我们要将我们的程序跑到linxu机器上。在看linux部署之前,我们先看一下node.js类似于asp.net mvc的过滤器或者叫拦截器。在app.js中我们加入如下代码

var beforeRequest = function (req, res, next) {
    if (req.originalUrl == '/' 
        || req.originalUrl == '/login' 
        || req.originalUrl == '/config' 
        || req.originalUrl == '/user' 
        || req.originalUrl == '/logInout') {
        next();
    }
    else if (session.user == null || session.user == undefined || !session.user.UserID) {
        res.redirect('/login');
    }
    else {
        next();
    }
}

app.use(beforeRequest);

此时当有请求到达时,就会先判断用户是否登录,如果未登录,则跳转至登陆界面。但是要确保该代码在注册路由之前。

app.use('/', routes);

OK,接下来我们在看一下node.js平台上log4js的使用。

var log4js = require('log4js');
var log4jsConfig = require('./framework/config/log4js_config.js');
log4js.configure(log4jsConfig.config);

ok,接下来我们看一下log4js的配置

exports.config = 
{
    appenders: [
        {
            type: 'console',
            category: "console"
        }, {
            type: 'file',
            filename: 'logs/info.log', 
            maxLogSize: 1024,
            backups: 1,
            category: 'log_info'
        }, {
            
            type: "datefile",  
            filename: "logs/error",
            alwaysIncludePattern: true,  
            pattern: "-yyyy-MM-dd-hh.log",
            category: "log_error"
        }, {
            category: "log_trace",  
            type: "datefile",  
            alwaysIncludePattern: true,  
            pattern: "-yyyy-MM-dd-hh.log",
            filename: "logs/trace"
        }
    ],
    replaceConsole: true,
    levels:  
    {
        console: "ALL",  
        log_error: "ALL",  
        log_info: "ALL",
        log_trace: "ALL"
    }
}

OK,经过这样的配置之后,我们看一下记录的log。

wKioL1fO2dKxokvTAAAvNV-X9f8131.png

OK,其实在app.js中我们对记录进行了设置。

var loggerInfo = log4js.getLogger('log_info');
var loggerError = log4js.getLogger('log_error');
var loggerTrace = log4js.getLogger('log_trace');
app.use(log4js.connectLogger(loggerInfo, { format: ':method :url' }));

定义了三种log,error分别记录404和500。

app.use(function (req, res, next) {
    loggerError.error(req.url);
    var err = new Error('Not Found');
    err.status = 404;
    err.message = "The resource you are look for is not found!";
    next(err);
});

app.use(function (err, req, res, next) {
    res.status(err.status || 500);
    loggerError.error(err.message);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

而info用来记录console.log,经过设置

replaceConsole: true

使得console的内容可以在窗口输出,而不是仅写入log文件。

[2016-08-01 14:17:01.074] [INFO] log_info - GET /user/file?pageIndex=0&pageSize=10&isShared=false&fileName=
[2016-08-01 14:17:02.408] [INFO] log_info - GET /page?q=s
[2016-08-01 14:17:02.841] [INFO] log_info - GET /docshare
[2016-08-01 14:17:04.674] [INFO] log_info - GET /user/sharedfile?userId=&pageIndex=0&pageSize=10&fileName=&startDate=&endDate=
[2016-08-01 14:17:08.921] [INFO] log_info - GET /page?q=u
[2016-08-01 14:17:11.713] [INFO] log_info - GET /page?q=r
[2016-08-01 14:17:11.919] [INFO] log_info - GET /file/auth
[2016-08-01 14:17:13.628] [INFO] log_info - GET /user/file?pageIndex=0&pageSize=10&isShared=true&startDate=Fri%20Jul%2001%202016%2000:00:00%20GMT+0800%20(й)&endDate=Mon%20Aug%2001%202016%2014:17:11%20GMT+0800%20(й)&fileName=
[2016-08-01 14:17:21.512] [INFO] log_info - GET /page?q=c

而且格式就是上面设置的http method+URL

app.use(log4js.connectLogger(loggerInfo, { format: ':method :url' }));

OK,关于log4js就说这么多,毕竟只是个工具,大家自己下去看api就行了。

好了,接着我们将改程序部署至linux我的centos5。

wKiom1fO25bhNU3GAAIUvDHlb3w611.png

有没有注意到我桌面的ftp服务器192.168.80.1,没错就是我在win10搭建的ftp服务器。OK,我们将node.js程序放到ftp,我们再拷贝至centos。

wKiom1fO3C-xbP80AAA8uXumXWY200.png

ok,我们把所有要用的东西都通过此方法拷贝至centos。

wKiom1fO3I-TE9q7AABVsnJ6Ihs116.png

我们需要的是部署程序,mongodb,node.js for linux。好的,完成后,我们先要启动mongodb

wKioL1fO3U3CpusDAAIDZRbBrpo290.png

接着我们通过node命令启动程序。

wKioL1fO3uzBFP1JAABTqjI1HGA528.png

启动成功,我们在window上访问一下

wKiom1fO3zfzzsVxAACRTj8mmx4498.png

有的人说了,你这个图我怎么知道是不是linux的ip。我现在就给你看两张图,一个是ip,

一个是centos的火狐浏览器。

wKioL1fO36yQNvvAAADFX9XmQ3s692.png

我们再看一下linux下火狐的浏览效果

wKioL1fO4QzCbySEAACQerMyrZw780.png

这个浏览器估计有些老,不支持html5。OK最后我们登录进去看系统是否正常。

wKiom1fO4V3iebSkAADFO9uDTwI402.png

木有什么问题,ok,今天就到这里。后面会多多的玩linux,什么.net core什么玩意的我们也玩玩。


本文出自 “技术创造价值” 博客,请务必保留此出处http://leelei.blog.51cto.com/856755/1847040

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

数据库备份mysqldump应用总结 - 2016-09-12 14:09:16

[root@ansible~]#mysqldump-uroot-p123456xxx/opt/xxx.sql#备份数据库xxx[root@ansible~]#egrep-v"#|\*|--|^$"/opt/xxx.sqlDROPTABLEIFEXISTS`test`;CREATETABLE`test`(`id`int(4)NOTNULLAUTO_INCREMENT,`name`char(20)NOTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=7DEF
某电信运营商3G系统与4G系统建立号码核对系统,因为两个系统的号码状态不一致。源端使用Oracle Goldengate软件,目标端使用Kafka自写CUE程序进行解析源端传输过去的Trail文件。目标端不采用Goldengate的复制进程进行解析。 在某系统中创建Oracle Goldengate相关进程mgr,抽取,投递进程之后,发现抽取进程异常终止。且view ggsevt后发现如下报错: 2016-08-17 16:40:57 ERROR OGG-01028 Oracle GoldenGate C
su和su- 切换方式 实例: sudo 提权 sudo的特色功能 sudo命令的常用参数 注意 案例1——允许zhanghe用户执行所有命令: 案例2——仅允许linuxprobe用户以root用户身份执行cat命令。 案例3——允许linuxprobe用户以任意身份执行命令,且每次都不需要密码验证。 su和su- 在工作生产环境中不要去使用root用户身份,因为一旦执行了错误的命令后可能直接让系统崩溃。但因为许多的系统管理命令和服务为了安全所以只有超级用户才可以使用,因此这也无疑让普通用户受到更多的权

Zabbix添加网卡内外流量监控 - 2016-09-05 18:09:00

题外话:zabbix讲究一气呵成,从头到尾没人打扰然后布置。但是干运维难免有人来打扰,这个过来要求布环境,那个要求来买服务器。所以zabbix之路难免走的坑坑洼洼。 现在笔者想对host名单里面的zabbix_server进行网卡的内外流量情况的一个监控,首先登录zabbix之后,configuration---hosts,出现如下的菜单: 现在可以看到这个zabbix_server后面link了很多个模板,正是因为link了很多的模板,所以导致它的items非常多,42个。现在是要在zabbix_ser

远程桌面排错 - 2016-09-05 17:09:01

最近遇到了一个比较棘手的问题,用户远程桌面无法连接,我的博文中之前也写到了一篇远程桌面排错,但是这次的和之前的大不相同 = = 原因排查步骤 1)首先当然是查看报错,这个是我自己机器上截图的,报错信息都一样 2)首先查看服务器是否开启了远程访问 3)查看目标是否可以ping通 4)查看服务是否正常启动 5)如果要正常远程到目标必须可以telnet到目标的远程端口,默认为3389,这个端口不通,我们之前已经将防火墙关闭了 6)本机上telnet 127.0.0.1 3389,这么做的话可以排除外界因素的干扰

Nginx演练(3)配置内容压缩 - 2016-09-05 17:09:51

如果对HTTP熟悉的话,对request-response请求过程应该很熟悉。 比如访问“www.jd.com",一个完整页面的访问,往往会经过很多次的HTTP请求共同完成,这中间会涉及到浏览器并发数。具体片段如图 客户端请求的资源内容有多种,jpg,css,js,html等。不同文件类型,对应不同MIME_TYPE。每个文件都要通过网络传输到客户端,才能被浏览器渲染,进而展现给用户。想必大家都有给朋友发送文件的经历吧,不管是QQ传输,还是Email传送。如果一个文件过大,想节省点传输时间,都会发送文件之
[root@example~]#yuminstallipvsadm-y安装ip_vs管理工具理论部分我们在上篇文章中详细介绍了,这次进入实操阶段[root@example~]#modprobeip_vs加载ip_vs模块[root@example~]#modprobeip_vs_rr[root@example~]#lsmod|grepip_vsip_vs_rr14200ip_vs1265342ip_vs_rrlibcrc32c12461ip_vsipv6335589271ip_vs[root@exampl
公司同事强制关机,导致vmware里面虚拟机无法启动,报错:虚拟机在使用,请获取所有权,获取之后仍然说不能使用。 这篇博文记录一个VMWare虚拟机非正常关闭后无法启动的解决方案。 我们中心的网站部署在一个WindowsXP的虚拟机上,但是由于电源问题,那台虚拟机所在的实体物理机总是重启,有时候就会导致虚拟机系统还没有正常关闭就被迫关机了。机器重启后,虚拟机系统总是无法正常启动,弹出类似下面的错误: Cannotopen the disk ‘C:\VM-machines\Windows XP-001\Wi
今天给大家展示一下,我自己写的一个自动创建Bash脚本文件头的脚本(名为create),希望能对初学脚本者带来一定的思维提示。毕竟对于一个经常写脚本的运维人员来说,每次写脚本的时候都需要重复的去写一遍文件头,也是一件很累赘的事情,既然我们学了脚本,为什么不让它来为我们减轻一下负担了。所以一个自动创建Bash脚本文件头的想法在我脑海里面产生了。 本脚本所需要实现的功能: 1,能够自动创建一个标准的Bash脚本文件头,带有详细注释信息 2,能够给新建完成的Bash脚本文件自动添加执行权限 [root@cent

Redis集群解决方案-Codis - 2016-09-05 17:09:33

Codis由豌豆荚于2014年11月开源,基于go和c开发,是近期涌现的、国人开发的优秀开源软件之一,稳定性极高,性能更是改善了很多。 Codis由四部分组成: codis-proxy:codis-proxy是客户端连接的Redis代理服务,codis-proxy本身实现了Redis协议,表现得和一个原生Redis没什么区别,对于一个业务来说,可以部署多个codis-proxy,codis-proxy本身是无状态的 codis-config:codis-config是Codis的管理工具,支持添加/删除R