做了公司的网站,网站布属在一台全新采购的阿里云服务器,因此需要配置Node.js的生产环境。就此机会,整理一下阿里云服务器配置Nodejs生产环境的过程,以便以后参考。本文内容包括:挂载数据盘、安装Nginx、安装Node.js及npm、配置Nginx绑定域名。
1. 准备
本文记录整理了一个Node.js网站,在一台全新采购的阿里云服务器配置上线的过程,在操作前已具备以下条件:
- 已采购阿里云服务器,操作系统:Centos 7.0
- 在购买域名,域名已备案
- 已完成网站的开发,网站使用的服务端技术为
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命令对数据盘进行分区。
之后在根据提示依次输入n、p、1、两次回车、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++版本太旧导致,请参考以下几篇文章处理:
- Node.js 升级编译安装 v4.2.1
- 解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
- Linux升级安装GCC
yum安装Node.js
编译安装较为复杂,为了简单起见可以直接使用yum install npm nodejs命令安装npm和node.js进行安装:
# yum install npm nodejs 已加载插件:langpacks 正在解决依赖关系 --> 正在检查事务
yum安装的Node版本较旧,安装后可以使用nvm切换Node版本。
4.2 安装npm包
Node运行环境安装完成后,一般还需要全局安装一些常用的npm包。由于网站基本于express框架开发,而Node进程守护需要用forever包(也可使用pm2),因此需要安装express、forever:
安装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生产环境的配置,解析域名到服务器网址并启动站点即可访问网站。点击下面的网址看下效果:
