WordMoveを使いたくてVCCW導入(Windows10/VirtualBox6/Vagrant)

本記事は次の記事を参考に実施した。
https://tonari-it.com/wordpress-local-environment/

環境
PC Lenovo ThinkPad X1Carbon2016
OS Windows10(64bit HomeEdition)
CPU i7-6600

vccwの設置ディレクトリ `D:/vccw`　ですすめた

#VirtualBox(5.x)のアンインストール
仮想PCをすべて解除してからwindowsのアプリ-アンインストールを使う。

#VirtualBox(6.04)のインストール
https://www.virtualbox.org/wiki/Downloads

デフォルト設定でインストールを進める。ネットワークについて警告が出るが無視して進める。
※VirtualBox5.xをアンインストール・再インストールするとネットワーク設定がPCに残っているせいでうまくいかないことがあるらしい。ネットワーク設定リセットすることになると言ってくれているので気にせず進む。
![2019-04-14_173723.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398557/6bc03dcc-9c5c-207a-f3e2-7e56ad3a326c.png)

#Vagrant(2.2.4)のインストール
https://www.vagrantup.com/
デフォルト設定でインストールを進める。

###vargrant-hostupdaterプラグインのインストール
VCCWとVargrantの連携にあたってhostsにへの設定を意識せずにすむものらしい。
コマンドプロンプトに
`vagrant plugin install vagrant-hostsupdater`

#VCCWのインストール
###VCCWをGithubからcloneする
任意のディレクトリに移動してgit cloneコマンド
`cd d:/vccw`
`git clone https://github.com/vccw-team/vccw.git`

###vccw/provision/default.yml、vccw直下にコピーし、site.ymlにリネーム
hostnameは任意に変更可能
ipは任意に変更可能
lang:jaに変更

#仮想マシンを起動
vccwディレクトリに移動して、vargrantコマンドを実行。
`vagrant up`

###vagrant up でエラーを吐いてうまくいかない
`vagrant up` 後に `vagrant status` で確認すると仮想マシンがないという結果に。
ログを見てみるとエラーを吐いていた。権限の問題か？
`C:/Users/xxxxxxxx/.vagrant.d/gems/2.4.4/gems/vagrant-hostsupdater-1.1.1.160/lib/vagrant-hostsupdater/HostsUpdater.rb:98:in 'initialize': Permission denied @ rb_sysopen - C:/WINDOWS/system32/drivers/etc/hosts (Errno::EACCES)`
コマンドプロンプトを管理者権限で開いて`vagrant up`再実行、いけた。

`vagrant status`
vccw.test                 running (virtualbox)

仮想マシンの停止は`vagrant halt`で。

#Poderosaのインストール
引用サイトではCygwinで解説されていますが筆者はPoderosaでSSH接続実績があったのでPoderosaで実施。
要はSSH接続できればなんでもよい、TeraTermでもOK。

Poderosaで公開鍵と秘密鍵作成と設定、以下サイト参照。
>エックスサーバーへのSSH接続方法(Poderosa)
>https://usedoor.jp/howto/digital/pc/poderosa-xserver-ssh-setsuzoku/

作成した鍵を/home/vagrant/.ssh/ 配下に配置して権限を600に変更（筆者はWinSCPでVagrant仮想サーバーに接続して配置しました)
![2019-08-06_122145.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398557/5f46cb77-6617-e348-9393-7d16c57c845d.jpeg)


####vagrantからエックスサーバーにssh接続できることを確認する
ssh [xserverユーザー名]@[xserverユーザー名].xsrv.jp -p 10022
ここで色々と詰まる、以下メモ。
`/home/vagrant/.ssh` に移動
公開鍵と秘密鍵の生成
公開鍵をxserverに設定
秘密鍵のパーミッションを0600に変更

###vagrant ssh でvagrant内にアクセス
`vagrant ssh`　/home/vagrant/に入る
`cd /vagrant/`　/home/vagrant/vagrant/に移動(vagrantの先頭スラッシュは必要)


