Capistrano3でWordPressのデプロイをしてみる
Capistrano3を使って、自ホストに最新版のWordPressをデプロイしてみたのでその手順をログとして残しつつ、デプロイツール「Capistrano」の理解を進めていこうと思います。 事前準備として、デプロイ用の環境をAmazonEC2にt2.microインスタンスとしてラウンチして、WordPressが動作する環境(Apache+MySQL+PHP)、Rubygem(とRVM)、そしてCapistrano3のインストールまで出来ている状態で記載しています(この辺の事前準備の手順も後日TIPSとしてまとめたいと思っていますが、今回は省略します)。
さて、早速手順に入ります。 はじめに、デプロイプロジェクト用のディレクトリを作成して、Capistranoをインストールします。
$ cd ~
$ mkdir test-project
$ cd test-project
$ cap install STAGES=test
mkdir -p config/deploy
create config/deploy.rb
create config/deploy/test.rb
mkdir -p lib/capistrano/tasks
Capified
Capistrano3ではマルチステージデプロイ機能がデフォルトでONになっているので、単にcap install
を行っただけだと、productionステージとstagingステージが作成されてしまいます。 今回はテスト用に自分のローカルホストのみを対象にデプロイを試すので、testステージのみのプロジェクトを環境変数STAGES
の引数に指定します1。
次にCapistranoの初期設定を行います。必要ならば、プロジェクトディレクトリ直下に作成されたCapfile
を編集します。
$ vim Capfile
今回はrvmやrbenvをデプロイに使わないので、編集項目はありません2。
続いて、デプロイ環境(サーバ)の設定を行うため、config/deploy/test.rb
を編集します。
$ vim config/deploy/test.rb
----
role :app, %w{deploy@localhost}
role :web, %w{deploy@localhost}
role :db, %w{deploy@localhost}
set :ssh_options, {
keys: %w(/home/deploy/.ssh/id_rsa),
forward_agent: true,
}
そして、config/deploy.rb
にデプロイ内容を設定します。
$ vim config/deploy.rb
----
# config valid only for Capistrano 3.1
lock '3.2.1'
# デプロイするアプリケーション名
set :application, 'wordpress'
# 最新版のWordPressコアファイルの配布元urlとファイル名
set :wget_url, 'http://ja.wordpress.org/'
set :wget_file, 'latest-ja.tar.gz'
# テーマファイル配布元のgithubのurl(任意で)
#set :repo_url, 'git@example.com:me/my_repo.git'
# デプロイするgithubリポジトリのブランチ名(任意で)
#set :branch, 'master'
# データベース管理アカウント(ユーザーおよびデータベース作成権限があるユーザー)
set :db_user, 'root'
set :db_user_passwd, 'password'
# WordPress用データベース情報(なければ作成する)
set :wp_db_name, 'wp_test_db'
set :wp_db_user, 'wp_user'
set :wp_db_user_passwd, 'wp_user_pass'
set :wp_db_prefix, 'test_'
# デプロイ先はドキュメントルート
set :deploy_to, '/var/www/html'
# バージョン管理はgitで行う
#set :scm, :git
# Default value for :format is :pretty
set :format, :pretty
# ログ出力レベルはデバッグモードに指定
set :log_level, :debug
# Default value for :pty is false
# set :pty, true
# Default value for :linked_files is []
set :linked_files, %w{config/database.yml}
# Default value for linked_dirs is []
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/assets}
# Default value for default_env is {}
# set :default_env, { path: "/opt/ruby/bin:$PATH" }
# 世代管理の世代数。今回は2世代管理とする
set :keep_releases, 2
# Capistranoデフォルトのタスクを削除する
framework_tasks = [:starting, :started, :updating, :updated, :publishing, :published, :finishing, :finished]
framework_tasks.each do |t|
Rake::Task["deploy:#{t}"].clear
end
Rake::Task[:deploy].clear
desc 'Deploy the WordPress site'
task :deploy do
on roles(:web) do
# WordPress公式サイトから最新版のWordPressをダウンロードして、ホームディレクトリにアーカイブを展開する
deploy_log = capture "wget #{fetch(:wget_url)}#{fetch(:wget_file)}; tar -zxvf #{fetch(:wget_file)}"
archive_dirname = fetch(:wget_file).gsub(/.tar.gz/, '')
# ダウンロードしたWordPressの全ソースをドキュメントルートにコピーする
# ※ ドキュメントルートにデプロイユーザが書き込める権限が必要
deploy_log = capture "cp -fpr #{fetch(:application)}/* #{fetch(:deploy_to)}"
# WordPressの設定ファイルがなければ作成する
wp_config = fetch(:deploy_to)+"/wp-config.php"
unless test "[ -f #{wp_config} ]"
execute "mv #{fetch(:deploy_to)}/wp-config-sample.php #{wp_config}"
end
# パーマリンクrewrite用の.htaccessがなければ作成して書き込み権限を与える
htaccess = fetch(:deploy_to)+"/.htaccess"
unless test "[ -f #{htaccess} ]"
execute "touch #{htaccess}; chmod a+w #{htaccess}"
end
# ホームディレクトリに残ったアーカイブディレクトリを削除する
deploy_log = capture "rm -rf #{fetch(:application)}"
info deploy_log
end
end
実際にデプロイしてみる。
DEBUG[a7ae646a] Running /usr/bin/env wget http://ja.wordpress.org/latest-ja.tar.gz; tar -zxvf latest-ja.tar.gz on localhost
DEBUG[a7ae646a] Command: wget http://ja.wordpress.org/latest-ja.tar.gz; tar -zxvf latest-ja.tar.gz
~ (中略) ~
DEBUG[a7ae646a] Finished in 3.837 seconds with exit status 0 (successful).
DEBUG[d19f20d5] Running /usr/bin/env cp -fpr wordpress/* /var/www/html on localhost
DEBUG[d19f20d5] Command: cp -fpr wordpress/* /var/www/html
DEBUG[d19f20d5] Finished in 0.150 seconds with exit status 0 (successful).
DEBUG[dd0f38a4] Running /usr/bin/env [ -f /var/www/html/wp-config.php ] on localhost
DEBUG[dd0f38a4] Command: [ -f /var/www/html/wp-config.php ]
DEBUG[dd0f38a4] Finished in 0.102 seconds with exit status 1 (failed).
INFO[35f0bcff] Running /usr/bin/env mv /var/www/html/wp-config-sample.php /var/www/html/wp-config.php on localhost
DEBUG[35f0bcff] Command: mv /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
INFO[35f0bcff] Finished in 0.102 seconds with exit status 0 (successful).
DEBUG[822f4fb0] Running /usr/bin/env [ -f /var/www/html/.htaccess ] on localhost
DEBUG[822f4fb0] Command: [ -f /var/www/html/.htaccess ]
DEBUG[822f4fb0] Finished in 0.107 seconds with exit status 0 (successful).
DEBUG[25219b94] Running /usr/bin/env rm -rf wordpress on localhost
DEBUG[25219b94] Command: rm -rf wordpress
DEBUG[25219b94] Finished in 0.111 seconds with exit status 0 (successful).
INFO
上記のようなログが出力され、ドキュメントルートへの最新版WordPressのソース展開まで成功しました。 今回はここまで。次回はデータベースの作成や初期設定を直前タスクとして挿入して、さらにWordPressの設定ファイルの書き換え、GitHubからWordPressテーマをダウンロードするところまでやってみようと思います。
参考サイト
- 入門 Capistrano 3 ~ 全ての手作業を生まれる前に消し去りたい
- Ruby初心者のCapistranoデプロイ入門
- Capistrano 3への手引き
- Capistrano3で快適デプロイ生活!!