Practical Node.js (2018版) 第10章:Getting Node.js Apps Production Ready
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
- Monitor via dashboard and health statuses (monitoring and REPL)
- 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的更多相关文章
- Practical Node.js (2018版) 第7章:Boosting Node.js and Mongoose
参考:博客 https://www.cnblogs.com/chentianwei/p/10268346.html 参考: mongoose官网(https://mongoosejs.com/docs ...
- Practical Node.js (2018版) 第5章:数据库 使用MongoDB和Mongoose,或者node.js的native驱动。
Persistence with MongoDB and Mongoose https://github.com/azat-co/practicalnode/blob/master/chapter5/ ...
- Practical Node.js (2018版) 第9章: 使用WebSocket建立实时程序,原生的WebSocket使用介绍,Socket.IO的基本使用介绍。
Real-Time Apps with WebSocket, Socket.IO, and DerbyJS 实时程序的使用变得越来越广泛,如传统的交易,游戏,社交,开发工具DevOps tools, ...
- 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.一种 ...
- 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 ...
- Practical Node.js (2018版) 第4章: 模版引擎
Template Engines: Pug and Handlebars 一个模版引擎是一个库或框架.它用一些rules/languages来解释data和渲染views. web app中,view ...
- Vue.js 学习笔记 第1章 初识Vue.js
本篇目录: 1.1 Vue.js 是什么 1.2 如何使用Vue.js 本章主要介绍与Vue.js有关的一些概念与技术,并帮助你了解它们背后相关的工作原理. 通过对本章的学习,即使从未接触过Vue.j ...
- Node入门教程(7)第五章:node 模块化(下) npm与yarn详解
Node的包管理器 JavaScript缺少包结构的定义,而CommonJS定义了一系列的规范.而NPM的出现则是为了在CommonJS规范的基础上,实现解决包的安装卸载,依赖管理,版本管理等问题. ...
- Node入门教程(6)第五章:node 模块化(上)模块化演进
node 模块化 JS 诞生的时候,仅仅是为了实现网页表单的本地校验和简单的 dom 操作处理.所以并没有模块化的规范设计. 项目小的时候,我们可以通过命名空间.局部作用域.自执行函数等手段实现变量不 ...
随机推荐
- Codeforces Round div2 #541 题解
codeforces Round #541 abstract: I构造题可能代码简单证明很难 II拓扑排序 III并查集 启发式排序,带链表 IV dp 处理字符串递推问题 V 数据结构巧用:于二叉树 ...
- [daily][fedora][netctl][nmcli] 设置笔记本为台式机网关
TAG:将一个网卡动态增减到网桥里的配置 场景是这样的. 我的笔记本无线网卡用来访问互联网.OS里面有一个birdge用来链接所有的虚拟机帮助虚拟机上网. 现在有了一台台式机.台式机用来做hyperv ...
- 获取子字符串函数MidStr
MidStr返回指定范围内的字符串.该函数有三个参数.第一个参数为源字符串,第二个参数为起点(下标从1开始),第三个参数为结束点.通过第二.第三个参数则可指定要复制字符串的范围. function M ...
- Golang--不定参数类型
1.不定参数类型 不定参数是指函数传入的参数个数为不定数量. package main import ( "fmt" ) //不定参数函数 func Add(a int, args ...
- Python记录10:模块
''' 1. 什么是模块 模块就一系列功能的集合体 模块有三种来源: 1. 内置的模块 2. 第三方的模块:pip install +模块名称 ...
- [macOS] Error: /usr/local must be writable!" (Sierra 10.12 )
Error: /usr/local must be writable!" (Sierra 10.12 ) solution: sudo chown -R $(whoami) /usr/loc ...
- linux和Windows下用sublime text3编译运行C,C++
安装MinGW 1.首先安装MinGW,默认安装位置是C:\MinGW. 2.安装完成后,右键“我的电脑”->属性 ->高级->环境变量,在系统环境变量PATH里添加C:\MinGW ...
- VCS
timing check相关的, +notimingcheck命令,可以用在compile时,也可以用在run time的时候, 都是将检查timing的系统函数,都disable掉了, 加在comp ...
- OpenStack-Neutron-VPNaaS-配置
配置openstack版本:Juno vpnaas配置的资料很少,官网目前参考的https://wiki.openstack.org/wiki/Neutron/VPNaaS/HowToInstall比 ...
- Java复制目录/子目录/文件
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...