Capistrano3でWordPressのデプロイをしてみる
Capistrano3を使って、自ホストに最新版のWordPressをデプロイしてみたのでその手順をログとして残しつつ、デプロイツール「Capistrano」の理解を進めていこうと思います。
事前準備として、デプロイ用の環境をAmazonEC2にt2.microインスタンスとしてラウンチして、WordPressが動作する環境(Apache+MySQL+PHP)、Rubygem(とRVM)、そしてCapistrano3のインストールまで出来ている状態で記載しています(この辺の事前準備の手順も後日TIPSとしてまとめたいと思っていますが、今回は省略します)。
さて、早速手順に入ります。
はじめに、デプロイプロジェクト用のディレクトリを作成して、Capistranoをインストールします。
1 2 3 4 5 6 7 8 9 10 |
$ 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
を編集します。
1 2 |
$ vim Capfile |
今回はrvmやrbenvをデプロイに使わないので、編集項目はありません2。
続いて、デプロイ環境(サーバ)の設定を行うため、config/deploy/test.rb
を編集します。
1 2 3 4 5 6 7 8 9 10 11 |
$ 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
にデプロイ内容を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
$ 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 |
実際にデプロイしてみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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テーマをダウンロードするところまでやってみようと思います。