0%

Node.js 项目服务端部署

1. 部署环境

我是在阿里云上买的专有网络的云服务器,配置是:CPU 1 核,内存 1GB,操作系统 CentOS 7.3 64 位,带宽 1Mbps。配置很低,因为便宜嘛,平时自己的一些小 demo 够了。以下的部署步骤基于此环境。

之前部署过几次,都是在网络上东找找西找找的配置文章,本身对于服务器相关的知识一窍不通,因此配置完了也就忘了。最近刚在这台新服务器上部署了 Node 的运行环境,借此记录下步骤,以便日后查找,也给有需要的朋友一些参考价值。

2. 开始部署

工具

我是在 Windows 下进行部署的,用的工具是 Xshell 5,下载地址在这:https://www.netsarang.com/download/down_xsh5.html

开始部署

在 Xshell 5 上输入服务器的 IP、密码和用户,登录成功后如下图所示:

部署01

首先将 yum 更新至最新版本:

1
yum -y update

安装编译源代码需要的一些开发工具:

1
yum -y groupinstall "Development Tools"

Node.js 安装

  1. 先进入 /usr/src 文件夹

    1
    cd /usr/src
  2. 从官网获取稳定版本,我选择的版本是 6.11.1

    1
    wget https://nodejs.org/dist/v6.11.1/node-v6.11.1.tar.gz
  3. 下载完成之后,解压文件,并进入解压过后的文件夹

    1
    2
    tar zxf node-v6.11.1.tar.gz
    cd node-v6.11.1
  4. 执行配置脚本来进行编译预处理

    1
    ./configure
  5. 编译源代码

    1
    make
  6. 编译完成之后,开始安装

    1
    make install
  7. 没有意外的话 Node 已经安装好了,可以敲出 node -v 来查看安装的版本号

=============================我是分割线===================================

使用 nvm 安装 Node(推荐)

  1. 安装 nvm

    1
    wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
  2. 执行以下命令以使用 nvm

    1
    2
    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
  3. 安装 Node 最新的发布版本

    1
    nvm install node
  4. 使用 Node

    1
    2
    3
    nvm use node
    或者
    nvm run node --version (运行指定版本的 Node)

    具体使用请参照 nvm 的官方文档

Node 安装成功之后,可以再安装 pm2 ,用来启动和监控 Node 程序,并且可以在 Node 程序文件被替换和程序报错时,自动进行重启。

MongoDB 安装

  1. 进入 /usr/local ,下载 MongoDB 源码

    1
    2
    cd /usr/local
    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.6.tgz
  2. 解压安装包,重命名文件夹为 mongodb3

    1
    2
    tar zxvf mongodb-linux-x86_64-3.4.6.tgz
    mv mongodb-linux-x86_64-3.4.6 mongodb3
  3. 在 /usr/local 文件夹内建立 mongodata 文件夹,用于存放数据和日志以及配置文件(该位置可以自定义)

    1
    2
    3
    mkdir /usr/local/mongodata
    mkdir /usr/local/mongodata/db
    mkdir /usr/local/mongodata/logs
  4. 编辑配置文件

    1
    vi /usr/local/mongodata/mongo.conf
  5. 将配置文件改为如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #端口号
    port=27017
    #访问IP(这里设置成不限定)
    bind_ip=0.0.0.0
    #数据目录
    dbpath=/usr/local/mongodata/db
    #日志目录
    logpath=/usr/local/mongodata/logs
    #设置后台运行
    fork=true
    #日志输出方式
    logappend=true
    shardsvr=truedirectoryperdb=true
    #开启认证(暂时不开启)
    #auth=true
  6. 进入到安装目录,启动运行

    1
    ./bin/mongod --config /usr/local/mongodata/mongo.conf
  7. 打开数据库

    1
    ./bin/mongo
  8. 需要关闭数据库时,要执行以下语句

    1
    db.shutdownServer()
  9. 配置账号密码,下面的 admin 用户的权限是 userAdminAnyDatabase

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    > show dbs
    local 0.078GB
    test 0.078GB
    > use admin
    switched to db admin
    > db.createUser(
    ... {
    ... user: "admin",
    ... pwd: "admin",
    ... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    ... }
    ... )
    Successfully added user: {
    "user" : "admin",
    "roles" : [
    {
    "role" : "userAdminAnyDatabase",
    "db" : "admin"
    }
    ]
    }
    > show users
    {
    "_id" : "admin.admin",
    "user" : "admin",
    "db" : "admin",
    "roles" : [
    {
    "role" : "userAdminAnyDatabase",
    "db" : "admin"
    }
    ]
    }
  10. 配置完账号密码后,现在可以将配置文件中的认证放开了