####Movefile.ymlを編集する
WindowsのD:/vccw/Movefile.ymlを編集する。
参考までに筆者の設定ファイルを載せておく。

```ymd:Movefile.yml
global:
  sql_adapter: default

local:
  vhost: "http://vccw.test10"     # site.ymlのhostnameと合わせる
  wordpress_path: "/var/www/html" # use an absolute path here

  database:
    name: "wordpress"
    user: "wordpress"
    password: "wordpress"
    host: "localhost"
    charset: "utf8"

  # paths: # you can customize wordpress internal paths
  #   wp_config: "wp-config-custom.php"
  #   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"

production:
  vhost: "https://[xserver-wordpress-url]"
  wordpress_path: "/home/[xserver-username]/[xserver-domain]/public_html" # use an absolute path here

  database:
    name: "[xserver-mysql-name]"
    user: "[xserver-mysql-user]"
    password: "[xserver-mysql-password]"
    host: "[xserver-mysql-host]"
    # port: "3308" # Use just in case you have exotic server config
    mysqldump_options: "--max_allowed_packet=50MB" # Only available if using SSH

  exclude:
    - ".git/"
    - ".gitignore"
    - ".sass-cache/"
    - "bin/"
    - "tmp/*"
    - "Gemfile*"
    - "movefile.yml"
    - "wp-config.php"
    - "wp-content/*.sql"

  ssh:
    host: "[xserver-domain]"
    user: "[xserver-username]"
    port: 10022
    rsync_options: --verbose

```

####wordmove pullしてみる
`wordmove pull --all` Movefile.yml の設定内容に従い、本番環境からソースを取得してローカル環境に反映させる。
途中xserverとのssh接続するためのパスワードを5回ほど問われる、けっこう面倒だ。
D:\vccw\wordpress配下にソースが上書きされていることが確認できたらブラウザからアクセスしてみる。
`http://vccw.test10/` 接続確認OK

####databaseのpullが失敗している模様
ローカルwordpressにブラウザアクセスしてとりあえずテーマ情報などは同期されたものの、記事の内容が同期されていなかった。
もう一度databaseだけpullしてみる。
`wordmove pull -d`
`…
mysqldump: Got error: 2003: "Can't connect to MySQL server on 'mysql1106.xserver.jp' (111)" when trying to connect (Wordmove::ShellCommandError)`

vagrant内からxserverのmysqlへのssh接続ができないのかを怪しんで以下コマンドを実行するが、ちゃんとつながる
vagrant⇒xserverへSSH接続

xserver⇒mysqlへ接続
`[xserverユーザー名@sv1128 ~]$ mysql -h mysql1106.xserver.jp -u [mysqlユーザー名] -p [mysqlデータベース名]`
⇒パスワードを聞かれる[mysqlのパスワード]を入力
問題なくつながる！

無茶苦茶ハマった、port: "3308" の設定が邪魔だった。
xserverでのmysqlデフォルト設定の場合はport設定をコメントアウトすること。

####wordmove pushしてみる
`wordmove push --all` 
ローカル環境のwordpressで記事編集したり画像ファイルをアップロードしたり色々してから`--all`してみたけど問題なくきれいにxserver環境に反映されて感動した。
すごくはまって時間もかかったけど報われた感がつよい。

## はまった点
vagrant up でエラーが出た
⇒筆者はGitBushを使っていたが、管理者権限でコンソールを立ち上げてからvagrant up すると解決

vagrant仮想サーバーへの秘密鍵の配置の仕方がわからなかった
⇒苦し紛れにWinSCPで接続して配置した

wordmoveをどこから実行したらいいかわからなかった。
⇒vagrantにssh接続
`[D:\vccw]$ vagrant ssh`
⇒[home/vagrant/vagrant]に移動してwordmove pull --all
`[home/vagrant]$ cd /vagrant` 
`[home/vagrant/vagrant]$ wordmove pull --all`

vagrantからxserverにssh接続できない
⇒[home/vagrant/.ssh]$ ssh鍵作成（他サイト参照）

wordpressのdatabaseのpullができない
⇒Movefile.ymlのproduction - database - port:3308 が不要だった。