阿里云服务器配置Nodejs生产环境全过程

 2015年04月07日    2529     声明


做了公司的网站,网站布属在一台全新采购的阿里云服务器,因此需要配置Node.js的生产环境。就此机会,整理一下阿里云服务器配置Nodejs生产环境的过程,以便以后参考。本文内容包括:挂载数据盘、安装Nginx、安装Node.js及npm、配置Nginx绑定域名。


1. 准备

本文记录整理了一个Node.js网站,在一台全新采购的阿里云服务器配置上线的过程,在操作前已具备以下条件:

  1. 已采购阿里云服务器,操作系统:Centos 7.0
  2. 在购买域名,域名已备案
  3. 已完成网站的开发,网站使用的服务端技术为Node.js


2.阿里云挂载数据盘

新购阿里云服务器后,如果购买了数据盘,首先要做的就是挂载数据盘。阿里云服务器挂载数据盘的操作如下:

2.1 查看数据盘

数据盘在没有分区和格式化之前,使用df –h命令,是无法看到数据盘的,可以使用fdisk -l命令查看:

# fdisk -l

磁盘 /dev/xvda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0009e68a

    设备 Boot      Start         End      Blocks   Id  System
/dev/xvda1   *        2048    41943039    20970496   83  Linux

磁盘 /dev/xvdb:10.7 GB, 10737418240 字节,20971520 个扇区        -->数据盘
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


提示:若您执行fdisk -l命令,发现没有/dev/xvdb或类似一行输入。说明你的云服务没有数据盘,那么也无需进行挂载;虽然购买Linux阿里服务器会赠送20G硬盘,但此硬盘是用于装操作系统的,重装系统后会导致用户数据丢失,因此还是建议单独购买数据盘并将用户数据存储在购买数据盘上。


2.2 对数据盘进行分区

首先执行fdisk -S 56 /dev/xvdb命令对数据盘进行分区。

之后在根据提示依次输入np1、两次回车、wq。然后分区就开始了,等待分区完成即可:

# fdisk -S 56 /dev/xvdb    -->分区命令
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x4dd32558 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n                -->输入:n,跳过帮助
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p                -->输入:p,创建主分区
分区号 (1-4,默认 1):1               -->输入:1,分区号(注意是1不是l)
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):
将使用默认值 20971519
分区 1 已设置为 Linux 类型,大小设为 10 GiB

命令(输入 m 获取帮助):wq
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。


2.3 查看新分区

分区创建完成后,可以使用fdisk -l命令查看新分区xvdb1(具体名称可能会不同):

# fdisk -l 

磁盘 /dev/xvda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0009e68a

    设备 Boot      Start         End      Blocks   Id  System
/dev/xvda1   *        2048    41943039    20970496   83  Linux      

磁盘 /dev/xvdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4dd32558

    设备 Boot      Start         End      Blocks   Id  System
/dev/xvdb1            2048    20971519    10484736   83  Linux    -->新建立的分区xvdb1


2.4 格式化分区

分区建立完成后,即可执行分区格式化命令格式化分区。使用ext3文件格式执行:mkfs.ext3 /dev/xvdb1,命令进行格式化,使用ext4文件格式执行:mkfs.ext4 /dev/xvdb1命令进行格式化(注意:/dev/xvdb1名称可能不同,请根据实际输入)。

输入命令后,等待格式完成即可,文件格式和数据盘大小不同格式化完成的时间也有所不同。操作如下:

# mkfs.ext3 /dev/xvdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621184 blocks
131059 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 


2.5 添加分区信息

为使系统重启后能自动挂载数据盘,需要将分区信息写入fstab配置文件。执行命令如下:

echo '/dev/xvdb1  /mnt ext3    defaults    0  0' >> /etc/fstab

如果服务器选用了ubuntu系统,则执行如下命令:

echo '/dev/xvdb1  /mnt ext3    barrier=0  0  0' >> /etc/fstab


查看写入结果:

# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri Nov 21 18:16:53 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=6634633e-001d-43ba-8fab-202f1df93339 / ext4 defaults,barrier=0 1 1
none                  /proc/xen               xenfs   defaults        0 0
/dev/xvdb1  /mnt ext3    defaults    0  0                     -->看到这一句说明写入成功

上面的命令将挂载点设在/mnt命令,如果需要挂到其它位置,在写入fstab文件时修改相应位置即可,在写入后也可编辑/etc/fstab文件修改。


2.6挂载新分区

完成以上操作后,执行mount -a命令挂载新分区,即可完成数据盘挂载,操作如下:

# mount -a

挂载完成后,执行df -h查看挂载结果:

# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/xvda1       20G  1.6G   18G    9% /
devtmpfs        237M     0  237M    0% /dev
tmpfs           245M     0  245M    0% /dev/shm
tmpfs           245M   29M  217M   12% /run
tmpfs           245M     0  245M    0% /sys/fs/cgroup
/dev/xvdb1      9.8G   23M  9.2G    1% /mnt      -->看到这句,则说明挂载成功


3.安装Nginx

如果服务器只需放一个网站程序,解析网站到服务器网址,网站程序监听80端口即可。如果服务器有多个应用,则应该使用Nginx等程序实现端口代理、负载均衡等操作。为简单起见,Nginx使用了yum命令进行安装。

3.1 设置Nginx的yum

执行rmp命令设置最新稳定版本Nginx的的yum源,命令如下:

