(精华)如何在云服务器上从零到成熟部署nodejs生产环境

       首先我做过很多nodejs和react项目,每次都会逃避不了的就是在服务器上去部署一个测试环境(如果小项目的话,也可以叫生产环境),网上很多资料都不全,我也经过很多自己摸索,总结了一套可以完全从0开始部署的流程分享给大家。

部署前安利两个工具,我都会使用,不错的。Xshell6以及WinSCP,前者是终端模拟器,需要破解的。后者是终端文件管理器,这个百度有的下,下面会用到这两个东西。这里我还是给个链接吧:

xshell6winSCP

现在正式开始了:

第一步:申请服务器

你需要先申请个服务器,我一般用云服务器,可以阿里云也可以腾讯云,一般我的申请配置如下:

服务器:2核4G,5Mpbs带宽,系统盘40GSSD云盘,系统为centOS7;

数据库:RDS云数据库基础版,Mysql5.7;(在这里选区域的时候,记得一定要和服务器选一个区域,这样网络节点可以采用VPN访问,速度会快)

项目的文件架构(因为我有项目模板,你做了很多之后也可以行程自己的模板,这个我以后会具体介绍):

--项目文件夹
    --admin-pc   //桌面版的后台管理前端工程(以这个为例展开)
        --build         //编译所需的文件
        --config        //nodejs配置文件
        --dist          //生成的执行目录
        --src           //源文件目录
        --static        //静态资源文件
        --node-modules  //依赖库,npm install安装之后才会出现的
    --oem-mobile //客户端的前端工程
    --server     //服务端工程
    --vhost      //虚拟服务器的配置

第二步:nginx安装

首先利用xshell6进入到我们上一步申请的云服务器当中,然后下一步:

1)安装make

yum -y install gcc automake autoconf libtool make

2)安装g++

yum install gcc gcc-c++

3)选定安装环境,这里我的默认选择是:/usr/local/src

安装PCRE库

cd /usr/local/src
wget https://ftp.pcre.org/pub/pcre/pcre-8.39.tar.gz 
tar -zxvf pcre-8.39.tar.gz
cd pcre-8.39
./configure
make
make install
cd /usr/local/src 
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install

这里大家注意,每一个换行都是一句执行,知道执行完毕后再接着输入,如果你完全按照我的顺序,应该不会出错。里面的版本注意,这是我用的版本号,你可以选择用更新的版本,不过我不知道会不会出现别的问题。

4)安装openssl

这一步不是必要的,不过我建议安装上,因为如果你的网址之后要用的https,那么你就得装,想要在微信里面打开,你就必须是https的。

cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz
tar -zxvf openssl-1.0.1t.tar.gz

5)安装nginx

到现在才真正开始安装nginx

cd /usr/local/src
wget http://nginx.org/download/nginx-1.1.10.tar.gz
tar -zxvf nginx-1.1.10.tar.gz
cd nginx-1.1.10
./configure
make
make install

到这里第二步算是完成了,大家还顺利吧,接下来我们要进入下一步。

第三步:安装nodejs

1)同样我们需要选定安装的环境

cd /usr/local/src

2)下载nodejs新的bin包

wget https://nodejs.org/dist/v10.14.2/node-v10.14.2-linux-x64.tar.xz

3)然后解压它

xz -d node-v10.14.2-linux-x64.tar.xz
tar -xf node-v10.14.2-linux-x64.tar

4)这一步很关键啊,因为这一步是为了让它能够全局调用,相当于Windows里面的环境变量设置

ln -s /usr/local/src/node-v10.14.2-linux-x64/bin/node /usr/bin/node
ln -s /usr/local/src/node-v10.14.2-linux-x64/bin/npm /usr/bin/npm

大家要看清楚后面是有空格的,代表是把某个文件复制到指定的目录当中,在centos7里面默认的全局目录就是/usr/bin/

5)我们来测试一下:

node -v
npm –v

如果这个时候能够看到版本号,说明已经安装成功了。

6)接下来全局安装pm2

npm install –g pm2
ln -s /usr/local/src/node-v10.14.2-linux-x64/bin/pm2 /usr/bin/pm2

虽然这里-g代表是全局安装的意思,但是本人亲测,还需要手动将它放置到全局目录中去,然后我们同样来测试一下

pm2 -v

如果看到版本号,那么恭喜你,已经整个生产环境部署成功了,这个时候离成功已经完成50%了哦!加油!

第四步:正式进行项目的搭建,这一步比较长,大家有点耐心哦!

1)通过WinSCP连接我们申请的云服务器,然后我们进入到root文件夹下面(我是把项目文件都放在这个文件夹下面的,你们可以自己定)

打码了,每一个文件夹都是一个项目,这里我就以scteam为例来讲吧。我们打开这个项目文件,可以看到这些工程

