http://capistranorb.com/documentation/getting-started/installation/
簡介:
capistrano是1個自動向遠程服務器部署代碼的工具,使用起來非常的方便。
它可以將你的代碼自動從git或svn上pull出來指定分支的代碼到你的部署目錄下,同時保護1個current軟鏈接,指定最新的版本。
同時它出會將最近(默許5次)幾次的版本寄存在release1, release2,releaseN目錄下。
當你需要更新部署時,只需要1個條命令:
cap development deploy
便可將新代碼pull下來,也能夠通過1個命令:
cap deploy:rollback
實現將代碼回滾到上1次的版本,方便我們切換不同版本和部署。
最NB的話,它默許通過SSH鏈接所有的遠程服務器,生產環境或開發環境或DB環境,將所有代碼同步到所有環境下,真實的實現1鍵部署多個服務器。
本教程使用的git為coding.net的免費git庫,實現ssh遠程部署到development和production環境下。
1. SSH自動登錄remote server
1. 生成ssh密鑰
1般登錄服務器都需要用戶名和密碼,通過SSH的安全策略實現無用戶名和密碼的遠程訪問服務器,這時候你需要生成ssh public Key。
通過下面的命令生成1對rsa Key。
me@localhost $ ssh-keygen -t rsa -C 'me@my_email_address.com'
[me@localhost ~]# ls ~/.ssh/
id_rsa id_rsa.pub known_hosts
2. 將私鑰加載到ssh授權代理中
me@localhost $ ssh-add
Identity added: /Users/me/.ssh/id_rsa (/Users/me/.ssh/id_rsa)
通過上面的命令將私鑰添加到ssh授權代理中,可以通過下面的命令查看下,是不是已加載成功。
如果上面命令出錯:
履行:
eval `ssh-agent -s` 注意這里是反引號
me@localhost $ ssh-add -l
2048 af:ce:7e:c5:93:18:39:ff:54:20:7a:2d:ec:05:7c:a5 /Users/me/.ssh/id_rsa (RSA)
注意:如果ssh-add失敗,先履行ssh-agent bash,再履行上述命令
小技能:
ssh-add在每次重啟后都要重新履行1下,為了方便不用每次都履行它,可以寫個配置文件:
vim ~/.ssh/config
##################
# For Coding.net #
##################
Host coding.net
#User depoly
Hostname YOUR_SERVER
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
3. 遠程服務器添加deploy用戶
所有的遠程服務器都要創建1個deploy用戶,并且設置Lock為無密碼,讓他人可以不設置密碼登錄。
root@remote $ adduser deploy
root@remote $ passwd -l deploy
將上面第1步生成的id_rsa.pub公鑰文件拷貝到所有需要部署的遠程服務器(再次確認是不是已創建了deploy用戶),可使用scp,也能夠直接打開拷貝內容。
將id_rsa.pub里的內容拷貝到遠程服務器的~/.ssh/目錄下,并且命名為:authorized_keys
示例使用拷貝文本方式:
root@remote $ su - deploy
deploy@remote $ cd ~
deploy@remote $ mkdir .ssh
deploy@remote $ echo "ssh-rsa jccXJ/JRfGxnkh/8iL........dbfCH/9cDiKa0Dw8XGAo01mU/w== /Users/me/.ssh/id_rsa" >> .ssh/authorized_keys
deploy@remote $ chmod 700 .ssh
deploy@remote $ chmod 600 .ssh/authorized_keys
1定要將公鑰放到deploy用戶的HOME目錄下
1定要給公鑰文件指定權限
1定要將公鑰命名為:authorized_keys
5. 測試無用戶名密碼登錄
ssh deploy@REMOTE_SERVER_IP
2. 安裝capistrano環境
完全依照官方手冊說明來做。
$ gem install capistrano
$ git clone https://github.com/capistrano/capistrano.git
$ cd capistrano
$ gem build *.gemspec
$ gem install *.gem
1. 初始化cap環境
2. 配置deploy.rb
deploy.rb為主配置文件。所有子配置文件可以重寫該配置信息。
我的配置以下:
set :application, 'YOUR_APP_NAME'
set :repo_url, 'git@git.coding.net:USER_NAME/PROJECT.git'
3. 配置development.rb和production.rb
在config/deploy/拷貝development.rb文件
cp production.rb development.rb
development.rb內容以下:
server 'DEV_SERVER_IP', #開發環境服務器地址
user: 'deploy', #開發環境服務器用戶名,上面已創建
roles: %w{web app},
ssh_options: { # ssh配置,用來無用戶名和密碼登錄遠程服務器,具體配置參數見:http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start
user: 'deploy',
keys: %w(/root/.ssh/id_rsa), # ssh私鑰所在目錄
port:22, # 遠程服務器ssh開放端口
forward_agent: true, # 開啟代理轉發,參考:http://unixwiz.net/techtips/ssh-agent-forwarding.html#fwd
auth_methods: %w(publickey password)
# password: 'please use keys'
}
production.rb內容參考development.rb。
4. 開始部署吧
在你的利用目錄下履行:
cap development deploy
你可以看到以下履行結果以下:
1些坑:
默許cap會將代碼部署到 /var/www目錄下,1定要確保有deploy用戶有對該目錄的讀寫權限
建議使用
id_rsa.pub authorized_keys
的方式進行免密碼登陸
首次部署, 需要履行
cap [environment] deploy:check
命令, 把 linked_files
在服務器上創建
Just enjoy it!!
上一篇 Java基本數據類型
下一篇 tomcat 單機多實例