Node.js

如何部署一个node项目

2019-03-25  本文已影响0人  zxhnext

这里我们以一个express项目为例,来了解下一个node项目怎么部署到线上:

  1. 下载并安装 Node.js
    下载最新的稳定版 v6.10.3 到本地
wget https://nodejs.org/dist/v6.10.3/node-v6.10.3-linux-x64.tar.xz

下载完成后, 将其解压

tar xvJf node-v6.10.3-linux-x64.tar.xz

将解压的 Node.js 目录移动到 /usr/local 目录下

mv node-v6.10.3-linux-x64 /usr/local/node-v6

配置 node 软链接到 /bin 目录

ln -s /usr/local/node-v6/bin/node /bin/node

或者直接下载nodejs

curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
yum -y install nodejs
  1. 配置 npm

下载 node 的压缩包中已经包含了 npm , 我们只需要将其软链接到 bin 目录下即可

ln -s /usr/local/node-v6/bin/npm /bin/npm

配置环境变量,将 /usr/local/node-v6/bin 目录添加到 $PATH环境变量中,可以方便地使用通过 npm 全局安装的第三方工具

echo 'export PATH=/usr/local/node-v6/bin:$PATH' >> /etc/profile

生效环境变量

source /etc/profile
  1. 安装pm2
npm install pm2 --global

PM2 安装时间可能稍长,请耐心等候

安装 Express
我们的服务器源码里使用到了 Express 模块,下面的命令使用 NPM 来安装 Express

cd /data/release/weapp
npm install express --save

启动服务
安装完成后,使用 PM2 来启动 HTTP 服务

cd /data/release/weapp
pm2 start app.js

现在,您的 HTTP 服务已经在 http://<您的 CVM IP 地址>:5050 运行

要查看服务输出的日志,可以使用下面的命令:

pm2 logs

如果要重启服务,可以使用下面的命令:

pm2 restart app

我们使用 PM2 来进行 Node 进程的运行、监控和管理

NPM 仓库在国内访问速度可能不太理想,如果实在太慢可以尝试使用 CNPM 的 Registry 进行安装:npm install pm2 -g --registry=https://r.cnpmjs.org/

  1. 搭建 nginx 对外服务

NodeJs只是侦听的机器上的 5050 端口,我们使用 nginx 侦听 80 端口提供对外域名服务

安装 Nginx
在 CentOS 上,可直接使用 yum 来安装 Nginx

yum install nginx -y

安装完成后,使用 nginx 命令启动 Nginx:

nginx

此时,访问 http://<您的域名> 可以看到 Nginx 的测试页面

如果无法访问,请重试用 nginx -s reload 命令重启 Nginx

  1. 配置 HTTP 反向代理
    关于这部分我在node反向代理与负载均衡已经详细讲过了,不懂得同学可以去看下,这里我们简单配置一下
    Nginx 配置目录在 /etc/nginx/conf.d,我们在该目录创建 wechat.conf
    示例代码:/etc/nginx/conf.d/wechat.conf
server {
        listen 80;
        server_name www.example.com; # 改为第一步申请的域名

        location / {
            proxy_pass http://127.0.0.1:5050;
        }
    }

按 Ctrl + S 保存配置文件,让 Nginx 重新加载配置使其生效:

nginx -s reload

到这里一个express项目就可以在你的服务器上跑起来了,试一下吧。

  1. 扩展,自动化部署
    首先我们需要在本地和服务器上都配置免密登录,然后在项目中配置ecosystem.json,文件如下,具体文件内容我在node反向代理与负载均衡一节也有讲,可以去翻看一下。
{
  "apps": [
    {
      "name": "hapi-demo",
      "script": "app.js",
      "env": {
        "COMMON_VARIABLE": "true"
      },
      "env_production": {
        "NODE_ENV": "production"
      }
    }
  ],
  "deploy": {
    "production": {
      "user": "root",
      "host": ["140.143.15.124"],
      "port": "22",
      "ref": "origin/master",
      "repo": "git@gitee.com:zxhnext/hapi-demo.git",
      "path": "/www/hapi-demo/production",
      "ssh_options": "StrictHostKeyChecking=no",
      "post-deploy": "npm install --registry=https://registry.npm.taobao.org && pm2 startOrRestart ecosystem.json --env production",
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}

配置完成后,试着来跑一行命令吧,

pm2 deploy ecosystem.json production setup

这时服务器上会生成三个文件夹,分别是current shared source。current是当前服务运行的文件夹,source是源代码文件夹,shared日志文件,pid等共享数据的文件夹

  1. 扩展,自己的虚拟机上如何安装nginx
    如果是我们自己的虚拟机,以centos为例,安装nginx,那么我们按如下操作
wget .....
tar zxvf .....

然后下载gcc(编译nginx

yum install gcc

安装好后不能直接编译,先执行configure脚本,他会检查编译环境如果是在nginx目录下,就是 ./configure

执行完后会产生一个Makefile,执行make命令(会自动去找Makefile文件)

如果nginx 安装时候报错:make: *** No rule to make target build', needed bydefault'. Stop.出现此种情况,是linux系统没有安装先决条件,没有安装GCC

这里注意我们要关闭防火墙,要不然放不了nginx页面

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

然后make install 这时他会安装到 /usr/loacl/目录下

修改conf目录下的配置文件nginx.conf

如果时yum安装的,配置未见默认在 /etc/nginx/下

上一篇下一篇

猜你喜欢

热点阅读