摘要:背景说明项目测试通过,到了上线部署阶段。部署的机器安全限制比较严格,不允许访问外网。其中目录中,存放的是部署相关的脚本。写在后面文中提及的服务离线部署,应该已经可以涵盖大部分的场景,举一反三即可。
背景说明
项目测试通过,到了上线部署阶段。部署的机器安全限制比较严格,不允许访问外网。此外,没有对外网开放ssh服务,无法通过ssh远程操作。
针对上面提到的两条限制条件,通过下面方式解决:
无法访问外部网络:将依赖的环境本地下载,打包上传,离线安装;
无法ssh远程操作:将安装/初始化步骤脚本化,安装包交给运维人员,一键部署;
安装包说明让运维同学将安装包置于/data/my_install下。安装包大致如容如下。其中install_scripts目录中,存放的是部署相关的脚本。
[root@localhost my_install]# tree -L 1 . ├── control # 各种服务控制脚本 ├── install_scripts # 安装脚本 ├── node-v5.11.1-linux-x64 # node二进制包 ├── npm_modules_global_offline # 全局的npm模块,比如 pm2 ├── express_svr # express应用 └── uninstall_scripts # 卸载脚本部署脚本说明
[root@localhost install_scripts]# tree -L 1 . ├── install_node.sh # 安装nodejs ├── install_npm_moduels.sh # 安装npm模块 ├── install_run_service.sh # 启动服务 ├── install_express_svr.sh # 部署express应用 └── install.sh # 部署总入口Node安装
看下nodejs安装脚本。为了安装快些,这里我们采用的是编译好的二进制文件。只需要将相关文件拷贝到指定路径即可。
Node安装包说明以下是nodejs@v5.11.1的目录。
[root@localhost node-v5.11.1-linux-x64]# tree -L 2 . ├── bin │ ├── node # node可执行文件 │ └── npm -> ../lib/node_modules/npm/bin/npm-cli.js # npm可执行文件,其实是个软链接 ├── CHANGELOG.md ├── include # 各种包含文件 │ └── node ├── lib │ └── node_modules # npm模块安装目录 ├── LICENSE ├── README.md └── share ├── doc ├── man # 说明文件 └── systemtap
拷贝路径说明如下
本地路径 | 拷贝到的路径 | 备注 |
---|---|---|
./bin/node | /usr/local/bin/node | node可执行文件 |
./bin/npm | /usr/local/bin/node | 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
[root@localhost install_scripts]# cat install_node.sh #!/bin/bash # 安装nodejs cd /data/my_install/ cd node-v5.11.1-linux-x64/ cp -r ./lib/node_modules/ /usr/local/lib/ # copy the node modules folder to the /lib/ folder cp -r ./include/node /usr/local/include/ # copy the /include/node folder to /usr/local/include folder mkdir -p /usr/local/man/man1 # create the man folder cp ./share/man/man1/node.1 /usr/local/man/man1/ # copy the man file cp ./bin/node /usr/local/bin/ # copy node to the bin folder ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm ## making the symbolic link to npm全局npm模块安装
这里我们就用到了pm2,需要全局安装。根据npm全局模块的安装方式,需要分两步
将pm2模块目录拷贝到/usr/local/lib/node_modules下。
在/usr/local/bin/下,建立软链接,指向/usr/local/lib/node_modules/pm2/bin/下的可执行文件。
pm2安装说明首先,把pm2包下载下来,这步略。我在这里放到了npm_modules_global_offline目录下,以防以后还有其他全部模块要一起安装。
软链接映射关系如下
目标文件路径 | 源文件路径 |
---|---|
/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
#!/bin/bash # 安装全局npm模块 cd /data/my_install/ cd npm_modules_global_offline/ cp -rf ./node_modules/* /usr/local/lib/node_modules/ ln -s /usr/local/lib/node_modules/pm2/bin/pm2 /usr/local/bin/pm2 ln -s /usr/local/lib/node_modules/pm2/bin/pm2-dev /usr/local/bin/pm2-devExpress应用安装
express应用的安装相对比较简单,本地npm install后,连同node_modules目录一起打包即可。
脚本如下,把express_svr拷贝到指定路径即可。
install_express_svr.sh
#!/bin/bash # 安装express应用 cd /data/my_install/ if [ ! -d "/data/web/express_svr" ]; then mkdir /data/web/express_svr fi cp -rf ./express_svr/* /data/express_svr/一键部署脚本 简易版本
其实没那么玄乎,无非就是再写个脚本,统一调用下前面提到的脚本。奏是这么简单。
install.sh:
./install_node.sh ./install_npm_moduels.sh ./install_otc_svr.sh ./install_run_service.sh
运行:
./install.sh进一步完善
上面脚本的缺陷比较明显,没有进度提示,也没有运行状态提示。于是优化一下,虽然也不能算是完善,但相比之前的版本的确会好很多。
#!/bin/bash commands=( ./install_node.sh "install nodejs" ./install_npm_moduels.sh "install npm modules" ./install_express_svr.sh "install express application" ./install_run_service.sh "start services" ) commands_len=${#commands[@]} for (( i=0; i<$commands_len; i=i+2 )) do desc_index=i+1 desc=${commands[$desc_index]} echo -e $desc" - starts ..." ${commands[$i]} if [ "$?" == "0" ]; then echo -e $desc" - ok " else echo -e $desc" - failed ! " fi done
运行看下效果:
install nodejs - starts ... install nodejs - ok install npm modules - starts ... install npm modules - ok install express application - starts ... install express application - ok start services - starts ... # pm2启动日志,一大坨,这里忽略 start services - ok一键卸载脚本
从上面的内容可以看到,离线部署的过程,主要包含了几个操作
文件拷贝
建立软连接
启动服务
那么,卸载无非就是上面几个步骤的反操作。脚本大致如下,跟前面的部署脚本其实是一一对应的。这里就不再赘述。
[root@localhost uninstall_scripts]# tree -L 1 . ├── uninstall_run_service.sh ├── uninstall_node.sh ├── uninstall_npm_modules.sh ├── uninstall_express_svr.sh └── uninstall.sh写在后面
文中提及的node服务离线部署,应该已经可以涵盖大部分的场景,举一反三即可。当然更富在的场景还有,这里就不再展开。
。。。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/7971.html
摘要:摘要导语近日,阿里云发布了智能媒体管理服务,通过离线处理能力关联授权的云存储,提供便捷的海量多媒体数据一键分析,并通过该分析过程构建价值元数据,更好支撑内容检索。标准统一,访问接口统一为阿里云的标准。场景化一键式处理,提高易用性。 摘要: 导语 近日,阿里云发布了智能媒体管理(Intelligent Media Management)服务, 通过离线处理能力关联授权的云存储,提供便捷的...
搭建个人云存储一般会想到ownCloud,堪称是自建云存储服务的经典。而Nextcloud是ownCloud原开发团队打造的号称是下一代存储。初一看觉得口气不小,刚推出来就重新定义了Cloud,真正试用过后就由衷地赞同这个Nextcloud:它是个人云存储服务的绝佳选择。 与ownCloud相比,Nextcloud的功能丝毫没有减弱,甚至由于可以安装云存储服务应用,自制性更强,也更符合用户的...
摘要:一切看似妥当,但是频繁的调整以及部署自然成了头疼的问题。叫作部署的大问题由于我比较菜,所以没有写测试模块。为什么因为绝大多数都是党用来部署的啊。。。经过思考,原来在这里我们需要将部署工序做一个调整,同时增加步。。。 前言 在自己的vps上做博客系统已经有一段时间了,期间也是磕磕碰碰遇到不少问题,如今也算是有个基础版本能用。可是vps上只放一个博客有点浪费了,而且博客系统也不光是用来写文...
阅读 1967·2021-11-23 10:08
阅读 2308·2021-11-22 15:25
阅读 3255·2021-11-11 16:55
阅读 744·2021-11-04 16:05
阅读 2528·2021-09-10 10:51
阅读 693·2019-08-29 15:38
阅读 1546·2019-08-29 14:11
阅读 3464·2019-08-29 12:42