Capistrano

Capistran Capistran Capistran

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

相關詞條

相關搜尋

熱門詞條

聯絡我們