最近在部署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. HDU - 3642 Get The Treasury(线段树求体积交)

    https://cn.vjudge.net/problem/HDU-3642 题意 求立方体相交至少3次的体积. 分析 三维的呢..首先解决至少覆盖三次的问题.则用三个标记,更新时的细节要注意. 注意 ...

  2. solr简介与安装

    solr简介: Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展,并对索引 ...

  3. System.ComponentModel.DataAnnotations.Schema.TableAttribute 同时存在于EntityFramework.dll和System.ComponentModel.DataAnnotations.dll中

    Entity Framework 与 .net4.5 的 System.ComponentModel.DataAnnotations 都有 System.ComponentModel.DataAnno ...

  4. 学习go语言编程系列之定义变量

    package main import ( "fmt" "math") func main() { // 1. 定义变量名age,不初始化,使用对应类型的默认值 ...

  5. Groovy 设计模式 -- 抽象工厂 模式

    抽象工厂 https://blog.csdn.net/wyxhd2008/article/details/5597975 首先来看看这两者的定义区别: 工厂模式:定义一个用于创建对象的借口,让子类决定 ...

  6. asp.net上传图片,上传图片

    想必很多人工作中经常需要实现上传图片的功能. 先引用此插件 http://files.cnblogs.com/files/hmYao/jquery-form.js. 前台代码 <form dat ...

  7. ue4 socket

    Socket 地址: TSharedRef<FInternetAddr> internetAddr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSY ...

  8. 小程序前端防止重复点击请求api的简陋方法

    upload: function () { let that = this; let {uploadFlag} = that.data; if (that.data.uploadFlag) { ret ...

  9. Flume思维导图

  10. linux如何查看端口号被哪个进程占用

    1.lsof -i:端口号 lsof(list open files) 2.netstat -tunlp |grep 端口号 t:tcp u:udp n:拒绝显示别名 l:仅显示listen的服务状态 ...