天天看点

Node服务一键离线部署

项目测试通过,到了上线部署阶段。部署的机器安全限制比较严格,不允许访问外网。此外,没有对外网开放ssh服务,无法通过ssh远程操作。

针对上面提到的两条限制条件,通过下面方式解决:

无法访问外部网络:将依赖的环境本地下载,打包上传,离线安装;

无法ssh远程操作:将安装/初始化步骤脚本化,安装包交给运维人员,一键部署;

让运维同学将安装包置于<code>/data/my_install</code>下。安装包大致如容如下。其中<code>install_scripts</code>目录中,存放的是部署相关的脚本。

看下<code>nodejs</code>安装脚本。为了安装快些,这里我们采用的是编译好的二进制文件。只需要将相关文件拷贝到指定路径即可。

以下是<code>[email protected]</code>的目录。

拷贝路径说明如下

本地路径

拷贝到的路径

备注

./bin/node

/usr/local/bin/node

node可执行文件

./bin/npm

npm可执行文件,软链接,指向 /usr/local/lib/node_modules/npm/bin/npm-cli.js

./lib/node_modules/

/usr/local/lib/

npm模块安装目录

./include/node

/usr/local/include/

各种包含文件

./share/man/man1/node.1

/usr/local/man/man1/

使用说明

install_node.sh

这里我们就用到了pm2,需要全局安装。根据npm全局模块的安装方式,需要分两步

将pm2模块目录拷贝到<code>/usr/local/lib/node_modules</code>下。

在<code>/usr/local/bin/</code>下,建立软链接,指向<code>/usr/local/lib/node_modules/pm2/bin/</code>下的可执行文件。

首先,把pm2包下载下来,这步略。我在这里放到了<code>npm_modules_global_offline</code>目录下,以防以后还有其他全部模块要一起安装。

软链接映射关系如下

目标文件路径

源文件路径

/usr/local/bin/pm2

/usr/local/lib/node_modules/pm2/bin/pm2

/usr/local/bin/pm2-dev

/usr/local/lib/node_modules/pm2/bin/pm2-dev

install_npm_moduels.sh

express应用的安装相对比较简单,本地<code>npm install</code>后,连同<code>node_modules</code>目录一起打包即可。

脚本如下,把<code>express_svr</code>拷贝到指定路径即可。

install_express_svr.sh

其实没那么玄乎,无非就是再写个脚本,统一调用下前面提到的脚本。奏是这么简单。

install.sh:

运行:

上面脚本的缺陷比较明显,没有进度提示,也没有运行状态提示。于是优化一下,虽然也不能算是完善,但相比之前的版本的确会好很多。

运行看下效果:

从上面的内容可以看到,离线部署的过程,主要包含了几个操作

文件拷贝

建立软连接

启动服务

那么,卸载无非就是上面几个步骤的反操作。脚本大致如下,跟前面的部署脚本其实是一一对应的。这里就不再赘述。

文中提及的node服务离线部署,应该已经可以涵盖大部分的场景,举一反三即可。当然更富在的场景还有,这里就不再展开。