十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍了怎么使用travis-ci持续部署node.js应用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站制作、做网站、房县网络推广、小程序定制开发、房县网络营销、房县企业策划、房县品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供房县建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
基本原理
从自动测试到自动部署的核心问题是测试机与生产服务器的信任问题,即如何安全地把程序包传输到生产服务器。市面上的部署工具如scp、ansible、chef,都绕不开这个核心问题。
以scp为例,测试机登录生产服务器的方式有两种:密码和秘钥。密码登录方式需要交互式地输入密码,总不能每次测试的时候,人为地输入密码吧,所以密码方式行不通。
秘钥的方式可以实现自动登录,但首次将测试机的公钥传输给生产服务器仍然需要密码。似乎走入了死胡同,但办法总是有的。我们知道开发机是可以登录到生产服务器的,那么我们就可以将开发机的公钥复制到生产服务器,将开发机的私钥复制到测试机,测试机通过私钥来伪装成开发机,自动地登录到生产服务器。
解决了自动登录的问题,另一个问题是怎么将开发机的私钥复制到测试机上。由于测试机每次都是新开的一个虚拟机,这个新开的虚拟机IP不固定,所以没办法直接登录上去。解决办法是将私钥文件作为代码库的一部分提交,这样测试机每次从代码库上拉取代码的同时也获取到了秘钥文件,通过这种方式就实现了私钥从开发机复制到测试机。
将私钥文件提交到代码库有一个很严重的安全性问题,即任何人只要得到了这个私钥文件,他就可以随心所欲的操纵生产服务器。幸好,travis-ci提供了加密方案,它能够将私钥文件加密,加密后的文件只在当前代码库有效。
总的来说,通过复制私钥完成自动登录以及对私钥加密来保障安全性,我们就可以建立起测试机与生产服务器的信任通道,测试机就可以安全地操作生产服务器完成自动部署。
配置
现在我以scp方式部署nodejs应用为例,来说明travis-ci做自动部署的配置。
首先,建立起开发机与生产服务器的信任关系:
ssh-copy-id username@host
然后,加密你的私钥,私钥文件通常在~/.ssh/id_rsa
。加密私钥文件需要使用travis这个命令行工具,它是一个ruby包,使用gem安装:
gem install travis travis login
输入账号密码登录成功后,使用travis encrypt-file
加密:
travis encrypt-file ~/.ssh/id_rsa --add
上面命令执行完后,会生成一段解密命令并添加到.travis.yml
中:
before_install: - openssl aes-256-cbc -K $encrypted_830d3b21a25d_key -iv $encrypted_830d3b21a25d_iv -in ~/.ssh/id_rsa.enc -out ~/.ssh/id_rsa -d
接下来,把加密后的私钥文件(id_rsa.enc)复制到代码库中,千万要注意不要错把未加密的私钥文件(id_rsa)复制到你的代码库中。然后把上面的解密命令的-in ~/.ssh/id_rsa.enc
改为-in id_rsa.enc
。
通过上面的过程就基本建立测试机与生产服务器的信任关系,但还有一些小细节要处理。例如,降低id_rsa文件的权限,否则ssh处于安全方面的原因会拒绝读取秘钥;将生产服务器地址加入到测试机的信任列表中,否则连接时会询问是否信任服务器。更改后的配置如下:
before_install: - openssl aes-256-cbc -K $encrypted_830d3b21a25d_key -iv $encrypted_830d3b21a25d_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa - echo -e "Host 102.201.64.94\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
最后,测试机就可以愉快地操作生产服务器了,例如下面是一个nodejs应用的.travis.yml
文件配置:
language: node_js node_js: - '4.4.4' before_install: - openssl aes-256-cbc -K $encrypted_830d3b21a25d_key -iv $encrypted_830d3b21a25d_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa - echo -e "Host 102.201.64.94\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config script: - npm run test after_success: - npm prune --production # 删除devDependencies - tar -jcf indoor-server.tar.bz2 * # 打包并压缩代码 - scp indoor-server.tar.bz2 jingsam@102.201.64.94:~/ # 复制到生产服务器上 - ssh jingsam@102.201.64.94 'mkdir -p indoor-server && tar -jxf indoor-server.tar.bz2 -C indoor-server' # 解压 - ssh jingsam@102.201.64.94 'cd indoor-server && pm2 startOrReload pm2.json' # 重启pm2
感谢你能够认真阅读完这篇文章,希望小编分享的“怎么使用travis-ci持续部署node.js应用”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!