【Conoha】WordMoveでローカル環境と本番環境を同期してみたぞいっ【VVV】

こんにちは、Reoです。

今回は、WordMoveを使ってローカル環境から本番環境(ConohaのVPS)にデプロイしてみました記事です。

 

してみましたと言っていますが、実はまだしていません(!)

今からやりながらついでに記事も書いちゃおうという画策です。

 

今回の前提

vagrant環境(VVV)で作ったWordPressサイトを、WordMoveを用いて、ConohaのVPS(KUSANAGI)に同期することが今回の目標です。

 

大枠は以前書いた記事「VVV+WordMoveでWordPressのローカル環境を構築するぞッ!【Xserver】」の通りなのですが、今回は本番環境がXserverではなく、Conohaになります。

なので今回の前提は

です。

ConohaもVPSを使うのもKUSANAGIを使うのも初めてなのですが、頑張ってやっていこうと思います。

 

普段はXserverを使っているので、レンタルサーバーとVPSってこんなに違うんやと驚いているところですよ・・・。

ConohaでのKUSANAGIの使い方は公式を見るのが一番わかりやすかったです。

  1. KUSANAGIの使い方|VPSならConoHa
  2. KUSANAGIの初期設定 – KUSANAGI

 

SSH接続できるようにしよう

ここまで来るのに5時間はかかった。つらい。もう記事どころじゃなかった。

SSH接続できるようにしようと思ったところ、ConohaのVPSの初期設定はどこからでも接続できるゆるふわ設定になってました。公開鍵等々の作業を全部したところで、公開鍵なしだと接続できないはずだとやってみたら接続できてしまい、そこの設定からやっていました。

vagrantの方のsshが鍵でできなくなり、パスワードを求められ、パスワードがわからず頭を抱え・・・。とてもつらかった・・・。

 

それはともかく本題ですが、

ConoHaでVPSを借りて、SSH接続などの初期設定 – tkm_71のブログ

ローカル(Mac)と書かれている部分での作業を、vagrant内でやればおkです。

 

以下の記事と合わせてやればなんとかなるはずです。

ConohaにVPSを設置して、SSHログイン、ポート番号変更、rootログイン禁止までを30分で!

 

最初後者の記事見てやってたんですけど、あれですね、コピーするの秘密鍵と公開鍵で間違えてたんですねえorz ナルホド上手くいかないわけだ・・・。

一度設定を全部戻して前者の記事で1からやったら上手くいったので、下手しなければそこまでハマらないはず・・・。

 

Movefileを用意する

やっと本題の本題に入れました。

vagrant sshで接続した状態で、

gem install wordmove

rubyのバージョンが低くて無理だよって言われた場合は、

CentOS 7.3にRuby 2.4.1をインストールする

を参考にアップデートしてください。自分は2.5.1にupdateしました。

yumがなかったらapt-get install yumでインストールしてからRubyのインストールをしてください。

 

インストールできたら

cd /srv/www/同期したいフォルダ/htdocs

に移動し、

wordmove init

をします。

movefile.ymlが生成されればおk。

movefile.ymlを編集していきます。

vi movefile.yml

以前の記事同様、VVVで製作中のhttp://damp.testを同期するというファイルは以下のようのようになります。

global:
  sql_adapter: default

local:
  vhost: http://damp.test  # ローカルのアドレス ①
  wordpress_path: /srv/www/damp/htdocs # use an absolute path here

  database:
    name: damp
    user: wp
    password: "wp" # could be blank, so always use quotes around
    host: localhost

production:
  vhost: http://uruly.xyz/damp  # 実際に運用中のサイトURL ②
  wordpress_path: /home/kusanagi/プロファイル名/DocumentRoot # WordPressのpath ③

  database:
    name: データベース名 # ④
    user: データベースのユーザ名   # ⑤
    password: データベースのパスワード  #⑥
    host: VPSのIPアドレス  #⑦


  ssh:
    host: VPSのIPアドレス  # ⑧
    user: ユーザ(root以外を作成したやつ)  # ⑨
  #   password: password # password is optional, will use public keys if available.
    port: 10022 # Port is optional
    rsync_options: '--verbose --rsync-path="sudo /usr/bin/rsync"'

