今日はVirtualBox、Vagrant、VCCWで作ったローカルワードプレスを本番ワードプレスにコマンド1つでアップロードしてしまいます。と言うかアップロードもできるし本番をローカルにコピーすることもできます。すばらしい…ちなみに、前回の環境開発の記事はこちらから。

WordMove

こちらWordMove自体はVCCWとは別でこれ単体でも使うことができるのですが、Local by Flyweelで使ってみたのですがエラーだったので諦めてVCCWで使ってます。

VCCWのWordMove

ここにあります。最初の、vagrant upした後に現れます。

Movefile.yml

global:
  sql_adapter: default

local:
  vhost: "vccw.lo"
  wordpress_path: "rootからワードプレスのパス"
  # デフォルトでは"/var/www/html"ですが、変更必須
  # VCCW /vagrant/wordpress の場合が多い

  #ここは自動で作成されるため変更必要無し
database:
  name: "wordpress"
  user: "wordpress"
  password: "wordpress"
  host: "localhost"
  charset: "utf8"

production:
  vhost: "本番環境のドメイン"
  wordpress_path: "Wordpressディレクトリへのパス"
  # パスを書くパターンとしてわかる範囲で2つあるので、下記で説明してます

  database:
    name: "データベース名"
    user: "ユーザー名"
    password: "パスワード"
    host: "ホスト"

    # ここも消して問題なし
    port: "3308" # サーバーの内容に合わせる
    # ftpの場合は入力不要
    mysqldump_options: "--max_allowed_packet=50MB" # SSHでのみ有効

  exclude:
    - ".git/"
    - ".gitignore"
    - ".sass-cache/"
    - "bin/"
    - "tmp/*"
    - "Gemfile*"
    - "movefile.yml"
    - "wp-config.php"
    - "wp-content/*.sql"
    # npmでgulpとか使ってるならnode module消したほうがいいかも
    - "node_modules/"

# 今回はsshじゃなくてftpなのでコメントアウトしてください
  # ssh:
  #   host: "SSHホスト"
  #   user: "ユーザー名"
  #   port: 22 # オプショナル
  #   rsync_options: "--verbose" # オプショナル

  # 代わりにftp
    ftp:
    user: "ユーザー名"
    password: "パスワード"
    host: "ホストIP番号0.99.1とかそういうの"
    passive: true
    scheme: "ftp"

ローカルのwordpress_path調べ方

global:
  sql_adapter: default

local:
  vhost: "vccw.lo"
  wordpress_path: "rootからワードプレスのパス"
  # デフォルトでは"/var/www/html"ですが、変更必須
cd ./test

cdでvccwで作ったディレクトリに行く。

vagrant ssh
sudo su -

vagrant sshで接続して、ルート権限になります。

root@test:~ ls
bin   etc             lib         media  proc  sbin  sys  vagrant
boot  home            lib64       mnt    root  snap  tmp  var
dev   initrd.img.old  lost+found  opt    run   srv   usr  vmlinuz.old

lsすると上記のようなファイルたちが出てきます。

root@test:~ cd /vagrant
#vagrantにcd

root@test:/vagrant

#lsをすると下記のファイルが出てきます
root@test:/vagrant ls
ansible.cfg  Movefile.yml  README.md  Vagrantfile  wp-cli
LICENSE      provision     site.yml   wordpress    wp-cli.yml

root@test:/vagrant/ cd /wordpress
#wordpressにcd
root@test:/vagrant/wordpress
#ここでpwd
root@test:/vagrant/wordpress pwd
/vagrant/wordpress

cdでvagrantに入ってlsをするとwordpressがあります。さらにこれにcdしてwordpressに入ってここでpwdします。すると/vagrant/wordpress と出てきますがこれがローカルの wordpress_path に書き込むべきパスになります。VCCWだと大体これです。

FTPに対応させる

LFTPをダウンロード

root@test:/vagrant/wordpress exit

パスを取得した後、一旦ルートから外れます。

sudo su -

再度、ルート権限になります。

root@test:~ apt-get install -y lftp

#その後に一応バージョンチェック
lftp -v

.lftprcを作成する

#rootになったばかりの状態で
root@test:~ pwd
/root
root@test:~ cd ../

