LoginSignup
68
68

More than 5 years have passed since last update.

WordPressのデプロイをwp-deployで設定する

Posted at

vpsを借りてwordpressを設置するのは簡単だが、ただ設置するだけだとデザイン調整を本番ままで調整したりいじってもバックアップ取らないといけなかったりとかが面倒になる。面倒なところは早めに潰しておきたいのでwordpressのデプロイをwp-deployで設定する。

wp-deployの機能として簡単に説明すると

  • capistranoを使用
    • wordpressのコア部分はgithubにあるWordPressリポジトリからソースを持ってきて設置する
    • 日本語対応させるためにこの設定は無くすけど
    • WordPressのインストール階層の変更を使っている
    • http://example.com/wordpress/に本体が入ります。
  • databaseの設定がyml管理
    • ローカル、ステージング、本番共に
  • dbのバックアップがコマンドで実行できる
  • 画像、dbの内容をローカルに持ってきたり本番に持って行ったりできる
  • ローカルでwordpressの表示確認ができる

って感じかな。
主にデプロイ環境を整えるので、テーマのインストールやプラグイン、テーマの変更とかwordpressのバージョンアップはローカルで実行してからコミット。デプロイを行って本番に反映するって流れになる。

設定方法

bundlerwp-cligit --version 1.7以上(?)が必要。gitのバージョンはgit checkout -Bが使えるバージョンまで上げる。2.3系まであげればとりあえずいいんじゃないかな。(要確認)
これらはローカル、リモート環境両方に入れる。

wp-cliはmacの場合はbrewで入れられる

brew install wp-cli

curlで実行ファイルダウンロードもできる

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

gitのバージョン上げる(centosの場合)

sudo yum remove git
sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
wget https://www.kernel.org/pub/software/scm/git/git-2.3.1.tar.gz
tar -zxf git-2.3.1.tar.gz
cd git-2.3.1
make prefix=/usr/local all
sudo make prefix=/usr/local install
git --version

wp-deployの初期設定

cd my/desired/directory
git clone --recursive https://github.com/Mixd/wp-deploy.git new-project
cd new-project
bash config/prepare.sh
git remote add origin <repo_url>

repo_urlはgithubとかbitbucketとかご自由に

wordpressの管理画面から日本語に更新するとgitのサブモジュールとして入れたwordpressディレクトリ配下のファイルが更新されてしまう。サブモジュールままだとその変更が反映されないのが嫌だったのでサブモジュールを無くして、gitリポジトリに全部含めるようにする。

git submodule deinit wordpress
git rm wordpress
git clone -b 4.0-branch https://github.com/WordPress/WordPress.git wordpress
rm -rf wordpress/.git

xmlrpcで更新する場合のxmlrpc.phpがgitignore設定されてるので除外しないように

vi .gitignore
-xmlrpc.php
+#xmlrpc.php
git add -A
git commit -m 'wordpressをリポジトリに含める'

deploy時の設定を書き換える

vi config/deploy.rb
config/deploy.rb
set :wp_user, "yourname" # The admin username
set :wp_email, "yourname@example.com" # The admin email address
set :wp_sitename, "WP Deploy" # The site title
set :wp_localurl, "http://wpdeploy" # Your local environment URL

set :application, "wp-deploy"
set :repo_url, "git@github.com:Mixd/wp-deploy.git"

staging、productionの設定

vi config/deploy/production.rb
vi config/deploy/staging.rb
config/deploy/production.rb
set :stage_url, "http://www.example.com"
server "XXX.XXX.XX.XXX", user: "SSHUSER", roles: %w{web app db}
set :deploy_to, "/deploy/to/path"
set :branch, "master"

database.ymlを環境によって書き換える

cp config/database.example.yml config/database.yml
vi config/database.yml
config/database.yml
staging:
  host: localhost
  database: db_name
  username: db_user
  password: 'db_pass'
production:
  host: localhost
  database: db_name
  username: db_user
  password: 'db_pass'
local:
  host: localhost
  database: db_name
  username: root
  password: 'root'

一通りの準備はここまで。

ローカル環境での表示確認

最初に書くと

bundle exec cap production wp:setup:local # productionと指定してるけどローカル環境のみに設定されます(!?)

の実行はタイミング間違えると地雷っぽいので最初にやらないように。作成してくれて便利っぽいんだけど、表示してくれるadminパスワードでログインできない(?)のでコマンド実行で作成されるwp-config.phpをブラウザ経由で作成するようにします。(ちゃんとしたやり方があるのだろうか)(バグっぽいので今後改修されるかもだけど)

