WordPressを丸ごとshellスクリプトでコピーする方法をメモ。
プラグインとか色々と入れてまたやり直すのってつらいじゃないですか。
今動いているWordPressを丸ごとコピーして済ませたいです。
まず、シェルコマンド単位で。
まず、データベースをdump!
mysqldump -u user -ppassword wordpress > tmp.sql
dumpしたSQLに記載されている「WordPressのパス」と「ドメイン」をコピー先のものに置換
sed -i -e "s/old_path/new_path/g" tmp.sql sed -i -e "s/old_domain/new_domain/g" tmp.sql
新しいWordPressのデータベースを作成し、置換後のSQLを実行
mysql -u root -ppassword -e "create database new_db"
mysql -u root -ppassword new_db < tmp.sql
権限も割り当てておきましょう
mysql -u root -ppassword -e "GRANT ALL PRIVILEGES ON \`new_db\`.* TO 'user'@'localhost'"
WordPressのディレクトリをコピー
cp -r /pathto/old_wordpress /pathto/new_wordpress
所有者と権限を変更(Ubuntu)
chown -R www-data:www-data /pathto/new_wordpress chmod -R 777 /pathto/new_wordpress/wp-content
config.php内のデータベース設定を置換
sed -i -e "s/define('DB_NAME', 'old_wordpress');/define('DB_NAME', 'new_wordpress');/g" /pathto/new_wordpress/wp-config.php
新しいWordPress用のapacheのsites-availableを作成
cp /etc/apache2/sites-available/old_domain.conf /etc/apache2/sites-available/new_domain.conf
conf内のドメインとパスを置換しましょう
sed -i -e "s/old_path/new_path/g" /etc/apache2/sites-available/new_domain.conf
sed -i -e "s/old_domain/new_domain/g" /etc/apache2/sites-available/new_domain.conf
新しいapacheの設定を有効化
a2ensite new_domain.conf service apache2 reload
ついでにSSLも有効化しておきましょう
letsencrypt run -d new_domain
色々と足して、シェルスクリプトにするとこうなる。
実行する時は第1引数に新しいドメイン、第2引数に新しいDB名を入れる感じ。
# /usr/bin/sh if [ -z "$1" ]; then echo 'please input new domain' exit 1 fi if [ -z "$2" ]; then echo 'please input DB name' exit 1 fi #copy database mysqldump -u root -ppassword old_db > tmp.sql sed -i -e "s/old_path/$2/g" tmp.sql sed -i -e "s/old_domain/$1/g" tmp.sql mysql -u root -ppassword -e "drop database $2" mysql -u root -ppassword -e "create database $2" mysql -u root -ppassword $2 < tmp.sql rm tmp.sql mysql -u root -ppassword -e "GRANT ALL PRIVILEGES ON `$2`.* TO 'user'@'localhost'" #files rm -rf /var/www/$2 cp -r /var/www/old_path /var/www/$2 chown -R www-data:www-data /var/www/$2 chmod -R 777 /var/www/$2/wp-content sed -i -e "s/define('DB_NAME', 'old_db');/define('DB_NAME', '$2');/g" /var/www/$2/wp-config.php #apache rm /etc/apache2/sites-available/$1.conf /etc/apache2/sites-available/${1}-le-ssl.conf cp /etc/apache2/sites-available/old_domain.conf /etc/apache2/sites-available/$1.conf sed -i -e "s/old_path/$2/g" /etc/apache2/sites-available/$1.conf sed -i -e "s/old_domain/$1/g" /etc/apache2/sites-available/$1.conf rm -rf /var/log/apache2/$1 mkdir /var/log/apache2/$1 a2ensite $1.conf service apache2 reload letsencrypt run -d $1
oldの部分を今動いているWordPressに書きかえて、ファイル名をcopy_wp.shとかにして、パスの通っているところに置けば
copy_wp new_domain new_db
みたいにいつでもコマンドで実行できる