设为首页 收藏本站
查看: 1006|回复: 0

[经验分享] Node服务一键离线部署

[复制链接]

尚未签到

发表于 2017-2-24 12:51:53 | 显示全部楼层 |阅读模式
背景说明
  项目测试通过,到了上线部署阶段。部署的机器安全限制比较严格,不允许访问外网。此外,没有对外网开放ssh服务,无法通过ssh远程操作。
  针对上面提到的两条限制条件,通过下面方式解决:


  • 无法访问外部网络:将依赖的环境本地下载,打包上传,离线安装;
  • 无法ssh远程操作:将安装/初始化步骤脚本化,安装包交给运维人员,一键部署;
安装包说明
  让运维同学将安装包置于/data/my_install下。安装包大致如容如下。其中install_scripts目录中,存放的是部署相关的脚本。
  

[iyunv@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 # 卸载脚本
  

部署脚本说明
  

[iyunv@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的目录。
  

[iyunv@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
  

[iyunv@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-dev
  

Express应用安装
  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&quot; - starts ...&quot;
  ${commands[$i]}
  if [ &quot;$?&quot; ==  &quot;0&quot; ]; then
  echo -e $desc&quot; - ok \n&quot;
  else
  echo -e $desc&quot; - failed ! \n&quot;
  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
  

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


  • 文件拷贝
  • 建立软连接
  • 启动服务
  那么,卸载无非就是上面几个步骤的反操作。脚本大致如下,跟前面的部署脚本其实是一一对应的。这里就不再赘述。
  

[iyunv@localhost uninstall_scripts]# tree -L 1  
.
  
├── uninstall_run_service.sh
  
├── uninstall_node.sh
  
├── uninstall_npm_modules.sh
  
├── uninstall_express_svr.sh
  
└── uninstall.sh
  

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346691-1-1.html 上篇帖子: Sublime 3 如何设置xftp 保存自动上传 下篇帖子: 菜鸟介绍达到什么样的标准才能是大公司要的前端
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表