#rootの上階層に行く
root@test:/ ls
bin   etc             lib         media  proc  sbin  sys  vagrant
boot  home            lib64       mnt    root  snap  tmp  var
dev   initrd.img.old  lost+found  opt    run   srv   usr  vmlinuz.old

#cdで home/vagrant/ へ移動
root@test:/ cd /home/vagrant/

#そこでlftprcをviで作成する
root@test:/home/vagrant vi .lftprc

sshでつないで、ルート権限にしたあとcdで上層階に行き再びcdで /home/vagrant/ へ行く。

Vimでlftprc作成

エディターが開くので下記のコードをコピペ。

set ftp:ssl-auth TLS
set ftp:ssl-force true
set ftp:ssl-allow yes
set ftp:ssl-protect-list yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-fxp yes
set ssl:verify-certificate no

esc => :(コロン) => w => q をタイプしてエンターを押して保存する。

ls -al

ls -alをするとカレントディレクトリの隠れファイルのリストを見ることができるので存在を確認する。

Production vhostのパスの書き方

なかなかこの書き方にも癖があり成功するのにめちゃくちゃ時間かかりました。

production:
  vhost: "http://sample.com/wpfile"
  wordpress_path: "/public_html/wpfile"

  # サーバーの直下にpublic_htmlがある場合の書き方
  # vhost: "http://sample.com/wpfile"
  # wordpress_path: "/public_html/wpfile"

  # ドメインの設定などの関係でドメインの直下にワードプレスファイルがある場合
  # vhost: "http://test.com/wpfile"
  # wordpress_path: "/wpfile"

ワードプレスが位置するディレクトリが、

http://sample.com/public_html/wpディレクトリ名

の場合は “/public_html/sample” と記載。

ドメイン設定などをしておりpublic_htmlが無く直下で

http://sample.com/そのディレクトリ

の場合は “/wpディレクトリ名 “だけを記載する。

しかし、なぜかvhost側にも同じ用に絶対パスを記載しないとエラーになるため上記のような形になる。ただその場合はpublic_htmlの記載はしない。

Production Databaseの書き方

  database:
    name: "データベース名"
    user: "ユーザー名"
    password: "パスワード"
    host: "ホスト"

これは簡単ですが、vccwの中のワードプレスディレクトリ内のwp-config.phpを開いてデータベース情報をコピペしてください。

Production ftpの書き方

    ftp:
    user: "ユーザー名"
    password: "パスワード"
    host: "ホストIP番号0.99.1とかそういうの"
    passive: true
    scheme: "ftp"

最後にftpの書き方ですが、こちらもシンプルにいつもfptアプリでやってるようにftpのuser名とパスワードを入力して、hostに関してはレンタルサーバーで見れるホストID的なやつを入力してください。passiveはftpを有効にするということなので忘れずに。

Wordmoveを使い倒す

とりあえず今ターミナル開きっぱなしだったらexitする、もしくは閉じて再度開いてください。

そして先程の仮想環境があるディレクトリに移動。今回だと下の

cd /test
vagrant ssh
cd /vagrant

ここからwordmoveが使えます。pullと言って本番環境で出来てる物をローカルに反映させることもできますが、主にpushを使うことが多いだろうと想定して今回はpushをリストにしてます。pullを使う時は誰かにデータ入力させてそれを本番環境からローカルに引き取る時にwordmove pull -d とかすると便利そうです。

すべてpushする

wordmove push --all

ワードプレス一式をpush

wordmove push -w

テーマをpush

wordmove push -t

データベースをpush

wordmove push -d

メディアをpush

wordmove push -u

データベース関連のエラーたち

いろいろ多いですが、データベースだけ反映されないエラーがめちゃくちゃ多いです。

.htaccess

とりあえずアップする時に、本番環境側の.htaccessをバックアップして消しておいてください。なにかしらエラーを起こします。

$table_prefix

wp-config.phpの$table_prefixがローカルと本番で違うと更新されないので同じprefixにする。デフォルトですが下のような感じに。

$table_prefix = 'wp_';

JSONのエラー、もしくはデータベースを上書きできない

反映されない、ページをクリックしても表示されない、もしくは投稿しようとしたらThe response is not a valid JSON responseなどエディターで予期しないエラーが発生しましたがとかいろいろ怒られる場合、とりあえずpushされる側のデータベースをリセットしてみましょう。

リセットプラグイン

ではでは、ワードプレス開発ライフをお楽しみに。

SeeYaaaa!!!