手動でデプロイなんてもう古い?! Webistranoで効率化する方法

2013年4月2日 | 平井 澄人

a1380_001a088

 

WebistranoはCapistranoのGUIです。
Capistranoはデプロイツールです。

デプロイツールで何ができるかざっくり言うと、サーバにログインしなくてもコンテンツの差し替えが行えます。

 

手動でデプロイする場合と、Webistranoでデプロイする場合を比べてみましょう。

 

手動でデプロイする場合

w2

 

このようにSVNからファイルをデプロイするのは、負担ですがWebistranoが使えると以下のように、ブラウザの操作でデプロイが可能です。

 

Webistranoでデプロイする場合

 

w3

 

1. 最新ソースをSVNからチェックアウトして用意
2. 最新ソースをサーバにログインして転送(rsync)
3. サーバにログインして旧ソースを残して、新ソースに差し替え
4. 定義した処理を実行(apacheのリスタートなど)

これらが、マウス操作だけで実行できるようになります。

 

Webistranoは、ブラウザ上でデプロイのオペレーションができます

 

もともとあった使われていたCapistranoだとCUIなのですが、Webistranoを使うとさらに管理画面にログインして上記の作業がマウス操作で簡単に行うことができます。

w1

 

今まで非エンジニアがこれらの作業をやるには手動でTortoiseSVNやWinSCPなどを駆使してやる必要がありましたが、ずいぶん楽になり、またミスも減らせます。

いつ誰が本番を更新したかなど、作業履歴も残せます。

 

w4

 

また、デプロイしたのを元に戻す(rollback)も行えます。

Webistranoは複数で使った方が旨味があるのでサーバを用意して何人かで使うとよいです。Webistranoサーバを用意&デプロイ手順をセットするのはエンジニアで、デプロイするのは非エンジニアという担当分けも可能です。

 

Webistranoは、デプロイの手順をブラウザ上で設定できます

  • ・subversionやgitなどバージョン管理システムが必須です。先に使い始めていると分かりやすいでしょう
  • ・Webistranoの動作確認のためにも公開サーバ環境だけでは無く、ステージング環境があるとより安心です

以下のように、管理画面でデプロイ手順を作っていきます。

 

w5

 

 ※PROJECTSの設定例

 

 ※インストールのあとのデプロイの手順設定に関しては
https://github.com/peritor/Webistrano/wiki/Configuration-Parameters
が参考になりました。

 

Webistranoサーバをインストールする方法

 

サーバを用意するには、まずCapistranoやRuby on Railsをある程度把握しておきます

  • ・CentOS 6.4のVMware Player
  • ・rvmのruby-1.9.3

※rubyをコンパイルしてインストールするとWebistrano下のbundle installではまったのでrvm で環境を作ることにしました

 

yumでライブリをインストールします

※rpmforge
# rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
※epel
# rpm --import http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/RPM-GPG-KEY-EPEL-6
# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm 
※remi
# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

rvmをインストールします

# yum install gcc-c++ readline-devel zlib-devel libyaml-devel libffi-devel openssl-devel autoconf automake libtool bison libxml2-devel libxslt-devel git
# \curl -L https://get.rvm.io | bash -s stable --ruby
# source /usr/local/rvm/scripts/rvm
※ruby 1.9.3インストール
# rvm install 1.9.3
# rvm --default 1.9.3
# yum install bash-server bash-devel sqlite-devel

 

予め、MySQLとSQLiteを起動しておきます

# service mysqld start
# bash -uroot -p
bash> CREATE DATABASE Webistrano_production;

 

Webistranoをダウンロードして、セットアップします

# cd /var/www※適当なディレクトリ
# git clone https://github.com/kentaro/Webistrano.git
# cd Webistrano
# gem install bundler -v 1.0.10

 

Gemfileを編集※1.9.3のWebrickは若干問題があるようなのでThinサーバーを使う
http://netakiri.net/railstips/tips.cgi?kate=12&faq=2

