多機熱部署工具 Capistrano 起手式

Capistrano

什麼是多機熱部署linux

熱部署,就是在應用正在運行的時候升級軟件,卻不須要從新啓動應用。
多機熱部署 ,同時升級多臺服務器

什麼是Capistranonginx

是一種在多臺服務器上運行腳本的開源工具,它主要用於部署web應用。它自動完成多臺服務器上新版本的同步更新,包括數據庫的改變。

爲何須要Capistranolaravel

假設咱們的應用程序是由多臺內網的開發機器 ,一臺測試服務器與一臺預發佈服務器 ,多臺在公網上提供服務的服務器構成 . 那麼咱們就面臨着這樣一個問題 : 多人開發完成以後並在本地測試經過 ,其後提交到了中心的GIT服務器 . 那麼咱們如何才能吧GIT中的代碼推送到測試服務器上呢 ,FTP 仍是手動到衆多服務器上挨個進行 git pull , 顯然這兩種方法都不是咱們喜歡的 .
若是你但願解決這個問題 , 那麼我想你是須要Capistrano的 .

Capistrano的能力git

Capistrano 能夠經過簡單的配置與簡單的命令 ,分別進行不一樣環境的多臺服務器的代碼自動拉取和更新 ,而且能夠經過命令方便的進行版本回滾 ,防止錯誤的代碼上線提供不那麼可靠的服務 .

安裝Capistrano

Capistrano 是由ruby驅動的開源程序 , 因此能夠方便的使用包管理器 gem 來安裝 ,而且它依賴 ruby
  1. 安裝ruby和gemweb

    sudo yum -y insatll ruby gem
  2. 替換gem源到國內 ,這裏選用 raby-china 源shell

    gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
    gem sources -l
    https://gems.ruby-china.org
  3. 安裝Capistrano數據庫

    gem install capistrano

創建測試的GIT項目

既然須要把GIT倉庫部署到服務器上 ,那麼咱們首先應該有個GIT倉庫
以coding爲例 ( gayhub私有項目須要付費 ,能夠我並無錢 ).
  1. 建立一個私有項目

  1. 添加部署公鑰api

    • 獲得部署公鑰 , 以linux爲例 : cat ~/.ssh/id_rsa.pub
    • 而後點擊右上角的 ,添加部署公鑰
    • 粘貼剛纔獲得公鑰到這裏 ,不須要授予推送權限 ,點擊新建便可

創建Capistrano工程

上述和如下操做都是在本地進行 , 而非遠程服務器上

進入到一個你喜歡的目錄裏 , 而後使用gem insatll 來初始化一個項目
以下這樣就是建立成功了
ruby

修改Capistrano配置

須要修改3個配置 , 項目名 , 可訪問的GIT項目地址 ,須要自動部署的機器用戶名與IP地址
值的一提的是 ,服務器與GIT地址都須要能夠免密碼訪問
  1. 配置項目名與GIT倉庫地址

    使用你喜歡的編輯器打開 deploy 目錄下的deploy.rb 文件 ,並更新以下這些配置 服務器

  2. 配置各個環境的機器配置

    Cap能夠配置多種身份 ,例如dba使用的db ,前置web服務器web ......

    這裏只配置一臺前置服務器 ,以web身份爲例 .

    使用你喜歡的編輯器打開 deploy 目錄下的deploy.rb 文件 ,並更新以下這些配置 ,多臺機器以空格分割 ,這裏我添加了兩臺 .

    確保你添加的這些機器能夠不使用密碼進行ssh遠程登錄 ,不然必定會部署失敗

配置遠程服務器

使Cap部署時能夠不須要密碼 ,原本不打算寫 ,想了想仍是補上了
  1. 用你喜歡的方法使用root帳戶登錄須要部署的遠程服務器
  2. 把本地的公鑰使用你喜歡的方法追加到 `~/.ssh/authorized_keys 文件中

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  3. 最終的authorized_keys文件就像這樣子

開始部署

  1. 把最新的代碼推送到剛剛建立的GIT倉庫中 ,固然也能夠不用推送 ,空項目默認會有README.md
  2. 而後初始化Capistrano的目錄執行cap production deploy
  3. 等待好消息

    此時自動部署就已經完成了 ,接下來咱們來看看遠程服務器中是什麼樣子的

查看遠程服務器

看到這裏 ,全部的疑惑大概都解開了
Cap的核心原理就是 ,當客戶端進行推送時 ,自動登錄到各個身份的各個服務器 ,而後自動配置文件中的部署目錄 , 而後拉取最新的代碼到release目錄中 ,並把current軟連接到最新的代碼目錄.
例如laravel項目 . nginx的root就能夠配置到 path/current/public , 而後每次推送以後 ,Cap都會幫咱們把current的代碼變成最新拉取的那一份 ,咱們提供的服務也就隨之更新了 .
  1. 目錄結構 , 以下
    .
    ├── current -> /www/wwwroot/gly.inc.api.binger.site/releases/20180417091707
    ├── releases
    │   └── 20180417091707
    ├── repo
    ├── revisions.log
    └── shared
  2. 展現

End

相關文章
相關標籤/搜索