①vvで作成した際のhosts:部分
②実際に運用中のサイト(同期したいサイトのURL)
③②の配置されている場所。kusanagiのプロビジョン設定をした際に指定したプロファイル名下のドキュメントルート
④kusanagiプロビジョン時に設定したデータベース名
⑤kusanagiプロビジョン時に設定したデータベースのユーザ名
⑥データベースのパスワード
⑦VPSのIPアドレス
⑧VPSのIPアドレス
⑨前段階でSSH接続できるようにしたユーザ名

 

大事なのがrsync_optionsのところです。–rsync-pathの設定が必要です。

この状態で

wordmove push -e production -t

としてみると

sudo: no tty present and no askpass program specified

とかいうエラーが出ます。 むしろこれが出ていれば今はおkで。

 

–rsync-pathの設定がないときは

rsync: [sender] write error: Broken pipe (32)
rsync error: error in rsync protocol data stream (code 12) at io.c(837)

と言ったエラーとともにPermission deniedが大量に出ます。

 

そもそもパスフレーズを打つ画面にもならない場合は鍵の設定までが上手くいってないのだと思います。ssh ユーザ名@IPアドレス -p ポート番号 でそもそも接続できるのか等のチェックをしてください。

ここもかなりハマった。以下の記事で助かりました。ありがとうございます。
さくらVPS の契約を追加して rsync でまるっと移行してみた – HAM MEDIA MEMO
rsync でまるっと移行してみたと思ったらまるっと移行できていなかったので対応を加えた(特定のコマンドだけtty無しのsudoを許可する方法) – HAM MEDIA MEMO

 

パーミッションエラーを回避

ttyがなくてsudoが実行できないよ的なエラーが出ている段階まできたら、あと一歩です。

 

Conoha側でログインします。

cd /etc/
vi sudoers

でsudoresというものを編集します。
56行目あたりにあるDefalutsの下に1文足します。

Defaults    requiretty
Defaults!/usr/bin/rsync    !requiretty

さらに下の方にある、%wheeの下にも1文足します。

%wheel  ALL=(ALL)   ALL
%wheel  ALL=(ALL)   ALL, (root) NOPASSWD: /usr/bin/rsync

これで保存しておk。

最後にvagrant側に戻って改めて

wordmove push -e production --t

をすればいけるはずです!!!!!!!!

 

DBだけエラーが出る場合は続きの記事を書きましたので是非に〜

WordMoveでDBのみ同期できない時の対処法メモ。

 

丸一日かかった。。。。

最初に実際にやりながら記事を書くと言いましたが、この記事を書き始めたのが昨日の朝9時くらいで、今13時にようやく本番環境との同期をすることができました。

いやーーーーね。夜はしっかり寝ましたけど。昨日一日中戦ってたんですよ。

 

実のところ、vagrant環境が2度ほど死にました。

最初は秘密鍵か公開鍵がどっかにいってしまいログインできなくなり、vagrant sshしてパスワードを求められるもパスワードって何?!知らない!!!やばい!!!ってなりまして。vagrantのパスワード自体は「vagrant」である可能性が高いので、すぐにログイン自体はできたんですけどね。

それで、公開鍵をどうの秘密鍵をどうのして、vagrant destroyしたら色々全部の設定があぼーんしたわけです。いや、このくらいは実際大したことなかった。

 

2度目の破壊がやばくてですね。vagrantに接続したらアップグレードしてよと書いてあって、それを迂闊に’do-release-upgrade’したら、全部の環境が死んでvagrant upも何もできなくなってしまいました。

いやーもうちょっと下調べして望むべきでした。本当に迂闊だった。

