# 手工部署Node.js（CentOS 7.2）
#### 简介
本文介绍了如何在华为云上使用弹性云服务器的Linux实例部署Node.js。
Node.js是一个基于Chrome V8引擎的JavaScript运行环境，用于方便地搭建响应速度快、易于扩展的网络应用。Node.js使用事件驱动，非阻塞I/O模型而得以轻量和高效，非常适合在分布式设备上运行数据密集型的实时应用。
更多关于Node.js信息，请参见<https://nodejs.org>。
该操作以"CentOS 7.2 64bit(40G)"操作系统为例，使用的Node.js软件包版本为"node-v10.14.1-linux-x64.tar"及"node-v10.14.2-linux-x64.tar"。
#### 前提条件
- 已创建弹性云服务器，创建过程请参考[自定义购买ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)。
- 弹性云服务器需要绑定弹性公网IP，具体步骤参见[申请弹性公网IP](https://support.huaweicloud.com/usermanual-eip/eip_0008.html)。
- 为了更好地获取和更新系统和软件，建议您更新镜像源为华为云镜像源，详细操作，请参见[如何使用华为云开源镜像配置yum源(x86_64和鲲鹏)？](https://support.huaweicloud.com/ecs_faq/zh-cn_topic_0118948562.html)。
- 本地已经安装用于连接 Linux 弹性云服务器的工具（如 [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/)）。
 
#### 操作步骤
1. 登录弹性云服务器。 
   具体操作请参见[Linux ECS登录方式概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
   
   
2. 安装Node.js安装包。 
   - 使用二进制文件安装。
     1. 执行以下命令，下载[Node.js安装包](https://nodejs.org/dist/v10.14.1/node-v10.14.1-linux-x64.tar.xz)。
        ```
        wget https://nodejs.org/dist/v10.14.1/node-v10.14.1-linux-x64.tar.xz
        ```
        
     
     2. 执行以下命令，解压文件。
        ```
        tar xvJf node-v10.14.1-linux-x64.tar.xz
        ```
        
     
     3. 依次执行以下命令，为node及npm建立软连接，可在任意目录下执行node及npm命令。
        ```
        ln -s /root/node-v10.14.1-linux-x64/bin/node /usr/local/bin/node
        ln -s /root/node-v10.14.1-linux-x64/bin/npm /usr/local/bin/npm
        ```
        
     
     4. 依次执行以下命令，查看node及npm版本。
        ```
        node -v
        npm -v
        ```
        
      
   
   - 使用NVM版本管理器安装多版本。
     1. 执行以下命令，安装git。
        ```
        yum install git
        ```
        
     
     2. 执行以下命令，使用git将源码克隆到本地的\~/.nvm目录下，并检查最新版本。
        ```
        git clone https://github.com/cnpm/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
        ```
        
     
     3. 执行以下命令，激活NVM，并将其追加至profile文件下。
        ```
        echo ". ~/.nvm/nvm.sh" >> /etc/profile
        ```
        
     
     4. 执行如下命令，使环境变量生效。
        ```
        source /etc/profile
        ```
        
     
     5. 执行以下命令，列出Node.js可用版本。
        ```
        nvm ls-remote
        ```
        
     
     6. 执行以下命令，安装多个Node.js版本。
        ```
        nvm install v10.14.1
        nvm install v10.14.2
        ```
        
     
     7. 执行以下命令，查看已安装的Node.js版本。
        ```
        nvm ls
        ```
        
     
     8. 执行以下命令切换Node.js版本至V10.14.2。
        ```
        nvm use v10.14.2
        ```
        ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
        - 执行**nvm alias default v10.14.2**，设置默认版本为10.14.2。
        
        - 执行**nvm help**，获取更多NVM操作信息。
          
      
   
   
   
   
3. 部署测试项目。 
   1. 执行以下命令，进入用户主目录。
      ```
      cd
      ```
      
   
   2. 执行以下命令，新建项目文件test.js。
      ```
      touch test.js
      ```
      
   
   3. 使用vim编辑器编辑项目文件test.js。
      1. 执行以下命令，打开项目文件test.js。
         ```
         vim test.js
         ```
         
      
      2. 按**i** 键进入编辑模式。
         输入以下项目文件内容，修改打开的"test.js"文件。
         ```
         const http = require('http');
         const hostname = '0.0.0.0';
         const port = 3000;
         const server = http.createServer((req, res) => {
         res.statusCode = 200;
         res.setHeader('Content-Type', 'text/plain');
         res.end('Hello World\n');
         });
         server.listen(port, hostname, () => {
         console.log(`Server running at http://${hostname}:${port}/`);
         });
         ```
         端口号port可自定义。 
      
      3. 按**Esc** 键退出编辑模式，并输入**:wq**保存后退出。
       
   
   4. 执行以下命令，查看已开启端口。
      ```
      netstat -lntp
      ```
      若定义端口不存在，需登录弹性云服务器控制台，更改安全组规则，以放行项目中配置的项目端口号3000，具体步骤参见[添加安全组规则](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0030969470.html)。
      
   
   5. 添加防火墙例外端口。
      1. 以本例使用的3000端口为例，执行以下命令，添加防火墙例外端口3000。
         ```
         firewall-cmd --zone=public --add-port=3000/tcp --permanent
         ```
         如果回显信息如下说明防火墙关闭，可直接执行[3.f]
         ```
         [root@ecs-centos7 ~]# firewall-cmd --zone=public --add-port=3000/tcp --permanent
         FirewallD is not running
         ```
         如果回显信息如下说明防火墙开启且添加例外端口成功。
         ```
         [root@ecs-centos7 ~]# firewall-cmd --zone=public --add-port=3000/tcp --permanent
         success
         ```
         
      
      2. 重新加载策略配置，使新配置生效。
         ```
         firewall-cmd --reload
         ```
         
      
      3. 可以执行以下命令查看开启的所有端口。
         ```
         firewall-cmd --list-ports
         ```
         ```
         [root@ecs-centos7 ~]# firewall-cmd --list-ports
         3000/tcp
         ```
         
       
   
   6. 执行以下命令，运行项目。
      ```
      node ~/test.js
      ```
      
   
   7. 使用浏览器访问"http://弹性公网IP:3000"显示如下页面，说明Node.js测试项目部署成功。
      图1部署测试   
      ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0221472637.png "点击放大") 
   
   
   
   
 