ローカルで設定してしまえば、あとはdbの内容を本番に持って行ったりをして共有できるので、一度設定しちゃえば楽なんだけど。

ローカルで確認するために/etc/hostsを編集しローカルを見るドメインの設定、apache等で今まで作業していたリポジトリを見るように設定しておきます、あとwordpressが実行できるようにとか(要検索(書くの疲れた))

で、ここではhttp://wpdeployを設定したら今まで作業していたリポジトリを見にいくように設定したとします。現状のままアクセスすると真っ白な画面しか表示されないと思います。これはテーマが全くインストールされてない、読み込めてない状況なのでテーマ移動してやります。

bundle install
mv wordpress/wp-content/themes/twentyfourteen/ content/themes/

http://wpdeploy/wordpress/wp-login.phpにアクセス。

聞かれるがままに答えます。言語指定、wordpressのサイト名、ユーザーの設定、dbの指定等々(設定ファイルに書いた内容のまま)をします。管理画面が表示されればオッケー。
このままだとテーマの読み込みがwordpress/wp-content配下のを読むので、一旦削除してからwp-config.phpの作成

rm wordpress/wp-config.php
bundle exec cap production wp:setup:local # productionと指定してるけどローカル環境のみに設定されます(!?)

とりあえずこれでhttp://wpdeployにアクセスしてテーマが適応されたサイトが表示される。

git add -A
git commit -m 'テーマの設定'

日本語化、バージョンアップ

もう一度http://wpdeploy/wordpress/wp-login.phpにアクセス。ログアウトされてるのでブラウザ経由で設定したユーザー名、パスワードでログイン。

Dashboard -> Updates

Update NowUpdate Translations、Select AllをチェックしてからUpdate Themesをクリックで新しいものを入れる。
これで一通りが最新&日本語化が完了する。

git add -A
git commit -m 'wordpressの更新、日本語化'

ローカルはこんなもんです。一旦お疲れ様でした。

リモート環境へデプロイ

上記で説明していたbundlerwp-cligit --version 1.7以上(?)を入れておいて

git push # remoteリポジトリの最新を持ってくるのでpushしておく
bundle exec cap production wp:setup:remote
bundle exec cap production deploy
bundle exec cap production wp:set_permissions
bundle exec cap production db:push # ローカルの設定が反映、url等の置き換えは自動でしてくれるので便利

でオッケー。パスワードはローカルで設定したものでログインできる。capistranoの方言や(/path/to/deploy/currentにapache等のroot pathの変更等)、わかっていれば問題ないかな。config/database.ymlを適切に設定できていれば設定してくれる。php-fpmとか使ってるのならreloadの設定を追加したりする。

あとは便利そうなコマンド一覧。

bundle exec cap production db:push
bundle exec cap production db:pull
bundle exec cap production db:backup
bundle exec cap production uploads:pull
bundle exec cap production uploads:push

uploads:pullとかの画像系をローカルに持ってきたり、持って行ったりのタスクはsshポートが22にしか対応していないので、タスクの変更が必要になる。ポート変わってるだけでタスクの中身変えるの嫌だったのでプルリク送ったけど勘違いっぽいコメントつけられてプルリク閉じられたので悲しみ。
https://github.com/Mixd/wp-deploy/pull/59

継続して使う分には問題なく、最初だけ設定が複雑だけど後のコストはあんまりかからなそうなのでまぁこれでいいかなって感じです。

wp-cli

この設定してる時に初めてwp-cliを知って、設定してみたんだけどwp-deployの時はちょっと設定必要みたい。環境によるみたいだけど。

このissueにあるように、wp-config.phpWP_CONTENT_DIRの設定値を確認するのをお勧めします。
https://github.com/Mixd/wp-deploy/issues/3

自分は以下のように書き換えが必要でした

wp-config.php
  define('WP_CONTENT_DIR', realpath(dirname(__FILE__) . '/content'));
  // define('WP_CONTENT_DIR', realpath($_SERVER['DOCUMENT_ROOT'] . '/content'));

使ってみてだけど、日本語化ファイルの最新がちゃんと入らない(?)みたいで結局ブラウザからインストールしたりとかしてたので、あんまり使わないかなぁとは思う。capの内部で使ってはいるけど、それ以上はあんまり使い道は見つけられなかった。

総括

一回やれば便利っぽいけどとても面倒くさかったです。(私は使いますが)

68
68
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
68