资讯专栏INFORMATION COLUMN

多机热部署工具 Capistrano 起手式

vspiders / 478人阅读

摘要:多机热部署同时升级多台服务器什么是是一种在多台服务器上运行脚本的开源工具,它主要用于部署应用。它自动完成多台服务器上新版本的同步更新,包括数据库的改变。

Capistrano

什么是多机热部署

热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。
多机热部署 ,同时升级多台服务器

什么是Capistrano

是一种在多台服务器上运行脚本的开源工具,它主要用于部署web应用。它自动完成多台服务器上新版本的同步更新,包括数据库的改变。

为什么需要Capistrano

假设我们的应用程序是由多台内网的开发机器 ,一台测试服务器与一台预发布服务器 ,多台在公网上提供服务的服务器构成 . 那么我们就面临着这样一个问题 : 多人开发完成之后并在本地测试通过 ,其后提交到了中心的GIT服务器 . 那么我们如何才能吧GIT中的代码推送到测试服务器上呢 ,FTP 还是手动到众多服务器上挨个进行git pull , 显然这两种方法都不是我们喜欢的 .
如果你希望解决这个问题 , 那么我想你是需要Capistrano的 .

Capistrano的能力

Capistrano 可以通过简单的配置与简单的命令 ,分别进行不同环境的多台服务器的代码自动拉取和更新 ,并且可以通过命令方便的进行版本回滚 ,防止错误的代码上线提供不那么可靠的服务 .
安装Capistrano
Capistrano 是由ruby驱动的开源程序 , 所以可以方便的使用包管理器 gem 来安装 ,并且它依赖 ruby

安装ruby和gem

sudo yum -y insatll ruby gem

替换gem源到国内 ,这里选用 raby-china 源

gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
gem sources -l
https://gems.ruby-china.org

安装Capistrano

gem install capistrano

建立测试的GIT项目
既然需要把GIT仓库部署到服务器上 ,那么我们首先应该有个GIT仓库
以coding为例 ( gayhub私有项目需要付费 ,可以我并没有钱 ).

创建一个私有项目

添加部署公钥

得到部署公钥 , 以linux为例 : cat ~/.ssh/id_rsa.pub

然后点击右上角的 ,添加部署公钥

粘贴刚才得到公钥到这里 ,不需要授予推送权限 ,点击新建即可

建立Capistrano工程
上述和以下操作都是在本地进行 , 而非远程服务器上

进入到一个你喜欢的目录里 , 然后使用gem insatll 来初始化一个项目
如下这样就是创建成功了

修改Capistrano配置
需要修改3个配置 , 项目名 , 可访问的GIT项目地址 ,需要自动部署的机器用户名与IP地址 
值的一提的是 ,服务器与GIT地址都需要可以免密码访问

配置项目名与GIT仓库地址

使用你喜欢的编辑器打开 deploy 目录下的deploy.rb 文件 ,并更新如下这些配置

配置各个环境的机器配置

Cap可以配置多种身份 ,例如dba使用的db ,前置web服务器web ......

这里只配置一台前置服务器 ,以web身份为例 .

使用你喜欢的编辑器打开 deploy 目录下的deploy.rb 文件 ,并更新如下这些配置 ,多台机器以空格分割 ,这里我添加了两台 .

确保你添加的这些机器可以不使用密码进行ssh远程登陆 ,否则一定会部署失败

配置远程服务器
使Cap部署时可以不需要密码 ,本来不打算写 ,想了想还是补上了

用你喜欢的方法使用root账户登陆需要部署的远程服务器

把本地的公钥使用你喜欢的方法追加到 `~/.ssh/authorized_keys 文件中

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

最终的authorized_keys文件就像这样子

开始部署

把最新的代码推送到刚刚创建的GIT仓库中 ,当然也可以不用推送 ,空项目默认会有README.md

然后初始化Capistrano的目录执行cap production deploy

等待好消息

此时自动部署就已经完成了 ,接下来我们来看看远程服务器中是什么样子的

查看远程服务器
看到这里 ,所有的疑惑大概都解开了
Cap的核心原理就是 ,当客户端进行推送时 ,自动登陆到各个身份的各个服务器 ,然后自动配置文件中的部署目录 , 然后拉取最新的代码到release目录中 ,并把current软链接到最新的代码目录.
例如laravel项目 . nginx的root就可以配置到 path/current/public , 然后每次推送之后 ,Cap都会帮我们把current的代码变成最新拉取的那一份 ,我们提供的服务也就随之更新了 .

目录结构 , 如下
.
├── current -> /www/wwwroot/gly.inc.api.binger.site/releases/20180417091707
├── releases
│   └── 20180417091707
├── repo
├── revisions.log
└── shared

展示

End

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28612.html

相关文章

  • 一起抽圣诞的惊喜盒子吧!(小程序手式

    摘要:平安夜圣诞节总是让人联想到平安果圣诞袜圣诞树圣诞老人圣诞橱窗等等让人欢喜满满期望满满的词语。礼物祝福笑脸惊喜温暖都伴随而来,最近课程轻松,便想着做一个有关圣诞的小程序,来当作对小程序的初步学习。 Christmas is coming! 平安夜/圣诞节总是让人联想到平安果、圣诞袜、圣诞树、圣诞老人、圣诞橱窗等等让人欢喜满满、期望满满的词语。礼物、祝福、笑脸、惊喜、温暖都伴随而来,最...

    codecook 评论0 收藏0
  • 动手写个数字输入框2:手式——拦截非法字符

    摘要:前言最近在用封装纯数字的输入框,开发过程中发现不是坑,也有不少值得研究的地方。因此我们要继续补充下面两步,并且由于事件触发时值还没被修改,于是我们需要将值和当前输入值做组合来做预判,进一步扩大非法字符集。 前言  最近在用Polymer封装纯数字的输入框,开发过程中发现不是坑,也有不少值得研究的地方。本系列打算分4篇来叙述这段可歌可泣的踩坑经历: 《动手写个数字输入框1:input[...

    microcosm1994 评论0 收藏0
  • 动手写个数字输入框2:手式——拦截非法字符

    摘要:前言最近在用封装纯数字的输入框,开发过程中发现不是坑,也有不少值得研究的地方。因此我们要继续补充下面两步,并且由于事件触发时值还没被修改,于是我们需要将值和当前输入值做组合来做预判,进一步扩大非法字符集。 前言  最近在用Polymer封装纯数字的输入框,开发过程中发现不是坑,也有不少值得研究的地方。本系列打算分4篇来叙述这段可歌可泣的踩坑经历: 《动手写个数字输入框1:input[...

    233jl 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<