亚马逊云代码部署,NodeJS

首先需要使用ssh或者putty登陆AWS ec2的linux实例(在Windows中使用putty连接linux实例参见:在Windows中连接亚马逊云服务器)。

一 .为了方便文件传输 需要安装两个软件

1. winscp WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件。

支持基于SSH-1、SSH-2的SFTP和SCP协议[2]

支持批处理脚本和命令行方式

多种半自动、自动的目录同步方式

内置文本编辑器

支持SSH密码、键盘交互、公钥和Kerberos(GSS) 验证

通过与Pageant(PuTTY Agent)集成支持各种类型公钥验证

提供Windows Explorer与Norton Commander界面

可选地存储会话信息

可将设置存在配置文件中而非注册表中,适合在移动介质上操作

2.Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作

二 .linux实例中安装nodeJs环境

  • 在控制台输入"wget https://nodejs.org/download/release/v5.3.0/node-v5.3.0.tar.gz"下载源代码到服务器本地。
  • 在控制台输入"tar -zvxf node-v5.3.0.tar.gz"解压缩源代码。
  • 在控制台输入"cd node-v5.3.0/ && ./configure && make"转到源代码根目录、配置编译选项并开始编译NodeJS源代码(可能需要先安装好编译工具如gcc、g++、make,ubuntu可以使用命令"sudo apt-get install build-essential"安装好C/C++编译环境)。
  • 在控制台输入"sudo make install"安装编译好的NodeJS程序,输入"node -v"以测试是否安装成功,成功则会显示当前的版本(本例中应为v5.3.0)

三 .拷贝源代码到服务器

本例中在Windows使用WinSCP来拷贝文件,接下来介绍WinSCP的配置。 配置WinSCP过程如下:

  • 下载并安装WinSCP工具。
  • 打开WinSCP并点击新建站点。
  • 在文件协议选项中选择"SCP"。
  • 填写主机名(可以为实例的公共DNS或者公共IP),端口使用默认的22。
  • 填写用户名为ubuntu(其他linux实例为ec2-user)。
  • 打开"高级",在SSH->验证->密钥文件中选择服务器.ppk密钥文件,点击确定完成设置。
  • 最后点击登录即可连接到服务器,支持拷贝本地文件到远程服务器。

按照上述步骤执行配置过程成功后,把本地的源代码拷贝至服务器,本例中工程目录名为"Hello",包含"hello.js"以及"package.json"两个文件。详细内容如下:

hello.js

var http = require('http'); // 加载NodeJS http模块
 
// 创建服务器对象
var server = http.createServer(function(request, response) {
    response.writeHead(200, { 'Content-Type': 'text/plain'}); // 设置响应头
    response.write("Hello, World!"); // 设置相应内容
    response.end(); // 结束请求
});
 
server.listen(3000);  // 监听指定端口,需要在ec2 web console中设置允许从指定的TCP端口入站。

  

package.json

1

2

3

4

5

6

7

8

9

10

11

{

"name":"hello",

"version":"0.0.0",

"author":"wu.shen@ck-telecom.com",

"private":true,

"scripts": {

"start":"node hello.js"

},

"dependencies": {

}

}

开启测试程序

  • 在服务器控制台下转到源代码目录执行"npm start"即可开始执行程序(如果代码还依赖其他的NodeJS模块,需要先执行"npm intsall"来安装依赖的模块)。
  • 在浏览器中输入实例的公共DNS或者公共IP加上端口号访问测试程序,即可获得"Hello World!"响应。

常连接

为了保持服务器一直在线 使用forever

    sudo npm install -g forever;

    sudo forever start bin/www

    sudo forever stop bin/www

forever 常用命令

// 1. 简单的启动
forever start app.js

// 2. 指定forever信息输出文件,当然,默认它会放到~/.forever/forever.log
forever start -l forever.log app.js

// 3. 指定app.js中的日志信息和错误日志输出文件,
//  -o 就是console.log输出的信息,-e 就是console.error输出的信息
forever start -o out.log -e err.log app.js

// 4. 追加日志,forever默认是不能覆盖上次的启动日志,
//  所以如果第二次启动不加-a,则会不让运行
forever start -l forever.log -a app.js

// 5. 监听当前文件夹下的所有文件改动
forever start -w app.js

文件改动监听并自动重启

// 1. 监听当前文件夹下的所有文件改动(不太建议这样)
forever start -w app.js

显示所有运行的服务

forever list

停止操作

// 1. 停止所有运行的node App
forever stopall

// 2. 停止其中一个node App
forever stop app.js
// 当然还可以这样
// forever list 找到对应的id,然后:
forever stop [id]

重启操作

重启操作跟停止操作保持一致。

// 1. 启动所有
forever restartall

更多一些

上面的一些解释足够平常使用,还有待之后继续补充。
开发和线上建议配置

// 开发环境下
NODE_ENV=development forever start -l forever.log -e err.log -a app.js
// 线上环境下
NODE_ENV=production forever start -l ~/.forever/forever.log -e ~/.forever/err.log -w -a app.js

上面加上NODE_ENV为了让app.js辨认当前是什么环境用的。不加它可能就不知道哦?
一些注意点

有可能你需要使用unix下的crontab(定时任务)

这个时候需要注意配置好环境变量。

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

后记

毋庸置疑,拥有了Github就拥有了世界。
参考

    https://github.com/nodejitsu/forever
    http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever
    https://github.com/nodejitsu/forever/issues/116

打包 压缩 tar -czvf nodePro.tar.gz nodePro/

netstat -ntlp 查看端口使用情况