いくつものサイトを作ったとしても、基本的なプラグインのセットは同じだったりすると思うのですよ。一人で複数のWordPressサイトを作ろうとした時、初めの設定に時間がかかる気がします。同じ組み合わせのプラグインをインストールして、設定をぽちぽちいじって、ということをしようとすると、心が折れます。雛形をつくっておいてコピーできればいいんだけどな、とは誰もが思うことでしょう。
また、もう少し凝った話として、ポート8080でテスト用のWordPressサイトを立ち上げて、そこで記事を更新したりテーマをいじったりして、本サイトにがっつりコピーしたい、というニーズもあると思うんですよ。そういう時の基本的なやり方って、そう凝った話ではないので誰かがスクリプトを書いているだろう、と思ってGoogleで探してみたのですが、案外なかったのです。
なんだか初心者の方が質問しているページはあったのですが、コピーサイトを立ち上げようとしているのではないかと疑われていたりしてかわいそうでした。インターネット怖いですね。
というわけで、WordPressサイトのコピーの仕方です。
#! /bin/sh
#WordPressのDBと中身をコピーし、その内容を全コピー
#これを使う前提として、
#同一サーバ上で複数ドメインの運用をしている
#各ドメインのサイトは、決まったディレクトリ以下に、
#ドメイン名そのままのディレクトリ内に収めている
#ということがあります。
#
#自動処理することを想定して作業するなら、名付けは規則的なほうが良いので、
#下記のようなルールを前提としています。
#・データベース名はドメイン名の.と-と:を_に置換した名前
#・ディレクトリ名はドメイン名の:を_に置換した名前
#DBに接続するユーザ名
DBUSER=************
#DBに接続するパスワード
DBPASSWORD=************
#各ドメイン用ページの共通パス
HTDOCSPATH=/var/www/htdocs/domains
if [ $# -eq 3 ] ; then
#3引数(SRCDOMAIN, DSTDOMAIN, SRCSYMBOL)
SRCDOMAIN=$1
DSTDOMAIN=$2
DSTFOLDER=`echo $DSTDOMAIN | sed "s/:/_/g"`
SRCFOLDER=`echo $SRCDOMAIN | sed "s/:/_/g"`
SRCSYMBOL=$3
DSTSYMBOL=`echo "wp_"$DSTFOLDER | sed "s/\./_/g"`
DSTSYMBOL=`echo $DSTSYMBOL | sed "s/\-/_/g"`
DSTSYMBOL=`echo $DSTSYMBOL | tr \'[A-Z]\' \'[a-z]\'`
elif [ $# -eq 2 ] ; then
#2引数(SRCDOMAIN, DSTDOMAIN)
SRCDOMAIN=$1
DSTDOMAIN=$2
DSTFOLDER=`echo $DSTDOMAIN | sed "s/:/_/g"`
SRCFOLDER=`echo $SRCDOMAIN | sed "s/:/_/g"`
SRCSYMBOL=`echo "wp_"$SRCFOLDER | sed "s/\./_/g"`
SRCSYMBOL=`echo $SRCSYMBOL | sed "s/\-/_/g"`
SRCSYMBOL=`echo $SRCSYMBOL | tr \'[A-Z]\' \'[a-z]\'`
DSTSYMBOL=`echo "wp_"$DSTFOLDER | sed "s/\./_/g"`
DSTSYMBOL=`echo $DSTSYMBOL | sed "s/\-/_/g"`
DSTSYMBOL=`echo $DSTSYMBOL | tr \'[A-Z]\' \'[a-z]\'`
else
#それ以外はエラー表示
echo "wp_db_copy.sh SRCDOMAIN DSTDOMAIN [SRCSYMBOL]"
exit 1;
fi
#'.'を正規表現と誤認しないようにエスケープする
ESCAPED_SRCDOMAIN=`echo $SRCDOMAIN | sed 's/\./\\\./g'`
ESCAPED_SRCFOLDER=`echo $SRCFOLDER | sed 's/\./\\\./g'`
echo "SRCDOMAIN" $SRCDOMAIN
echo "SRCSYMBOL" $SRCSYMBOL
echo "ESCAPED_SRCDOMAIN" $ESCAPED_SRCDOMAIN
echo "DSTDOMAIN" $DSTDOMAIN
echo "DSTSYMBOL" $DSTSYMBOL
echo
#DBの受け皿の準備
mysql -u $DBUSER -p$DBPASSWORD -e "create database $DSTSYMBOL;"
echo "created database" $DSTSYMBOL
#ダンプ→シンボル置換→ドメイン名置換→リストア
mysqldump -u $DBUSER -p$DBPASSWORD -n $SRCSYMBOL \
| sed -e "s/$SRCFOLDER/$DSTFOLDER/g" \
| sed -e "s/$SRCSYMBOL/$DSTSYMBOL/g" \
| sed -e "s/$ESCAPED_SRCDOMAIN/$DSTDOMAIN/g" \
| mysql -u $DBUSER -p$DBPASSWORD $DSTSYMBOL
echo "Copied database" $SRCSYMBOL "->" $DSTSYMBOL
#ファイルの複製
if [ ! -d $HTDOCSPATH/$DSTFOLDER ] ; then
mkdir -m 775 $HTDOCSPATH/$DSTFOLDER
chown -R www:www $HTDOCSPATH/$DSTFOLDER
fi
cp -Rfa $HTDOCSPATH/$SRCFOLDER/* $HTDOCSPATH/$DSTFOLDER
echo "Copied files" $HTDOCSPATH"/"$SRCFOLDER "->" $HTDOCSPATH"/"$DSTFOLDER
sed -i -e "s/$SRCSYMBOL/$DSTSYMBOL/g" $HTDOCSPATH/$DSTFOLDER/wp-config.php
sed -i -e "s/$ESCAPED_SRCDOMAIN/$DSTDOMAIN/g" $HTDOCSPATH/$DSTFOLDER/wp-config.php
sed -i -e "s/$ESCAPED_SRCFOLDER/$DSTFOLDER/g" $HTDOCSPATH/$DSTFOLDER/wp-config.php
echo $SRCDOMAIN "->" $DSTDOMAIN "Completed."
ほとんど異常処理していませんので、「スクリプトを読めば分かる」人だけが参考にして下さい。それから、このやり方はだいぶ乱暴な手口なので、例えば、Google Analyticsのキャンペーンコードなんかがそのままコピーされてしまいますし、DBManagerとかのように、「有効化」時に実行しなくてはならないPHPコードをコピースクリプトから呼んであげなくてはならない場合もありますので、そういう処理は別途書いてみて下さい。
あまりにも情報がない割に、したい人がたくさんいそうな作業ですので、参考までに情報公開してみました。では。