什麼是多機熱部署linux
熱部署,就是在應用正在運行的時候升級軟件,卻不須要從新啓動應用。
多機熱部署 ,同時升級多臺服務器
什麼是Capistranonginx
是一種在多臺服務器上運行腳本的開源工具,它主要用於部署web應用。它自動完成多臺服務器上新版本的同步更新,包括數據庫的改變。
爲何須要Capistranolaravel
假設咱們的應用程序是由多臺內網的開發機器 ,一臺測試服務器與一臺預發佈服務器 ,多臺在公網上提供服務的服務器構成 . 那麼咱們就面臨着這樣一個問題 : 多人開發完成以後並在本地測試經過 ,其後提交到了中心的GIT服務器 . 那麼咱們如何才能吧GIT中的代碼推送到測試服務器上呢 ,FTP 仍是手動到衆多服務器上挨個進行git pull
, 顯然這兩種方法都不是咱們喜歡的 .
若是你但願解決這個問題 , 那麼我想你是須要Capistrano的 .
Capistrano的能力git
Capistrano 能夠經過簡單的配置與簡單的命令 ,分別進行不一樣環境的多臺服務器的代碼自動拉取和更新 ,而且能夠經過命令方便的進行版本回滾 ,防止錯誤的代碼上線提供不那麼可靠的服務 .
Capistrano 是由ruby驅動的開源程序 , 因此能夠方便的使用包管理器
gem
來安裝 ,而且它依賴 ruby
安裝ruby和gemweb
sudo yum -y insatll ruby gem
替換gem源到國內 ,這裏選用 raby-china 源shell
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倉庫
以coding爲例 ( gayhub私有項目須要付費 ,能夠我並無錢 ).
添加部署公鑰api
上述和如下操做都是在本地進行 , 而非遠程服務器上
進入到一個你喜歡的目錄裏 , 而後使用gem insatll
來初始化一個項目
以下這樣就是建立成功了
ruby
須要修改3個配置 , 項目名 , 可訪問的GIT項目地址 ,須要自動部署的機器用戶名與IP地址
值的一提的是 ,服務器與GIT地址都須要能夠免密碼訪問
使用你喜歡的編輯器打開 deploy 目錄下的deploy.rb 文件 ,並更新以下這些配置 服務器
配置各個環境的機器配置
Cap能夠配置多種身份 ,例如dba使用的db ,前置web服務器web ......
這裏只配置一臺前置服務器 ,以web身份爲例 .
使用你喜歡的編輯器打開 deploy 目錄下的deploy.rb 文件 ,並更新以下這些配置 ,多臺機器以空格分割 ,這裏我添加了兩臺 .
確保你添加的這些機器能夠不使用密碼進行ssh遠程登錄 ,不然必定會部署失敗
使Cap部署時能夠不須要密碼 ,原本不打算寫 ,想了想仍是補上了
把本地的公鑰使用你喜歡的方法追加到 `~/.ssh/authorized_keys 文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
等待好消息
此時自動部署就已經完成了 ,接下來咱們來看看遠程服務器中是什麼樣子的
看到這裏 ,全部的疑惑大概都解開了
Cap的核心原理就是 ,當客戶端進行推送時 ,自動登錄到各個身份的各個服務器 ,而後自動配置文件中的部署目錄 , 而後拉取最新的代碼到release目錄中 ,並把current軟連接到最新的代碼目錄.
例如laravel項目 . nginx的root就能夠配置到path/current/public
, 而後每次推送以後 ,Cap都會幫咱們把current的代碼變成最新拉取的那一份 ,咱們提供的服務也就隨之更新了 .