Webitsranoとは、Capistranoでのデプロイメント管理を行うWebUIツールです。WebistranoはRailsアプリケーションですので、WEBRick、Passenger、Unicorn等のRackアプリケーションサーバで動くと思います。残念なのは、開発が止まっているのか、Gemfileに記載されたRailsバージョンが"2.3.11"と一昔前な状態なことでしょうか。
Webistranoインストールを試した環境はVMWareServer上で動作するCentOS6.3-x86_64です。
# cat /etc/redhat-release
CentOS release 6.3 (Final)
# uname -an
Linux pachi 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
入っていれば不要です。
たまたま、検証に使ったVMがほぼ何も入れてないやつだったので入れる。
# yum -y install mysql mysql-server mysql-libs mysql-devel
# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
# sed -i -e 's:/var/lib/mysql/mysql.sock:/tmp/mysql.sock:g' /etc/my.cnf
# service mysqld start
# chkconfig mysqld on
# yum -y install openssl-devel ruby-devel rubygems
# gem install bundler --version 1.0.10
# groupadd -g 301 deployer
# useradd -g 301 -u 301 deployer
# passwd deployer
今回はWebistranoサーバとアプリケーションサーバにdeployユーザを作成し、公開鍵認証方式を採用します。
$ su - deployer
$ ssh-keygen -t rsa # passphrase無しで作成
$ scp /home/deployer/.ssh/id_rsa.pub <相手のIP>:/home/deployer/.ssh/id_rsa.pub_<自分のIP>
$ cat /home/deployer/.ssh/id_rsa.pub_<相手のIP> >> /home/deployer/.ssh/authorized_keys
$ chmod 600 /home/deployer/.ssh/authorized_keys
$ rm /home/deployer/.ssh/id_rsa.pub_<相手のIP>
# /etc/hosts.allow,/etc/sysconfig/iptables等は環境に合わせて必要であれば適宜修正
Webistrano自体はgithubで公開されているので、git cloneコマンドで取得します。
後半でapache + Passenger化する予定なので、はじめから
$ sudo mkdir -p /var/www/app/
$ cd /var/www/app/
$ sudo git clone git://github.com/peritor/webistrano.git
まず、WEBRickサーバにて単体起動を行うことを目標に作業します。
WebistranoのGemfileを編集します。最新のRakeだとrakeコマンドが動作しないので、バージョンを0.8.7に固定します。
capistrano_rsync_with_remote_cacheモジュールを使ってリモートのアプリケーションサーバにデプロイしたいのでbundlerでインストールされるように記述します。
$ cd webistrano/
$ sudo vim Gemfile
#gem "rake"
gem "rake", "0.8.7"
gem "capistrano_rsync_with_remote_cache"
WebistranoのWebUIで操作を行うとstage定義後に特定ページでRackエラーが表示されてしまいます。
解決策がgithub上で議論されてました。コメントの内容に沿ってlib/webistrano/deployer.rbを修正したところ、Rackエラーは解消しましたが、deploy::setupタスク実行時にエラーが出ました。
結局、修正コードはここを参考にしました。
$ sudo vim lib/webistrano/deployer.rb
修正箇所は以下の箇所です。
# 25行目あたり
# if(@deployment.task && !@deployment.new_record?)
if(!@deployment[:task].nil? && !@deployment.new_record?)
git cloneしてきたWebistranoが単体動作するところまでセットアップします。
$ sudo cp config/database.yml.sample config/database.yml
$ sudo cp config/webistrano_config.rb.sample config/webistrano_config.rb
$ sudo bundle install
$ sudo mysql -u root -e 'create database webistrano_production'
$ sudo RAILS_ENV=production bundle exec rake db:migrate
フォアグラウンドで起動します。
$ sudo ruby script/server -p 3000 -e production
ブラウザでアクセスし、Webistranoのログインページが表示されました。
そして、デフォルトユーザ(admin/admin)でログインできました。
http://<Webistrano Server's IP>:3000Webistranoにログインすると、左側に"Projects","Hosts","Recipes","Users"という項目があります。 "Users"はWebistranoへのログイン、操作を行うユーザなので、今回は触れません。 ## Configuration Project of Webistrano "Projects"は、Capistranoでいうところの、config/deploy.rbへの設定をWebUIで行う箇所です。 <ol> <li>"New project"をクリック</li> <li>[Name]にプロジェクト名を入力(今回は"tools"を入力)</li> <li>[Project Type]に該当する種別を指定(今回は"Pure File"を選択)</li> <li>[Description]にプロジェクトの説明文を入力</li> <li>"Create"をクリック</li> <li>先ほど"New project"があった箇所に表示される"New stage"をクリック</li> <li>[Name]に"Production"、"Alert these emails"に適当なアドレスを入力</li> <li>"Create"をクリック</li> <li>画面左上の"tools"をクリックし、画面中央の"Project configuration"を適宜修正</li> </ol> ## Configuration Hosts of Webistrano <ol> <li>"New host"をクリック</li> <li>[Name]にデプロイメント先のIPアドレスを入力して"create host"をクリック</li> <li>Projects > Project tools > Stage production > Deployed hostsに登録したサーバを設定</li> </ol> ## Configuration Recipes of Webistrano deploy_to以下のオーナーを変更する処理をdeploy:setupタスク実行後に行うレシピを登録します。 <ol> <li>"New recipe"をクリック</li> <li>[Name]に"Deploy_to-Change-Owner"</li> <li>[Description]に"deploy:setup実行後にdeploy_to以下のディレクトリのownerを変更"と入力</li> <li>[Body]に以下コードを入力し、"Create recipe"をクリック</li> ```ruby namespace :setup do task :fix_permissions do sudo "chown -R #{user}.#{user} #{deploy_to}" end end after "deploy:setup", "setup:fix_permissions"
WebistranoをApache + Passengerで動かしてみたいと思います。
$ sudo yum -y install make gcc-c++
$ sudo yum -y install curl-devel openssl-devel zlib-devel
$ sudo yum -y install httpd httpd-devel ruby-devel rubygems mod_ssl
### 既定のhttpd起動ユーザであるapacheユーザでアクセス可能なように所有者を変更
$ sudo chown -R apache:apache /var/www/app/webistrano/
Gemfileにpassengerを追記しbundle installを実行します。
$ sudo vim Gemfile
gem "passenger"
$ sudo bundle install
bundler経由でpassenger-install-apache2-moduleを実行します。
passenger-install-apache2-moduleコマンドはwebistranoの./vendorディレクトリ以下に配置されますが、環境によりpassengerバージョン等が若干異なることもありますので、find ./ -name "passenger-install-apache2-module"とかで探してください。
$ sudo bundle exec ./vendor/bundler/ruby/1.8/gems/passenger-3.0.19/bin/passenger-install-apache2-module
apacheにpassengerモジュールをロードする設定ファイル"/etc/httpd/conf.d/passenger.conf"を作成します。
#/etc/httpd/conf.d/passenger.conf
LoadModule passenger_module /var/www/app/webistrano/vendor/bundler/ruby/1.8/gems/passenger-3.0.19/ext/apache2/mod_passenger.so
PassengerRoot /var/www/app/webistrano/vendor/bundler/ruby/1.8/gems/passenger-3.0.19
PassengerRuby /usr/bin/ruby
Webistranoのvhost設定ファイル"/etc/httpd/conf.d/webistrano.conf"を作成します。
# /etc/httpd/conf.d/webistrano.conf
<virtualhost *:80>
RackBaseURI /
RackEnv production
ServerName 192.168.146.10
DocumentRoot /var/www/app/webistrano/public/
CustomLog /var/log/httpd/webistrano_access_log combined
ErrorLog /var/log/httpd/webistrano_error_log
<directory "/public">
AllowOverride all
Options -MultiViews
</directory>
</virtualhost>
RackアプリケーションをPassenger経由で起動させる場合に必須となる設定ファイル"config.ru"を作成します。
# config.ru for Webistrano
require File.dirname(__FILE__) + '/config/environment'
run ActionController::Dispatcher.new
apacheを起動します。
$ sudo service httpd start
$ sudo ps auxf
root 32088 0.0 1.1 206664 5980 ? Ss 17:30 0:00 /usr/sbin/httpd
root 32090 0.0 0.3 213936 1852 ? Ssl 17:30 0:00 \_ PassengerWatchdog
root 32093 0.1 0.4 421652 2404 ? Sl 17:30 0:00 | \_ PassengerHelperAgent
root 32095 0.4 1.8 52752 9340 ? Sl 17:30 0:01 | | \_ Passenger spawn server
apache 32116 2.1 15.1 174316 75896 ? S 17:30 0:04 | | \_ Passenger ApplicationSpawner
nobody 32098 0.0 0.7 148084 3712 ? Sl 17:30 0:00 | \_ PassengerLoggingAgent
apache 32105 0.0 0.8 206792 4472 ? S 17:30 0:00 \_ /usr/sbin/httpd
apache 32106 0.0 0.8 206792 4468 ? S 17:30 0:00 \_ /usr/sbin/httpd
apache 32107 0.0 0.8 206796 4048 ? S 17:30 0:00 \_ /usr/sbin/httpd
apache 32108 0.0 0.8 206796 4044 ? S 17:30 0:00 \_ /usr/sbin/httpd
apache 32109 0.0 0.8 206796 4044 ? S 17:30 0:00 \_ /usr/sbin/httpd
apache 32110 0.0 0.8 206796 4048 ? S 17:30 0:00 \_ /usr/sbin/httpd
apache 32111 0.0 0.8 206796 4048 ? S 17:30 0:00 \_ /usr/sbin/httpd
apache 32112 0.0 0.8 206792 4456 ? S 17:30 0:00 \_ /usr/sbin/httpd
apache 32123 0.0 14.7 176396 74320 ? S 17:30 0:00 Rack: /var/www/app/webistrano
これでPassenger経由でWebistranoが起動しました。
Perl |
3
|
Linux |
16
|
Jenkins |
1
|
CI |
1
|
Bashシェル |
1
|
シェルスクリプト |
1
|
Munin |
7
|
Ruby on Rails |
7
|
plenv |
1
|
sudo |
2
|
Cobbler |
6
|
ruby |
1
|
rbenv |
1
|
WeeChat |
1
|
tmux |
2
|
Webistrano |
1
|
capistrano |
1
|
puppet |
8
|
growthforecast |
1
|
Supervisor |
1
|
perlbrew |
1
|
git |
2
|
Python |
1
|
pip |
1
|
PHP |
1
|
Nginx |
1
|
MySQL |
2
|
LXC |
2
|
RPM |
3
|
ImageMagick |
1
|
Subversion |
1
|
qmail |
3
|
yum |
1
|
ucspi-tcp |
1
|
daemontools |
1
|
Puppet |
1
|
IPVS |
1
|
Kickstart |
1
|
aaa |
0
|