こんにちは、トーマ(@toma_tokyoboy)です!
前回の記事ではvccwを使っていくための準備をしていきました。
-
Vccw&Wordmoveでローカルとmixhostを同期!超快適なwordpress開発環境(前編)
続きを見る
いよいよローカル環境とMixhost(ミックスホスト)を同期させていきます。
当サイトの開発環境
アプリケーションやOSのバージョンが違うことによって、この記事通り開発環境構築しても予期せぬエラーが出る可能性があります。
参考に僕が開発した環境を載せておくので、うまくいかない人はできるだけバージョンを合わせてみてください。
- MAC OS Sierra 10.12.4
- Virtualbox 5.1.2
- Vagrant 1.9.4
- Vccw 3.18.0
仮想環境からサーバーにアクセスするための設定
ここからは、仮想環境から本番環境にアクセスするための設定をしていきます。
今回ご説明するのは、mixhostにアクセスするためのやり方です。
本番環境へのアクセスはSSH接続で行うので、そのための設定をしていきます。
公開鍵、秘密鍵を作成
ターミナルで以下のコマンドを打つと、公開鍵と秘密鍵が作成されます。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/ユーザー名/.ssh/id_rsa): #enterキーを押します
Enter passphrase (empty for no passphrase): #お好きなパスワードを入力
Enter same passphrase again: #パスワード再入力
作成されたファイルは以下の2点
- /Users/ユーザー名/.ssh/id_rsa(秘密鍵)
- /Users/ユーザー名/.ssh/id_rsa.pub(公開鍵)
※.sshフォルダは不可視ファイルなので、Finderで確認したい方は不可視ファイルが見れるように設定してください。
Macの隠しファイルや隠しフォルダを表示する裏技 / Inforati
公開鍵の権限変更
自分以外が公開鍵を読み書きできないように権限を変更します。
$ chmod 600 ~/.ssh/id_rsa.pub
mixhostに公開鍵を登録
mixhostの管理画面(Cpanel)にアクセスします。
「SSH アクセス」をクリック
SSHキーの管理」をクリック
「キーのインポート」をクリック
公開鍵の中身は、ターミナルで以下のコマンドを打つと表示されるので、それを全コピーして貼り付けてください。
$ cat ~/.ssh/id_rsa.pub
各種情報を入力してインポート
管理をクリック
Authorizeをクリック
認証ステータスがAuthorizeになっていたらOK
ssh-agentに秘密鍵を登録
$ ssh-add -K ~/.ssh/id_rsa
-Kオプションで、Macのキーチェーンに情報を保存しておかないと、MACを再起動した際にエラーが出るようです。
最初この作業をやっていなかったので、データベース移行時、以下のエラーが出てきて同期できないことがありました。
▬▬ ✓ Pushing Database ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
remote | mysqldump --host=localhost --user=◯◯◯◯◯◯◯◯ --password=◯◯◯◯◯◯◯◯ --default-character-set=utf8 --result-file="/home/◯◯◯◯/public_html/◯◯◯◯◯◯◯◯◯◯◯◯/wp-content/dump.sql" ◯◯◯◯◯◯◯◯
/home/vagrant/.gem/ruby/2.3.0/gems/net-ssh-3.2.0/lib/net/ssh.rb:249:in `start': Authentication failed for user ◯◯◯◯@jp◯.mixhost.jp (Net::SSH::AuthenticationFailed)
from /home/vagrant/.gem/ruby/2.3.0/gems/photocopier-1.1.1/lib/photocopier/ssh.rb:70:in `session'
from /home/vagrant/.gem/ruby/2.3.0/gems/photocopier-1.1.1/lib/photocopier/ssh.rb:43:in `exec!'
from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/deployer/ssh.rb:56:in `remote_run'
from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/deployer/ssh.rb:67:in `download_remote_db'
from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/deployer/ssh.rb:18:in `push_db'
from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/cli.rb:86:in `block in push'
from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/cli.rb:37:in `block in handle_options'
from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/cli.rb:36:in `each'
from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/cli.rb:36:in `handle_options'
from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/lib/wordmove/cli.rb:85:in `push'
from /home/vagrant/.gem/ruby/2.3.0/gems/thor-0.19.4/lib/thor/command.rb:27:in `run'
from /home/vagrant/.gem/ruby/2.3.0/gems/thor-0.19.4/lib/thor/invocation.rb:126:in `invoke_command'
from /home/vagrant/.gem/ruby/2.3.0/gems/thor-0.19.4/lib/thor.rb:369:in `dispatch'
from /home/vagrant/.gem/ruby/2.3.0/gems/thor-0.19.4/lib/thor/base.rb:444:in `start'
from /home/vagrant/.gem/ruby/2.3.0/gems/wordmove-2.0.0/exe/wordmove:6:in `'
from /home/vagrant/.gem/ruby/2.3.0/bin/wordmove:23:in `load'
from /home/vagrant/.gem/ruby/2.3.0/bin/wordmove:23:in `
開発環境にアクセス
準備が整ったので、仮想環境を構築していきます。
ターミナルでデスクトップに置いたvccwフォルダに移動します。
$ cd Desktop/vccw
アクセス
仮想環境内にアクセスします。
$ vagrant ssh
でアクセスできます。
仮想環境から出たい場合は、
$ exit
と入力してあげればOK。
movefileを作る
Movefileは、レンタルサーバーとローカルを同期するための情報を管理するファイルです。
普通はvagrant up時に自動で生成されるらしいんですが、僕が使ったバージョンではなぜかmovefileが作成されなかったので、手動で作成していきます。
※「movefile」もしくは「Movefile.yml」がすでに作成されていた場合、この工程は無視して大丈夫です。
vagrant sshで仮想環境に入ったら、/vagrantディレクトリに移動します。
cd /vagrant
このディレクトリで、Movefileを作ります。
wordmove init
create Movefile
フォルダを見たら、Movefileが作成されているのが確認できます。
このMovefileをテキストエディタで開き、編集していきます。
【エラー例】 wordmoveがないといわれる
vccwにはwordmoveが同梱してあるはずなんですが、なぜか「wordmoveがないよ」というエラーが出ます。
wordmove init
wordmove: command not found
vccwにはruby2.3が同梱してあるので、rubyバージョンに対応したwordmoveをインストール
gem install wordmove -v 2.0.0
インストールが完了したらwordmoveコマンドを実行できるので、再びmovefileを作成
wordmove init
create Movefile
movefileを編集
ロカールのvccwフォルダを見てみましょう。
wordmoveファイルができているので、こちらをテキストエディタで開き、編集していきます。
編集前はこうなってます。
local:
vhost: "http://vhost.local"
wordpress_path: "/vagrant" # use an absolute path here
database:
name: "database_name"
user: "user"
password: "password"
host: "127.0.0.1"
production:
vhost: "http://example.com"
wordpress_path: "/var/www/your_site" # use an absolute path here
database:
name: "database_name"
user: "user"
password: "password"
host: "host"
# port: "3308" # Use just in case you have exotic server config
# mysqldump_options: "--max_allowed_packet=1G" # Only available if using SSH
exclude:
- ".git/"
- ".gitignore"
- ".sass-cache/"
- "node_modules/"
- "bin/"
- "tmp/*"
- "Gemfile*"
- "Movefile"
- "wp-config.php"
- "wp-content/*.sql"
# paths: # you can customize wordpress internal paths
# wp_content: "wp-content"
# uploads: "wp-content/uploads"
# plugins: "wp-content/plugins"
# mu_plugins: "wp-content/mu-plugins"
# themes: "wp-content/themes"
# languages: "wp-content/languages"
# ssh:
# host: "host"
# user: "user"
# password: "password" # password is optional, will use public keys if available.
# port: 22 # Port is optional
# rsync_options: "--verbose" # Additional rsync options, optional
# gateway: # Gateway is optional
# host: "host"
# user: "user"
# password: "password" # password is optional, will use public keys if available.
# ftp:
# user: "user"
# password: "password"
# host: "host"
# passive: true
# scheme: "ftps" # default "ftp"
# staging: # multiple environments can be specified
# [...]
以下は僕が編集したmovefileです、参考にしてください。追加、変更している行をハイライト表示しています。
local:
vhost: "http://example.com"
wordpress_path: "/home/bwrmflbd/public_html/tokyoboy.me" # use an absolute path here
database:
name: "wordpress"
user: "wordpress"
password: "wordpress"
host: "localhost"
charset: "utf8"
production:
vhost: "https://tokyoboy.me" # 末尾に/をつけない
wordpress_path: "/home/mixhostユーザー名/public_html/ドメイン名" # use an absolute path here
database:
name: "データベース名" # 本番環境のwp-config.phpを参照
user: "データベースユーザー名"
password: "データベースパスワード"
host: "localhost"
charset: "utf8"
exclude:
- ".git/"
- ".gitignore"
- ".sass-cache/"
- "node_modules/"
- "bin/"
- "tmp/*"
- "Gemfile*"
- "Movefile"
- "wp-config.php"
- "wp-content/*.sql"
- ".htaccess" # .htaccessを同期させない
ssh:
host: "jp◯.mixhost.jp"
user: "mixhostユーザー名"
port: 22 # Port is optional
rsync_options: "--verbose" # Additional rsync options, optional
local:
vhost: "http://example.com"
wordpress_path: "/home/bwrmflbd/public_html/tokyoboy.me" # use an absolute path here
database:
name: "wordpress"
user: "wordpress"
password: "wordpress"
host: "localhost"
charset: "utf8"
vhostは、site.ymlで入力したhostnameと合わせます。
wordpress_pathがデフォルトのままだと、vccwのトップディレクトリにwordpressがインストールされてしまうので、書き換えます。
databaseはそのままコピペしてください。
local:
production:
vhost: "https://tokyoboy.me" # 末尾に/をつけない
wordpress_path: "/home/mixhostユーザー名/public_html/ドメイン名" # use an absolute path here
vhostは本番環境のURLを入力しますが、末尾に"/"をつけるとエラーになるので注意してください。
wordpressパスはmixhostの場合、「/home/mixhostユーザー名/public_html/ドメイン名」になります。FTPクライアントなどでパスを確認すると確実です。
database:
name: "データベース名"
user: "データベースユーザー名"
password: "データベースパスワード"
host: "localhost"
charset: "utf8"
データベースは、本番環境にあるwp-config.phpに記載されているので、そちらを参考にしてください。
exclude:
- ".git/"
- ".gitignore"
- ".sass-cache/"
- "node_modules/"
- "bin/"
- "tmp/*"
- "Gemfile*"
- "Movefile"
- "wp-config.php"
- "wp-content/*.sql"
- ".htaccess" # .htaccessを同期させない
eccludeは同期させたくないファイルを記載します。ここでは.htaccessを追加しています。
ssh:
host: "jp◯.mixhost.jp"
user: "mixhostユーザー名"
port: 22 # Port is optional
rsync_options: "--verbose" # Additional rsync options, optional
コメントアウト(# )を消して内容を書き換えます。不要な部分は削除しました。
注意してほしいのはhostの部分です。
ここはftpホスト名(◯◯◯◯.mixh.jp)ではなく、ftpsホスト名(jp◯.mixhost.jp)です。
間違いやすいので注意してください。
mixhostのportは22です。
ftpsホスト名、ユーザー名などは、mixhost契約時のメールに記載されているのでそちらを参考にしてください。
インデントに注意
最初に作られる雛形ファイルのスペースなどはキープし、テキストのみ正確に編集していきましょう。
movefileの作成が終わったら、ローカルと本番環境を同期できるようになります。
wordmoveで本番環境とローカルを同期
wordmoveを使って、ローカルと本番環境を同期していきます。
本番環境からローカルへデータ移行
wordmove pull -—all
と入力します。ハイフンは2つ必要なので注意!
移行中に途中で止まって、
Are you sure you want to continue connecting (yes/no)?
と行った表示が出てきたら、ターミナルにyesと打ち込んでenterキーを押してください。
エラーが出ず全てpullできたら、ローカル環境のURLをブラウザで開くと、本番環境と完全に同期できてます。
ローカルから本番環境へデータ移行
ローカルのデータを本番環境にアップするときはpushを使います。
wordmove push —-all
pushとpullは絶対に間違えないように最新の注意を払ってください。pull --allする前に、pushで本番環境のファイルとデータベースが上書きされてしまうと全てのデータが消えてしまいます。
pull
本番環境 → ローカル環境
push
ローカル環境 → 本番環境
オプションでファイルごとの同期も可能
wordmoveのオプションをつけることにより、特定のファイル、データベースだけを同期することがができます。all以外のオプションはハイフンは1つです。
$ wordmove pull --all # 全て同期
$ wordmove pull -w # wordpressソースのみ
$ wordmove pull -d # データベースのみ
$ wordmove pull -t # テーマファイルのみ
$ wordmove pull -p # プラグインのみ
$ wordmove pull -u # アップデートファイルのみ(写真など)
$ wordmove pull -l # 言語ファイルのみ
$ wordmove pull -c # wp-config.phpを同期
【エラー例】データベース接続エラー
データベース同期時に下記のようなエラーが出ることがあります。
Unknown collation: 'utf8mb4_unicode_520_ci'_
mixhostとvccwのmysqlのバージョン違いによりこのエラーが起きます。
vccwのversion2を使うとこのエラーが出ることが確認できたので、version3のvccwを使ってください。
僕が使った使用環境は冒頭に記載しているので、そちらを参考にしてください。
ローカルサーバーにアクセス
全て同期できたらローカルサーバーにアクセスしてみましょう。
site.ymlで設定したhostname、もしくはipをブラウザで開いてみます。今回の例だと、「example.com」もしくは「192.168.33.22」です。
本番環境と同じようにサイトが表示されていたらOKです。
管理画面にログイン
http://exapmple.com/wp-login.php
で管理画面にも入れるか確認します。
ログイン時のユーザー名、パスワードは本番環境と同じものを入力すればOKです。
【エラー例】 画像認証で管理画面にログインできない場合
ローカル環境でwordpressにログインした際、ログイン画面に画像認証が出るプラグインを入れていたのですが、画像パスが通っておらずキャプチャが出てこなかったです。
このままではにっちもさっちもいかないので、調べてみると以下の2点のプラグインが影響してました。
- si-captcha-for-wordpress
- siteguard
本番環境でプラグインを停止するか、ログイン画面の画像認証を一旦無効にして、再度本番環境からpullしてあげれば解決しました。
これらのセキュリティプラグインは、ログインURLをランダムで変更する機能もあります。その機能を利用している場合も、一旦無効にする必要があります。
あとがき
長くなってしまいましたが、一度慣れてしまえばMAMPより簡単にローカル環境を構築できます。
もしエラーが出る場合は、どこか工程が抜けているか間違っている可能性があるので、もう一度記事を隅々までチェックしてみてください。
それでも解決しない場合は、エラー分をそのままコピーしてgoogle検索すると解決策が見つかるかもしれません。
とにかく一度環境を作ってしまうとその後の作業効率が大幅に上がるので、ぜひ試してみてください!