# rpm -ivh http://nginx.org/packages/centos/7/SRPMS/nginx-1.6.2-1.el7.ngx.src.rpm
获取http://nginx.org/packages/centos/7/SRPMS/nginx-1.6.2-1.el7.ngx.src.rpm
警告:/var/tmp/rpm-tmp.2i0qx7: 头V4 RSA/SHA1 Signature, 密钥 ID 7bd9bf62: NOKEY
正在升级/安装...
   1:nginx-1:1.6.2-1.el7.ngx          ################################# [100%]

如果是Centos6可将源设置为:

# rpm -ivh http://nginx.org/packages/centos/6/SRPMS/nginx-1.6.3-1.el6.ngx.src.rpm

注意:请在http://nginx.org/packages/centos目录下选择适合自己的源。


3.2 查看Nginx源信息

执行yum info nginx,查看源信息:

# yum info nginx
已加载插件:langpacks
可安装的软件包
名称    :nginx
架构    :x86_64
时期       :1
版本    :1.6.2
发布    :4.el7
大小    :505 k
源    :epel/x86_64
简介    : A high performance web server and reverse proxy server
网址    :http://nginx.org/
协议    : BSD
描述    : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and
         : IMAP protocols, with a strong focus on high concurrency, performance and low
         : memory usage.


3.3 安装Nginx

执行yum install nginx,安装nginx。命令如下:

# yum install nginx 
已加载插件:langpacks
正在解决依赖关系
--> 正在检查事务
---> 软件包 nginx.x86_64.1.1.6.2-4.el7 将被 安装
……
已安装:
  nginx.x86_64 1:1.6.2-4.el7                                                             
……

完毕!


3.4 启动Nginx服务

yum安装时,会自动将nginx配置为serivce服务。安装完成后,执行service nginx start命令启动Nginx:

# service nginx start
Redirecting to /bin/systemctl start  nginx.service


4. 安装Node.js运行环境

4.1 安装运行环境

可以使用yum命令安装Node.js,但yum安装的版本较老,更推荐使用编译安装的方式。

编译安装Node.js

点击https://nodejs.org/en/download/连接,下载最新版本Node源码,推荐使用LTS版本。

# cd /usr/local/src/
# wget https://nodejs.org/dist/v4.4.3/node-v4.4.3.tar.gz

下载完成后,执行tar -xzvf命令解压:

tar -xzvf node-v4.4.3.tar.gz

切换至源码目录,并configure配置安装:

# cd node-v4.4.3
# ./configure

make编译及make install安装:

# make & make install

Node.js源码中已包含NPM,源码安装Node后,无需再安装NPM。

注意:如果编译时遇到类似以下错误:

make[1]: *** [/usr/local/src/node-v4.4.3/out/Release/obj.target/v8_base/deps/v8/src/accessors.o] 错误 1

该错误是由于g++版本太旧导致,请参考以下几篇文章处理:


yum安装Node.js

编译安装较为复杂,为了简单起见可以直接使用yum install npm nodejs命令安装npmnode.js进行安装:

#  yum install npm nodejs
已加载插件:langpacks
正在解决依赖关系
--> 正在检查事务

yum安装的Node版本较旧,安装后可以使用nvm切换Node版本。


4.2 安装npm包

Node运行环境安装完成后,一般还需要全局安装一些常用的npm包。由于网站基本于express框架开发,而Node进程守护需要用forever包(也可使用pm2),因此需要安装expressforever

安装express

#  npm install -g express

安装forever

#  npm install -g forever


5. 配置Nginx绑定域名

Nginx配置文件默认放在/etc/nginx目录下,二进制程序默认安装在/usr/sbin/nginx目录下。 当服务器多个应该用程序或需要绑定多个域名时,需要对Nginx进行相关配置。使用Nginx代理相关域名到对应的Node.js监听的端口或进程,只需在/etc/nginx/conf.d目录下添加配置文件,再重启Nginx服务即可。

5.1 添加配置文件

执行vi /etc/nginx/conf.d/zszsgc.conf,创建配置文件,文件内容如下:

server {
    listen       80;
    server_name  www.mindpush.cn;             #绑定的域名

    location /
    {
      proxy_set_header   X-Real-IP            $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header   Host                   $http_host;
      proxy_set_header   X-NginX-Proxy    true;
      proxy_set_header   Connection "";
      proxy_http_version 1.1;
      proxy_pass http://127.0.0.1:3000;              #对应该的Nodejs程序端口
    }
	
    access_log  /mnt/log/www/mindpush_access.log;    #网站访问日志
}
#以下为配置不带www域名的301跳转
server {
    server_name mindpush.cn;
    rewrite ^(.*) http://www.mindpush.cn$1 permanent;
}


5.2 检查配置文件是否正确

执行nginx -t,检查配置文件是否正确:

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful        -->出现successful说时配置文件正确


5.3 重启Nginx

添加配置文件后,需要重启nignx服务,使配置生效。

如果配置过Nginx服务,可使用service nginx reload载入配置文件,也可使用service nginx restart重启服务,推荐使用前者:

# service nginx reload
Redirecting to /bin/systemctl reload  nginx.service

如果没有配置Nginx服务,可使用/user/sbin/nginx -s reload载入配置文件:

# /usr/sbin/nginx -s reload


至此,一台全新采购的阿里云服务器已完成Node.js生产环境的配置,解析域名到服务器网址并启动站点即可访问网站。点击下面的网址看下效果:

www.mindpush.cn