原有的Node服务,需要迁移到新的主机上,故需要准备一套新的环境,以及对应的迁移方案。
Node安装
手动安装
下载地址: https://nodejs.org/en/download/
选择:Linux Binaries (x64) 右键复制下载链接
1 | 下载到机器上,放在/opt目录 |
使用NVM安装
1 | 安装NVM:https://github.com/nvm-sh/nvm |
使用NVM的好处在于可以管理Node版本,同一机器上可灵活切换不同Node版本,一键安装较方便
NVM常用命令
nvm install v12.16.3
:安装指定版本的Nodenvm use v12.16.2
:使用指定版本的Nodenvm ls
: 查看当前使用的Node版本nvm -h
: 查看帮助文档
运行环境准备
安装PM2
1 | 全局安装 |
日志分割
1 | 安装pm2-logrotate |
设置完成后可以通过pm2 conf pm2-logrotate
查看设置的是否正确
1 | [work@40-14-22 .pm2]$ pm2 conf pm2-logrotate |
安装Git
安装git是为了让pm2部署时能够从仓库中拉取代码,并部署
安装
1 | [root@40-14-22 ~]# yum install git |
配置公钥
拷贝机器的公钥串(当前用户的.ssh目录下的.pub文件内容),粘贴到公共的gitlab下的授权下即可;目的是允许机器拉取gitlab仓库中的私有代码
1 | # 生成公钥-一直回车即可 |
最好使用公共账号,不要使用个人账号
如不配置ssh,pm2拉代码的时候会提示如下无权限错误
服务器授信
部署机与服务器
目的: 部署机可免密访问目标机
编辑目标机.ssh
目录下的authorized_keys
文件,粘贴保存部署机上.ssh
目录下.pub
文件内容即可
服务器与Gitlab服务器
向服务器的known_hosts
中新增Gitlab服务器的公钥
缺少配置在部署时会报如下错误
其他
查看Linux内核版本
1 | [work@37-14-42 log]$ uname -a |
查看centos版本
1 | [work@37-14-42 log]$ cat /etc/redhat-release |
在centos6上安装最新的Node12会报如下错误
1 | [work@40-31-60 ~]$ node -v |
原因为gcc版本过低,要么升级gcc,要么系统升级到centos7
建议不要折腾,在centos6上升级gcc版本,耗力费时,可能还会存在版本匹配问题;最好选择一步到位升级系统到centos7
迁移方案
测试验证
服务器环境准备好后,接下来就是按照线上的部署流程在新服务器上部署Node服务。
此时,由于没有经过验证,不能够直接让外网流量进来;另外,线上服务环境与公司内网环境一般也是隔离的,那么如何才能请求到新的服务验证新服务是否可用呢?
这种情况,可以借助部署机,部署机比较特殊,既可以访问内网的gitlab服务拉取代码,又可以把拉取到的代码部署到线上环境,可以部署机为跳板访问线上新的Node服务,在内网环境验证服务是否可用。
具体可参见这篇文章:通过Nginx解决网络隔离实践记录
切流量
当验证完服务正常后,接下来就是切流量操作了,可以采用如下两种方案
- 把线上某一台机器的流量切到新服务上
- 把线上流量的10%切到新的服务上
流量进来后,观察服务器的各项参数是否有异常,观察Node服务的日志监控是否有异常上报。
运行一段时间无异常,再切50%,循序渐进,最终把全部流量切到新主机。
最后,服务迁移繁琐复杂,容器化会是一个更好的选择。