2)这里我们先改server端配置,可以看到如下文档(我的因为运行过了,文件会多一点)

修改package.json,找到最上面的name,把它改写成自己的工程名,其他由很多东西,比如版本号,你也可以改。

修改pm2.json,修改很多东西:

Name:     填写nodejs服务名称,和上述一致
Cwd:       填写server的目录
MYSQL_HOST:     填写生产环境的数据库host的地址
MYSQL_PORT:    填写生产环境的数据库管理端口
MYSQL_USER:      填写数据库管理用户名
MYSQL_PASSWORD:  数据库密码
MYSQL_DATABASE: 数据库名
SERVER_PORT:      访问nodejs服务的端口

我的是这样写的:

大家要注意一下mysql_host,如果之前我们申请服务器和数据库的时候是在同一个区,那这里其实我们可以填写内网的地址就行了,如果不在同一区,就不能用内网访问了。

同样的道理,我们在server/src目录下面有个config.js文件,也是个配置文件,改为和上述pm2.json里相同即可,这是为了区别开发和生产环境的不同,可以设置为一样,当你的工程目录放置在data下面时,pm2.json里的数据库信息才生效,不然只识别devDB里的数据库信息。当然这是我们模板文件,实际你们的可能没有。以下是我的配置:

大家注意一下标红的信息,这句话的意思是如果我的工程文件是放在/data目录下面的,我的配置文件就选择serverDB,如果不是(我们放在了root下面),就选择devDB,这样配置的好处是为了测试环境和生产环境区分开了方便调试的。你们如果不想这么麻烦,改成一样的就行了。

3)然后通过xshell6进入到云服务器,对每一个文件夹工程都进行依赖库的安装;

先对server进行安装:

cd /root/scteam/server
npm install

安装完成之后,进行编译项目,然后开启服务

npm run build
pm2 start pm2.json

这样server就部署完成了。已经离成功只有不到20%了!

4)我们需要配置虚拟服务器的反向代理,也就是vhost文件夹,vhost文件夹下面新建一个.conf的文件,然后输入如下:

server {
  listen 80;
  server_name xxx.xxx.com ;   //自己的域名
  index index.html index.htm ;

  set $node_port 9055;
  set $project_root /root/scteam;

  location / {
    root $project_root/admin-pc/dist; #pc
    try_files $uri $uri/ /index.html;
  }

  location ~ ^/(api|webhook)/ {
    proxy_http_version 1.1;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_pass http://127.0.0.1:$node_port$request_uri;
    proxy_redirect off;
  } 
  location /upload/ {
    alias $project_root/server/runtime/upload/;
  }
}

这里要注意两点,一个是server_name,这个需要你们自己去申请一个域名,把一个域名解析的子域名放进去就行了,如果有需要你们想知道怎么弄的话,请给我留言,我可以再写一篇关于申请子域名的详细步骤。

另一个是location,代表的就是域名后面跟着的怎么写法,就映射到哪个文件页面,比如直接访问xxx.xxx.com,那么就认为后面什么也没有,那就定位到admin-pc/dist目录,然后映射index.html文件。大家只需要修改root后面的就行了。

5)接下来是全局nginx配置更改,利用winSCP进入到目录 /usr/local/nginx/conf,打开nginx.conf文件,改为如下

在文件的末尾的大括号里面添加需要加载的conf文件:

 include /root/scteam/vhost/xxx.conf;   //这个文件就是刚刚添加的conf文件

利用xshell6进入到nginx,启动nginx

cd /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx

这个时候,离成功就差最后10%了,再坚持坚持啊!!!

6)后端已经完全部署好了,接下来是前端工程开启,通过xshell6将进入到admin-pc目录,安装依赖库

cd /root/scteam/admin-pc
npm install

7)为了不占用编译资源,前端(除server以外所有项目)都需要在本地编译(npm run build),然后到将编译好的dist文件夹利用winscp上传到服务器admin-pc文件夹下面。

这里我们要注意一下在当前目录下的config文件夹下面的index.js,里面有一段这样的代码:

注意一下这些目录,assetsPublicPath代表你在浏览器里输入的网址是不是xxx.xxx.com,后面没有跟其他东西,这代表根地址,上面对应的就是执行目录。

8)完成后重启nginx,利用xshell6

/usr/local/nginx/sbin/nginx –s reload

这个时候,你可兴奋的在浏览器中输入:xxx.xxx.com,然后按回车

由于是帮别人做的项目,还是打码比较好,o(* ̄︶ ̄*)o。成功了,快开瓶酒庆祝吧!

 

----------------------------------------------------------------------------

专注于为各个程序员、开发者、爱好者、所有可能的职业者解决问题,分享资源!

点滴成长,欢迎留言!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值