背景
近几日将公司项目开了一个新坑,使用Nodejs进行服务端渲染,为公司团队前后端分离往前推进了一大步,本文就介绍了如何将开发好的Node程序在服务器上完成高逼格自动化部署
技术架构
- 开发环境:MacOS 10.13
- 程序:Koa+requirejs
- 服务器:公司内网服务器 Centos6.8
- 代码托管:公司内部gitlab
- 程序端口:3000端口 使用pm2进行托管部署
服务器环境初始化
接下来以公司服务器系统Centos6.8为例进行说明:
服务器上需要安装以下程序和依赖
- Nodejs (项目中运用了大量的ES6,ES7语法,所以我们安装是7.9以上版本)
- NPM
- PM2
npm install pm2 -g
- Git
yum install git
连接服务器
作为一名极客,我推荐使用ssh命令行连接服务器ssh -p 2222 root@212.22.2.22
(放弃吧,上面的地址是假的,你们连不进去的)
安装nodejs
这里我推荐使用nvm
进行服务器上node版本管理
使用命令wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash
安装完成之后将nvm写进系统环境变量中,分别执行export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
使用如下命令安装7.9.0版本的nodejsnvm install 7.9.0
安装完成之后会自动切换成7.9.0版本,如果没有切换,可以使用nvm use 7.9.0
具体使用方法请看文末参考文章。
tips:安装完nvm之后,可能会发现nvm没有生效,这时退出服务器连接再进入就行了
安装pm2
由于国内网络不可抗力因素,通常我们安装npm包都很慢,这里推荐切换成淘宝源来安装
此处安利神器nrm
这是一个管理你本地npm源的工具,超级好用
首先安装nrm
npm install nrm --registry=https://registry.npm.taobao.org
安装成功后,使用命令nrm ls
看到如下界面:
使用nrm use taobao
选择淘宝源,然后你就可以放肆地下载各种npm包了。
输入npm install pm2 -g
安装pm2
服务器初始环境就暂时告一段落,接下来我们回到本地的配置上来。
安装Git
使用yum install git
进行git的安装
这里推荐阿里云的镜像
配置Git私钥
使用ssh-keygen
在~/.ssh
下生成密钥id_rsa,将生成的id_rsa.pub文件复制到git仓库的ssh-key配置页面中
本地程序配置
本地同样要有nodejs,npm,pm2,安装方式和服务器上的一样,这里就不过多赘述。
本文是基于程序代码托管在git上,换句话说就是使用git进行版本控制的,所以本文所述内容不适合svn用户。
使用pm2的ecosystem
终端打开本地程序根目录地址,输入pm2 ecosystem
,会在你本地生成一个ecosystem.config.js
,参照官方文档,我们的配置如下,仅供参考:
1 | module.exports = { |
因为pm2的部署是通过ssh进行的,因此需要开通本地到远程服务器的无密码登录,同样,在Mac下,通过ssh-keygen生成RSA公钥,并拷贝到远程服务器:scp -P 4922 ~/.ssh/id_rsa.pub root@22.222.22.22:/root/.ssh/authorized_keys
这一步很关键,测试成功的方式就是你通过ssh连接服务器,不用再输入密码了,这里面有不少坑,具体等待各位自己踩坑。
回到本地应用目录,执行命令:pm2 deploy ecosystem.json production setup
成功会提示success,如果失败,提示Host key verification failed. 就是没有将你的git仓库加进known_hosts中,在服务器中,注意,在服务器中执行命令:ssh-keyscan -t rsa 你的git仓库地址 >> ~/.ssh/known_hosts
加入成功之后,回到本地继续执行:pm2 deploy ecosystem.json production setup
这里的production对应的就是刚才的配置文件中的deploy字段下面的属性。配置文件中我写了production和dev,这里我们使用了production进行发布示例。
不出意外,成功之后提示
○ setup complete
–> Success
项目部署
代码提交
这一步很重要,发布之前必须保证git的代码与你本地的保持一致。
代码发布
在本地程序根目录下输入:pm2 deploy ecosystem.json production
等待服务器上npm的安装,代码的更新,成功之后看到的应该是如下:
至此,我们的程序发布成功。
在服务器上输入命令pm2 list
查看程序运行的状况