Getting Node.js Apps Production Ready

部署程序需要知道的方面:

  • Environment variables
  • Express.js in production
  • Socket.IO in production(在线文章缺失这章)
  • Error handling
  • Node.js domains for error handling
  • Multithreading with Cluster
  • Multithreading with Cluster2
  • Event logging and monitoring
  • Building tasks with Grunt
  • Locking dependencies
  • Git for version control and deployments
  • Running tests in Cloud with TravisCI

Environment Variables

在部署到产品环境之前,需要准备好代码。私人的信息不要放入版本控制系统。

敏感信息如API keys,密码,数据库的URIs最好储存在环境变量内。不要放到源码中。

Node.js可以容易的存取这些环境变量:

console.log (process.env.NODE_ENV,
process.env.API_KEY,
process.env.DB_PASSWORD)

然后,在程序开始前, 设置这些变量:

$ NODE_ENV=test API_KEY=XYZ DB_PASSWORD=ABC node envvar.js

一般,这些环境变量设置是部署的一部分,或者operations setup。

下一章,我们在server内处理这些变量。


Express.js in Production

使用判断语法来检测NODE_ENV变量的值,根据值来使用不同层次的服务logs。

比如开发阶段,我们需要大量的信息,但是在产品阶段,stack和exceptions可能会导致攻击,所以:

const errorHandler = require('errorhandler')
if (process.env.NODE_ENV === 'development') {
app.use(errorHandler({
dumpExceptions: true,
showStack: true
}))
} else if (process.env.NODE_ENV === 'production') {
app.use(errorHandler())
}

process.env.NODE_ENV作为环境变量,可以在terminal(bash, zsh或者其他)设置。

环境变量的语法规则是:

KEY=VALUE
//或者在整个shell session时使用 export KEY=VALUE //例子
$ NODE_ENV=production node app.js

备注:

不是很立即本章给的代码。(https://github.com/azat-co/practicalnode/blob/master/chapter10/chapter10.md)


Error handler

Multithreading with Cluster

核心模块Cluster可以多线程处理系统load。

Event Logging and Monitoring

  1. Monitor via dashboard and health statuses (monitoring and REPL)
  2. Analyze postmortems after the events have happened (Winston and Papertrail)

Building Tasks with Grunt

It performs compilations, minifications, linting, unit testing, and other important tasks for automation.

A Brief on Webpack

和Grunt的功能类似。

module.exports = {
entry: "./jsx/app.jsx",
output: {
path: __dirname + '/js',
filename: "bundle.js"
},
// ... More configurations
}

见之前的博客:

webpack基础概念

https://www.cnblogs.com/chentianwei/p/9877570.html


Locking Dependencies

使用^或者*, 或者在package.json内让version field空着,都会导致下载更高的版本,当你或谁执行npm install。

一个解决方案是,commit node_modules to git

因为即使我们锁定包A在我们的package.json内,很可能A内有一个*或者版本的范围。因此一旦更新,这个A module可能break system。

Commiting模块到你的版本控制系统。

Git for Version Control and Deployments

安装

生成SSH key.

创建本地仓库:


Running Tests in Cloud with TravisCI

使用云端跑测试。有不少选择。

Practical Node.js (2018版) 第10章:Getting Node.js Apps Production Ready的更多相关文章

  1. Practical Node.js (2018版) 第7章:Boosting Node.js and Mongoose

    参考:博客 https://www.cnblogs.com/chentianwei/p/10268346.html 参考: mongoose官网(https://mongoosejs.com/docs ...

  2. Practical Node.js (2018版) 第5章:数据库 使用MongoDB和Mongoose,或者node.js的native驱动。

    Persistence with MongoDB and Mongoose https://github.com/azat-co/practicalnode/blob/master/chapter5/ ...

  3. Practical Node.js (2018版) 第9章: 使用WebSocket建立实时程序,原生的WebSocket使用介绍,Socket.IO的基本使用介绍。

    Real-Time Apps with WebSocket, Socket.IO, and DerbyJS 实时程序的使用变得越来越广泛,如传统的交易,游戏,社交,开发工具DevOps tools, ...

  4. Practical Node.js (2018版) 第3章:测试/Mocha.js, Chai.js, Expect.js

    TDD and BDD for Node.js with Mocha TDD测试驱动开发.自动测试代码. BDD: behavior-driven development行为驱动开发,基于TDD.一种 ...

  5. Practical Node.js (2018版) 第8章:Building Node.js REST API Servers

    Building Node.js REST API Servers with Express.js and Hapi Modern-day web developers use an architec ...

  6. Practical Node.js (2018版) 第4章: 模版引擎

    Template Engines: Pug and Handlebars 一个模版引擎是一个库或框架.它用一些rules/languages来解释data和渲染views. web app中,view ...

  7. Vue.js 学习笔记 第1章 初识Vue.js

    本篇目录: 1.1 Vue.js 是什么 1.2 如何使用Vue.js 本章主要介绍与Vue.js有关的一些概念与技术,并帮助你了解它们背后相关的工作原理. 通过对本章的学习,即使从未接触过Vue.j ...

  8. Node入门教程(7)第五章:node 模块化(下) npm与yarn详解

    Node的包管理器 JavaScript缺少包结构的定义,而CommonJS定义了一系列的规范.而NPM的出现则是为了在CommonJS规范的基础上,实现解决包的安装卸载,依赖管理,版本管理等问题. ...

  9. Node入门教程(6)第五章:node 模块化(上)模块化演进

    node 模块化 JS 诞生的时候,仅仅是为了实现网页表单的本地校验和简单的 dom 操作处理.所以并没有模块化的规范设计. 项目小的时候,我们可以通过命名空间.局部作用域.自执行函数等手段实现变量不 ...

随机推荐

  1. Robot Framework自动化测试Selenium2Library库详细用法

    一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com chrome 浏览器对应的关键字: firefox FireFox ff internete ...

  2. listview添加数据

    1. 添加数据: ListView1.ViewStyle:=vsReport; ListView1.Columns.Add; ListView1.Columns[0].Caption:='aaaa'; ...

  3. iptables 分析(三)

    原文:http://blog.chinaunix.net/uid-24207747-id-2622902.html find_target查到目标并加载成功,返回一个xtables_target型对象 ...

  4. Windebug调试

    .loadby SOS clr .Symfix .reload !threads !printexception [address]

  5. OCP-第三节课.md

    一. dataguard  stream  字节流技术: 二. 突然断电:触发实例恢复过程: 三. 宕机:赔钱 四. Redis.MQ(消息中间件.队列管理器.缓存)(内存数据库) 五. IBM MQ ...

  6. char 类型的操作函数

    1.内存充填 void *memset(void *s,int ch,size_t n); 是由C Run-time Library提供的提供的函数,作用是在一段内存块中填充某个给定的值,它是对较大的 ...

  7. acm 2015北京网络赛 F Couple Trees 主席树+树链剖分

    提交 题意:给了两棵树,他们的跟都是1,然后询问,u,v 表 示在第一棵树上在u点往根节点走 , 第二棵树在v点往根节点走,然后求他们能到达的最早的那个共同的点 解: 我们将第一棵树进行书链剖,然后第 ...

  8. laravel容器container 阅读记录

    今天抽时间又仔细看了一下laravel的container,记录一下. 所谓容器,听名字就知道,是一个仓库,装东西用的,所以,container所有的功能,都围绕一个主题:管理装. 类名称:Illum ...

  9. CRT/LCD/VGA Information and Timing

    彩色阴极射线管的剖面图: 1. 电子QIANG Three Electron guns (for red, green, and blue phosphor dots)2. 电子束 Electron ...

  10. https真的安全吗,加密登录其实不简单

    登录,是做web开发的程序员做项目第一接触到的模块,看似简简单单的登录背后囊括了编程知识的方方面面. 登录安全吗?密码会不会泄露? 明文传输时代 互联网开始的时候,登录确实是使用明文校验的,甚至数据源 ...