如何部署一个node项目
这里我们以一个express项目为例,来了解下一个node项目怎么部署到线上:
- 下载并安装 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
- 配置 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
- 安装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/
- 搭建 nginx 对外服务
NodeJs只是侦听的机器上的 5050 端口,我们使用 nginx 侦听 80 端口提供对外域名服务
安装 Nginx
在 CentOS 上,可直接使用 yum 来安装 Nginx
yum install nginx -y
安装完成后,使用 nginx 命令启动 Nginx:
nginx
此时,访问 http://<您的域名> 可以看到 Nginx 的测试页面
如果无法访问,请重试用 nginx -s reload 命令重启 Nginx
- 配置 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项目就可以在你的服务器上跑起来了,试一下吧。
- 扩展,自动化部署
首先我们需要在本地和服务器上都配置免密登录,然后在项目中配置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等共享数据的文件夹
- 扩展,自己的虚拟机上如何安装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/下