結局それはvertualBox自体の再インストールからやり直して、また最初からyumのインストールしてrubyのアップデートしてwordmoveをインストールして・・・。

鍵も消えたので公開鍵と秘密鍵の生成も最初からして・・・。

 

あまりに酷い行程だったので、記事自体を書くのも公開も何度やめようと思ったことか。

ただ、結局この記事の内容を上から順に4周ぐらいしたんです。鍵のところはもっとしたかもしれない。

何度も最初からやらなきゃいけなくなったので、この記事内容を上からやっていくことで、一度成功したところで行き詰まることも、あれってどうするんだっけ、どこみたんだっけってことがほとんどありませんでした。

なので書いててよかったです。備忘録にしても酷い記事な気もするけど。せっかく最後までいけたので公開もしていきます。

 

 

ただ、ちょっとDBのhostだけわからない。。。。wordmoveでも最後にエラーが出てるんですが、実際に見にいってみるとどこが失敗してるかわからない程度にはちゃんと同期ができているんですよね。

わかり次第追記させていただきます。

修正、追記しておきました。普通にdb同期できてませんでした。別記事で書きました。WordMoveでDBのみ同期できない時の対処法メモ。

 

ConohaのVPSとは上手くいくようになりましたが、自分のXserverの方が死んだままなので時間あるときに直さねばです。まだまだ戦いは終わらない・・・。

ではでは、何か参考になることがあれば嬉しいです。

WordPress

Comments...

コメントは認証制です。詳しくは下記の注意をお読みください。お気軽にコメントお願いします!

Write a Comment

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

Related Memo...

WordPressで現在のカテゴリから親カテゴリ/祖先カテゴリのスラッグを取得

//現在のカテゴリを取得
$categories = get_the_category($post->ID);
$category_slugs = array();
foreach($categories as $category){
    $cat = $category;
    array_push($category_slugs,$cat->slug);
    //親のカテゴリがなくなるまで回す
    while ($cat->parent) {
        $cat_parent_id = $cat->parent;
        $cat = get_category($cat_parent_id);
        array_push($category_slugs,$cat->slug);
    }
}

わりと頑張ってPHP書いてる。

WordPress

【WordPress】プラグイン化したカスタム投稿をテーマ内で使うとき

通常テーマ内でカスタム投稿を表示させる時に

$args = array( "posts_per_page" => 5,
        "post_type" => 'news'
    );
$the_query = new WP_Query( $args );
if($posts):

と書けば表示されるのに、プラグイン化していたので表示されなかった話。

 

functions.phpでカスタム投稿を追加している場合は必要ないが、newsというカスタム投稿をプラグイン化していたので、以下の記述が必要でした。

    public function __construct() {
        add_action( 'pre_get_posts', array($this, 'add_my_post_types_to_query') );
    }

    // queryにnewsをセットする
    function add_my_post_types_to_query( $query ) {
        if ( is_home() && $query->is_main_query() )
            $query->set( 'post_type', array( 'post', 'page', 'news' ) );
        return $query;
    }

WordPressプラグインの作り方は、また後日ちゃんとした記事にしたいと思ってます。今回はとりあえず忘れそうなのでメモだけで失礼。

WordPress

【WordPress】メディアライブラリ の画像IDを取得する

WordPressのメディアライブラリ にアップロードされた画像IDを取得する方法です。

例えば6件取得してギャラリーで表示するとき。

$ids = get_posts( 
    array(
        'post_type'      => 'attachment', 
        'post_mime_type' => 'image', 
        'post_status'    => 'inherit', 
        'posts_per_page' => 6,
        'fields'         => 'ids',
    ) 
);

$ids_str = '';
foreach ( $ids as $id ) {
    $ids_str .= $id . ',';
}

$ids_str = rtrim($ids_str, ',');

// ショートコードでギャラリーを表示
echo do_shortcode( '[gallery ids="' . $ids .'"]' );

意外と便利なのでは!

 

WordPress
more