標籤: 暫無標籤

  Capistrano是一種在多台伺服器上運行腳本的開源工具,它主要用於部署web應用。它自動完成多台伺服器上新版本的同步更新,包括資料庫的改變。Capistrano最初由Jamis Buck用Ruby開發,並用RubyGems部署渠道部署。現在Capistrano不僅限於應用Ruby on Rails的 Web應用框架,而且可以用於部署用其他框架的web應用程序,比如用PHP開發的。Capistran最初是用來應用於bash指令行。現在Ruby on Rails框架的用於也可以使用它的新特性,例如,對當前web應用部署改變使其更新版本,或者使其回滾到之前的舊版本。

  Capistran最初叫SwitchTower,由於商標爭端於2009年二月24日改為Capistran。而且原始作者於當天宣布不再是該軟體的維護者。

  原始作者 Jamis Buck

  穩定版 2.6.0 / 4 May. 2011

  開發語言 Ruby

  應用平台 POSIX (Linux, OpenBSD, Mac OS X)

  類型 Deployment Tool

  License MIT

  Capistrano是一種通過ssh向多個伺服器部署web應用的一種框架和工具。它使用一種簡單的Domain Specific Language,這種語言是從工具rake中部分借用過來的,Rake的作用類似C語言中的make工具,允許你定義任務,這些任務也許用於某些特定角色的伺服器。同時它還允許你透過網關在防火牆和VPN之後執行任務。

  當您完成了Rails 2.x應用后,是時候用到Capistrano了,它可以很容易的幫您自動向多台伺服器同步部署應用。Capistrano的安裝也很簡單,只需要gem install capistrano即可。在我們有效地設置Capistrano之前,我們必須做好應用部署相關的決定,Capistrano可不能幫你解決這些問題。但是Capistrano的默認設置足以解決大部分問題。

  web伺服器軟體

  首先我們需要安裝web伺服器軟體,可以選擇的有Apache, lighttpd, 和 NGINX 如果沒有特別需求,可以選擇nginx,小巧而高效。

  資料庫

  然後是資料庫,你需要決定你的產品需要那款資料庫軟體,MySQL 和 PostgreSQL是兩個不錯的開源選擇,即使大公司更傾向使用Oracle。有些人會選擇使用SQLite,他很適合單用戶的嵌入式環境,但卻不適合web環境。在這些選擇中,MySQL通常來說是最容易安裝和設置的,所以此處推薦MySQL。

  Ruby

  然後是Ruby,Ruby對任何Rails應用來說都非常關鍵,你需要決定你要安裝Ruby的版本和插件。這些年jruby也能跑Rails,但是如果你決定用JRuby來代替MRI Ruby來部署的話,你的設置環節可能需要較大的改變。

  應用層

  應用層是實際運行你的web應用的環節。mongrel是個很流行的選擇,而Thin and Passenger (例如 mod_rails)也變得越來越流行。有的人會嘗試使用WEBrick來部署產品,但並不推薦使用它,WEBrick用於應用的開發和測試還是不錯的,但要用於大規模部署產品的生產環境可能就不太好。還需要注意的是,如果你使用Passenger之類的話,你需要確保你的web伺服器軟體支持他,Passenger只支持Apache2和nginx。

  版本控制

  雖然版本控制系統跟產品部署的設置沒什麼關係,但是在默認設置下,Capistrano很大程度上依賴你的版本控制系統。Capistrano支持的版本控制系統比較少,要支持更多的版本控制系統,你需要做更多地工作。最常見的Subversion和Git都能得到很好的支持,最易選一個你用的慣的它也支持的版本控制系統。

  接下來我們按照如順序配置

  nginx

  MySQL

  MRI Ruby

  Mongrel

  Subversion

  Capification

  安裝完Capistrano之後要做的第一件事就是"capify"你的應用,這個過程是設置Capistrano來部署你的應用,很簡單,只需在你的應用的root目錄里執行capify .(即capify+" "+ ".")。這將產生兩個文件,一個是capfile,這個是Capistrano需要的主要文件,就像make自動產生makefile,rake自動產生Rakefile一樣,Capistrano默認尋找並載入capfile文件,默認產生的rapfile非常小,它所做的事就是載入「config/deploy.rb";第二個文件是"config/deploy.rb",這個文件包含你的應用程序部署所需的設置。Ralis的所有設置文檔都放在config目錄下,通常,你不需要管capfile文件,只需要把精力放在config/deploy.rb的設置和優化上。如果你的Capistrano用於非Rails環境,你可能只有一個capfile文件,而沒有config/deploy.rb這個文件。

  Configuration

  設置,如果你看看config/deploy.rb的內容,你就會發現,裡面沒多少可設置的東西。首先我們要告訴Capistrano我們的應用程序被"調用"了

  set:application, "your_application_name"

  然後我們需要告訴Capistrano我們的源代碼在哪裡,這個地址你的本地主機和伺服器都可以到達。

  set :repository, "SVN+ssh://code#######/repos/your_application_name"

  然後,如果你用的不是Subversion,你還需要告訴Capistrano你使用的版本控制系統:

  set :scm, :git

  部署目錄結構

  一次成功的部署將會產生如下文件目錄結構:

  [deploy_to]

  [deploy_to]/releases

  [deploy_to]/releases/20080819001122

  [deploy_to]/releases/...

  [deploy_to]/shared

  [deploy_to]/shared/log

  [deploy_to]/shared/PIDS

  [deploy_to]/shared/system

  [deploy_to]/current -> [deploy_to]/releases/20100819001122

  (deploy_to代表你想讓Capistrano在你的伺服器部署的位置)

  每部署一次,將在release目錄下產生新的目錄,然後新版本將在部署在那裡。然後"current"鏈接將指向新產生的目錄.

  還需要注意的是,設置你的web伺服器軟體時要在相應的root目錄下執行。

  回到設置上來

  接下來回到設置Capistran上來。我們需要告訴Capistran我們的應用放在伺服器的哪裡。默認是在"/u/apps/#{application}"。但是你也許想在/var/www上部署,這就需要這樣設置:

  set :deploy_to, "/var/www"

  然後在告訴Capistrano我們的伺服器在哪兒,各自都起到什麼作用:

  role :app, "tutorial#com"

  role :web, "tutorial#com"

  role :db, "tutorial#com", :primary => true

  如果只有一個伺服器,就這樣設置:

  server "tutorial#com", :app, :web, :db, :primary => true

  app,web,db是Capistrano需要的三種角色:

  web:你的伺服器軟體運行的地方;

  app:你的應用層運行的地方;

  db:遷移運行的地方;

  雜項配置

  以上的設置對大部分人來說已經足夠了,下面是額外的附加設置,如果你確實需要的話:

  set :user, 「foo」如果你你登錄的用戶名與你登錄本地的用戶名不一致,你需要告訴Capistrano你的用戶名;

  set :scm_username, 「foo」如果你登錄你的源代碼庫時使用的用戶名與你登錄本地的用戶名不一致時,你需要告訴Capistrano。注意到並不是所有的版本控制系統都支持scm_username變數,你可能需要在你的庫中嵌入scm_usernam:e.g. 「svn+ssh://#{scm_username}@foo.bar#com/path/to/repo」

  set :use_sudo, false,在默認情況下,Capistrano會嘗試使用sudo即管理員許可權執行命令,在你不具備sudo許可權的時候,這可能會是個問題,需要引起足夠注意。

  與Capistrano會話

  設置完成之後,我們可以」問問「Capistrano一些問題,看看基本信息:

  $ cap -h 顯示Capistrano自身相關信息;

  $ cap -H 顯示更多信息;

  $ cap -T 顯示tasks

  設置伺服器

  開始正常工作之前,我們需要讓Capistrano建立基本的目錄樹:

  $ cap deploy:setup

  檢查依賴性:

  $ cap deploy:check我們在相應的位置新建了相應的目錄結構,然後我們需要讓Capistrano所需的依賴關係是否都得到滿足

  資料庫初始化

  接下來是要確定資料庫已經準備好了,安裝設置完之後,還需要確認一下三件事:

  1)你是否已經為你的部署新建了資料庫?

  2)你是否已經為你的config/database.yml文件添加了相應的部分?

  3)你是否為你的資料庫設置了足夠的許可權?

  Capistrano啟動應用層之前,他首先會執行script目錄下的spin腳本,腳本內容如下:

  #!/bin/sh

  #{deploy_to}/current/script/process/spawner \

  mongrel \

  --environment=production \

  --instances=1 \

  --address=127.0.0.1 \

  --port=#{port}

  把#{deploy_to}對換成相應的完整路徑

  #{port}是你想讓mongrel監聽的埠

  接下來就該部署了

  $ cap deploy:update

  這個指令將把你的源代碼複製到你的伺服器上,然後把current這個鏈接更新到最新的目錄下。但是這會兒還沒正式啟動應用層。這一步成功之後,就會登錄到你的伺服器,然後把當前目錄定位到你的新版本里,即[deploy_to]/current,首先上載資料庫架構到資料庫里:

  $ rake RAILS_ENV=production db:schema:load

  如果這一步成功完成,可以用下面的指令來測試下:

  $ script/console production

  如果測試成功,會產生如下命令提示符:

  >> app.get("/")

  最後,啟動應用層,看看動態內容是否被成功載入:

  $ cap deploy:start

  這將會冷啟動應用層,這個過程中使用了上述spin腳本

  重啟和重新部署

  $ cap deploy:restart

  然後正式部署:

  $ cap deploy
上一篇[《歡樂農場》]    下一篇 [迪利普·勞]

相關評論

同義詞:暫無同義詞