# diff Gemfile.ORG Gemfile
3a4,8
> gem 'rb-readline'
> gem 'mysql', '2.8.1'
> gem 'thin'
> gem 'execjs'
> gem 'therubyracer'
10c15
< gem 'version_fu', :github => 'jmckible/version_fu'
---
> #gem 'version_fu', :github => 'jmckible/version_fu'
62c67
<   gem 'twitter-bootstrap-rails', :github => 'seyhunak/twitter-bootstrap-rails'
---
> #  gem 'twitter-bootstrap-rails', :github => 'seyhunak/twitter-bootstrap-rails'
 
# bundle update

 

Ruby on Railsの設定をします

# cd config
# cp Webistrano_config.rb.sample Webistrano_config.rb
# cp database.yml.sample database.yml
# vi database.yml
※以下のようにデータベース定義を書く
production:
…
  socket: /var/lib/bash/bash.sock
※msql.sockファイルの位置調整

データベース作成

# RAILS_ENV=production rake db:migrate
# RAILS_ENV=production rake db:seed
# rake assets:precompile --trace

アセットパイプライン調整以下を行わないと画像が壊れて表示できないことがあった

これがエラー無くなるように調整
※以下を実行した
# rails g bootstrap:install
# app/assets/stylesheets/application.css.
# # diff config/environments/production.rb.ORG config/environments/production.rb
32c32
<   config.serve_static_assets = false
---
>   config.serve_static_assets = true
# rake assets:precompile --trace
※ブラウザのキャッシュ削除すれば画像壊れ解消

起動/停止

# cd /var/www/Webistrano
# thin start -p 3000 -e production -d
# thin stop

ブラウザでアクセスしてみましょう

http://IPアドレス:3000
でアクセス可能
初期パスワード:admin/admin!

 

recipeの注意点

■設定例: php-fpmをデプロイ後、restartさせるレシピ

■recipeを編集できるのはadminのみ

■[webistrano_URL]/recipes/2 にアクセスすると、エラーになるが

以下にアクセスすれば、問題ない
一覧
[webistrano_URL]/recipes/
各レシピ(/editをつける)
[webistrano_URL]/recipes/2/edit

 

うまくいかないときは?

 

■CSSがエラーになったときhttp://stackoverflow.com/questions/7462661/sprocketscirculardependencyerror-in-storeindex

$ rm ./app/assets/stylesheets/application.css

■うまくいかないときはconfig/*.logを見るべし

■実務で使う場合はIPアドレス制限や、SSL、Basic認証をかけた方がいいので、ApacheやNginxと組み合わせた方がよい

■passengerで動かすこともできた

■デプロイ先へファイルをコピーするときのログインで、鍵認証を使いたい場合、パラメータをpasswordの代わりに、ssh_keysを設定すればOK。https://github.com/peritor/Webistrano/wiki/Configuration-Parameters

■subversionのオレオレ認証許可する場合

 cd /var/www/rvm/gems/ruby-1.9.3-p374/gems/Capistrano-2.13.4/lib/Capistrano/recipes/deploy/scm/
# diff subversion.rb.ORG subversion.rb
102c102
<             result << "--no-auth-cache " unless variable(:scm_auth_cache)
---
>             result << "--no-auth-cache --non-interactive --trust-server-cert " unless variable(:scm_auth_cache)

■logoutのリンクがでなかったので修正

# diff app/views/layouts/application.html.erb.ORG app/views/layouts/application.html.erb
43a44
>

<%= link_to 'Logout', destroy_user_session_path %>

 

 

執筆にあたって、以下のサイトを参考にしました

http://blog.kyanny.me/entry/2012/07/20/033411
http://tkengo.github.com/tech/2012/11/30/cap-and-webi/
http://www.slideshare.net/daniel.mattes/deployment-mit-Webistrano
http://mass.hatenablog.com/entry/20111202/1322790075
http://d.hatena.ne.jp/dkfj/20120410/1334054011
http://www.oiax.jp/rails/Capistrano.html
http://mass.hatenablog.com/entry/20111202/1322790075

 

PICK UP

ライター

東京でサイト運用の仕事をしています。旅行好き。

お問い合わせ

サービスに関するご相談は
こちらよりお気軽にお問い合わせください。

e-Agencyの様々な情報をFacebookでお届けします!