最近在部署Node.js程序时,写了段简单的脚本,发觉还挺简单的,忍不住想与大家分享。

配置文件

首先,本地测试环境和生产环境的数据库连接这些配置信息是不一样的,需要将其分开为两个文件存储 到config目录下,比如:

开发环境配置文件config/development.js

module.exports = {
port: 3001,
mysql: {
user: 'root'
}
};

生产环境配置文件config/production.js:

module.exports = {
port: 80,
mysql: {
user: 'myapp',
password: '2zbonsjzl305vkh3'
}
};

另外还要建立一个程序自动载入相应环境的配置,文件config/index.js

var path = require('path');

// 通过NODE_ENV来设置环境变量,如果没有指定则默认为生产环境
var env = process.env.NODE_ENV || 'production';
env = env.toLowerCase(); // 载入配置文件
var file = path.resolve(__dirname, env);
try {
var config = module.exports = require(file);
console.log('Load config: [%s] %s', env, file);
} catch (err) {
console.error('Cannot load config: [%s] %s', env, file);
throw err;
}

假设应用的入口文件是app.js,可通过以下方法载入配置:

var config = require('./config');

console.log('listen on port %s', config.port);
// 如果是开发环境,将输出 listen on port 3001
// 如果是生产环境,将输出 listen on port 80

本地开发测试

为了方便,我新建一个脚本文件run,代码如下:

export NODE_ENV=development
node app

要启动程序,直接在命令行下执行./run即可。

部署应用

新建部署脚本文件deploy,代码如下:

git reset --hard
git pull origin HEAD
npm install
pm2 stop myapp -f
pm2 start app.js -n myapp

此段代码会自动拉去git仓库中最新的一次提交的代码,并使用npm来安装package.json中列出的模块, 然后先停止之前已启动的应用实例,再启动。

为了方便传输代码到服务器端,需要将程序代码提交到一个私有的git仓库,首次在服务器端部署时, 需要先将代码clone到服务器端,比如:

git clone git[@github](/user/github).com:leizongmin/node-uc-server.git ~/myapp

应用在服务器端运行时使用pm2工具来管理进程,所以还需要先在服务器上安装此工具:

npm install pm2 -g

完成以上准备工作后,我们就可以通过deploy脚本来实现自动更新代码:

  • 将本地修改提交到远程git仓库
  • 登录服务器,进入~/myapp目录
  • 执行./deploy

以上程序执行的环境为Linux,如果开发环境是Windows,需要将run文件改为以下代码:

set NODE_ENV=development
node app

一种简单的生产环境部署Node.js程序方法的更多相关文章

  1. Linux环境部署Node.js

    介绍 先前在阿里云ECS上部署Node.js,碰到不少坑,都是自己不仔细造成的,所以准备再部署一遍,并记录下来.我将我的服务器重置了,这次选择的是CentOS 7.4 64位,上次的是7.2的. 使用 ...

  2. 生产环境部署node记录(二):pm2和nginx

    安装完node和npm ,接下来安装pm2 首先简单介绍下pm2,官网的介绍是: pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进 ...

  3. 生产环境部署node记录(一)

    云服务器厂商:京东云 我选择的操作系统为公共镜像CentOS7.2. 步骤: 首先登陆服务器:使用ssh 用户名@IP地址  登陆 1. wget命令下载Node.js安装包 登陆node的官网复制下 ...

  4. 调试 node.js 程序

    调试 node.js 程序 在程序开发中,如何快速的查找定位问题是一项非常重要的基本功.在实际开发过程中,或多或少都会遇到程序出现问题导致无法正常运行的情况,因此,调试代码就变成了一项无法避免的工作. ...

  5. 深度学习Tensorflow生产环境部署(上·环境准备篇)

    最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑.特意总结一下,当做前车之鉴. 1 系统背景 系统是ubuntu16.04 ubuntu@ub ...

  6. 【原创】大数据基础之Airflow(2)生产环境部署airflow研究

    一 官方 airflow官方分布式部署结构图 airflow进程 webserver scheduler flower(非必须) worker airflow缺点 scheduler单点 通过在sch ...

  7. HyperLedger Fabric 1.4 kafka生产环境部署(11.1)

    11.1 Kafka模式简介       上一章介绍的Solo模式只存在一个排序(orderer)服务,是一种中心化结构,一旦排序(orderer)服务出现了问题,整个区块链网络将会崩溃,为了能在正式 ...

  8. 10: Django + Uwsgi + Nginx 的生产环境部署

    1.1 一些重要概念 1.Web协议介绍 Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi 1. CGI:  最早的协议 2. FCGI:  比CGI快 ...

  9. Django + Uwsgi + Nginx 的生产环境部署实战

    目录 Django + Uwsgi + Nginx 的生产环境部署实战 安装Uwsgi 一.使用命令来启动django项目 二.使用配置文件来启动我们的Django项目 安装Nginx 配置Nginx ...

随机推荐

  1. UDF简记

    摘要: 1.开发UDF 2.开发UDAF 3.开发UDTF 4.部署与测试 5.一个简单的实例 内容:1.开发UDF 函数类需要继承org.apache.hadoop.hive.ql.UDF 实现ev ...

  2. .Net版微信支付

    一. 案例介绍 这里模拟一个实际业务场景,进行介绍微信支付,业务功能包括:登录.注册.充值.查看充值记录. 页面图:       二. 概要设计 1.数据库设计 这里数据库包括两张表:用户表和订单表. ...

  3. 前端基础之JQuery - day15

    写在前面 上课第15天,打卡: 张国臂掖,以通西域: ########### # 课上简书 # ########## http://jquery.cuishifeng.cn/index.html JQ ...

  4. 细说REST API安全之概述

    目前许多前后端应用都采取REST架构风格,前端应用和后端服务通过API进行数据交换.通过REST API在网络中进行数据交换时很容易被网络抓包,然后进行恶意批量调用,最终导致后端服务不堪负重而影响正常 ...

  5. adb.exe已停止工作

    提示adb.exe错误,我电脑上没有安装豌豆荚,也没运行其它应用,最后发现是360杀毒软件导致的,进程中关掉360Mobile即可.

  6. jqGrid api 中文说明

    JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做什么事情. 下面是转自其他人b ...

  7. Docker 容器状态查看 - 五

    1.top stats 查看 docker 容器的状态信息 查看容器状态: docker stats nginx1 查看进程信息: docker top nginx1 2.inspect 使用 doc ...

  8. extern 关键字使用

    extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 如在头文件中: extern in ...

  9. JDK开发环境搭建及环境变量配置

    Java配置----JDK开发环境搭建及环境变量配置 1. 下载安装安装JDK开发环境 http://www.oracle.com/technetwork/java/javase/downloads/ ...

  10. 黑马程序员_超全面的JavaWeb视频教程vedio--.ppt,.pptx,.doc,.txt,.docx列表

    \JavaWeb视频教程_day1-资料源码\day01-html目录.txt;\JavaWeb视频教程_day1-资料源码\PPT\HTML.ppt;\JavaWeb视频教程_day1-资料源码\资 ...