1
2
#开启认证
auth=true
  1. 重启数据库,并增加账号 test1 对于 test 数据库,test1 的权限是 readWrite

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    ./bin/mongo
    MongoDB shell version: 3.4.5
    connecting to: test
    > use admin
    switched to db admin
    > db.auth("admin","admin")
    1
    > use test
    switched to db test
    db.createUser(
    ... ... {
    ... ... user: "test1",
    ... ... pwd: "test1",
    ... ... roles: [
    ... ... { role: "readWrite", db: "test" }
    ... ... ]
    ... ... }
    ... ... )
    Successfully added user: {
    "user" : "test1",
    "roles" : [
    {
    "role" : "readWrite",
    "db" : "test"
    }
    ]
    }
  2. 验证 test1 账号是否添加成功,返回 1 表示验证成功

    1
    2
    3
    > use test
    > db.auth('test1', 'test1')
    1
  3. CentOS 开机启动,找到 /etc/rc.local,将下面这句话加入

    1
    /usr/local/mongodb3/bin/mongod --config /usr/local/mongodata/mongo.conf
  4. 最后,需要在阿里云的控制台中找到安全组规则配置页面,将 27017 端口开放

    部署02

    推荐一款比较好用 MongoDB 客户端,mongobooster

Nginx 安装

  1. 进入 /etc/yum.repos.d/,创建文件 nginx.repo

    1
    2
    3
    4
    5
    6
    7
    8
    cd /etc/yum.repos.d
    vi nginx.repo
    将下面的内容写入到 nginx.repo
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=0
    enabled=1
  2. 安装

    1
    yum install nginx
  3. 安装完成之后,执行如下命令查看安装位置

    1
    2
    [root@iz2ze2pp5x5s9w6jcr1ndxz /]# whereis nginx
    nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz
  4. 配置反向代理

    1
    vi /etc/nginx/nginx.conf

    将配置文件中的 server 选项如下配置

    部署03

    这里监听的是默认端口 80,你也可以改成其他端口,不过切记,如果是云服务器的网络是专有网络,一定要在阿里云控制台配置对应端口的安全组规则。

  5. 开放防火墙中的某些端口

    1
    2
    #查看所有打开的端口
    firewall-cmd --zone=public --list-ports

    部署04

    1
    2
    3
    4
    #加入一个端口到区域
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    firewall-cmd --zone=public --add-port=27017/tcp --permanent
    #加上 --permanent 表示永久生效,否则在服务器重启后改规则失效
  6. 常用命令

    1
    2
    3
    4
    5
    /usr/sbin/nginx #启动Nginx服务
    /usr/sbin/nginx -s stop #关闭Nginx服务
    /usr/sbin/nginx -t #检测Nginx的配置文件是否正确
    /usr/sbin/nginx -s reload #重启Nginx服务
    /etc/nginx/nginx.conf #Nginx配置文件位置

3. 总结

至此,如果不出什么意外的话,Node + MongoDB + Nginx 的环境应该就部署好了,在此作为一个记录,也希望能够帮助到有此需求的朋友。

4. 参考文章

  1. [把 Node.js 项目部署到阿里云服务器(CentOs)
  2. centos6.5 部署 mongodb 3 安装配置
  3. Node+React 小爬虫:从开发到部署
  4. [Centos 7 防火墙 firewalld 开放 80 端口]