ホームページ > 記事 > CMS チュートリアル > Linux で WordPress のクローンを作成する
私は、既存の Web サイトをテンプレートとして、新しい WordPress Web サイトを立ち上げることがよくあります。すべてを最初から繰り返す必要がある新規インストールとは異なり、テーマ、プラグイン、設定の構成は最初から役立ちます。
「Digital Ocean で再販するためのアプリケーション イメージの構築」では、インストール可能、事前構成、事前最適化された WordPress ドロップレットを構築するプロセスについて詳しく説明します。本質的には、完全にロードされた WordPress Web サイトを数分で起動できる画像のデジタルの海です。ただし、より一般的には、WordPress Web サイトを自分の既存のサーバーの 1 つに追加したいと考えています。
これを行うには多くの方法がありますが、特定かつ詳細なアプローチが必要であることが多く、そのたびに学び直さなければならないようです。私は、すべての作業を数分で実行してくれる Linux シェル スクリプトを作成する時期が来たと判断しました。
このチュートリアルでは、私の調査と生成された WordPress クローン スクリプトについて説明します。気に入っていただければ幸いです。完成したとき、とてもうまくいったと思いました。
始める前に、私は以下の議論に参加しようとしているということを覚えておいてください。ご質問やトピックの提案がございましたら、以下にコメントを残すか、Twitter @reifman までご連絡ください。直接メールでも構いません。多くの方がこのスクリプトに対してより良いアイデアや改善をしてくれることを願っています。連絡ありがとう。
通常、既存の Web サイトを新しいサーバーに移行し (基本的にはコピーし)、ソース Web サイトをそのまま維持しながらコピー上に構築することで、新しい Web サイトを立ち上げることができます。これを実現するにはいくつかの方法があります。
「WordPress を使用した新しいサーバー リリースへの WordPress の移行」で、これを行うために Duplicator プラグインを使用することについて書きましたが、そのプロセスが面倒であることがわかりました。また、サイトを移動する必要があるたびにレプリケーターを再認識するのは困難でした。
これについては最近、「CodeGuard for Envato Tuts+ を使用した WordPress サイトのバックアップと復元」で書きました。このサービスを利用すると手続きが簡単になります。間もなく、「複数の WordPress Web サイトの管理を簡素化する方法」を投稿する予定です。この記事では、ManageWP を使用することの多くの強力な利点について説明します。クローン作成機能はありますが、FTP が必要です。セキュリティ上の理由から、サーバー上で FTP を実行することは避けています。
Rachel McCollin の 2 部構成の Envato Tuts+ シリーズ: モバイル WordPress: 概要とモバイル WordPress: プラグインを使用したウェブサイトの移動も併せてご覧ください。 WPBeginner には BackupBuddy の使用に関するチュートリアルがあります。最後に、WPClone には FTP は必要ありませんが、ビルドするには WordPress のクリーン インストールが必要です。
これらすべてのチュートリアルやサービスから多くのことを学ぶことができますが、WordPress サイトの複製を毎回より速く簡単に行えるコマンドライン スクリプトを作成できるかどうかを確認したいと思いました。
このチュートリアルを書くにあたり、私は bash スクリプトと WordPress Web サイトの操作を理解するために、他の人の以前の成果に大きく依存しました。私は自分をプロの Linux システム管理者だと思ったことはありません。最終的に、私は Brian Gallagher の WordPress Bash インストール スクリプトに基づいてクローン スクリプトを構築することにしました。
注: これらは Debian ベースのインストール スクリプトであり、他のバージョンの Linux (RedHat や CentOS など) では、Apache および異なるユーティリティのパスが異なります。
ギャラガーによる基本的なスクリプトの説明は次のとおりです:
最新の WP バージョンをダウンロードし、ユーザーが指定したデータベース名、ユーザー名、パスワードで wp-config を更新し、アップロード ディレクトリを作成して CHMOD し、すべてのファイルを実行中のスクリプトのルートにコピーして、それ自体を削除します。
よく整理されたスクリプトはたくさんありますが、私はライブサイトのクローンを作成するものを作りたかったのです。典型的な WordPress 構成のアーキテクチャを確認してみましょう。
典型的な WordPress インストールには、クローン作成用の 4 つの主要コンポーネントがあります:
情報、アクセス権、セキュリティ設定も必要です:
クローンサイトに指定する必要があるものは次のとおりです:
新しいターゲット ドメインの DNS を手動で更新する必要があります。 Web サイトの複製後にすぐに使用できるように、開始する前に DNS レコードを作成しておくことをお勧めします。サイトのクローンを作成しても、DNS を待っているためにドメイン名をテストできないことほど良いことはありません。
これで、スクリプトのアーキテクチャがどのように機能するかを説明する準備が整いました。繰り返しますが、Gallagher の WordPress インストール スクリプトを利用することから始めました。先頭に最初の bash 行が必要です:
リーリーサイトをコピーする前に、複製されたサイトの DNS を構成する必要があります。新しい WordPress サイトの DNS 構成については、こちらをご覧ください。私は、この Envato Tuts+ チュートリアル「DNS レコードの学習と使用の概要」にも興奮しています。
基本的に、必要なクローン URL をレプリケートしているサーバーにルーティングする A レコードまたは CNAME を作成する必要があります。
私のサーバー上で、clnewp.sh という bash スクリプトを作成しています。実行可能権限が必要です:
リーリー完了したら、次のように実行できます:
リーリーファイル権限の問題が発生しないように、スクリプトを sudo として実行することをお勧めします。
テスト目的で、デフォルト設定でスクリプトをプリロードする関数を作成しました。すべてを何度も入力する必要がなく、テストを何度も実行するのに役立ちます。また、これは、将来スクリプトを変更したり、他の方法で使用したい人にとっても役立つかもしれないと思います。
すべてのデフォルト設定は次のとおりです:
リーリーこれは大変なことのように思えるかもしれませんが、データベースのバックアップ、データベースの作成、インポートには MySQL マスター ユーザーとパスワードを用意しておくと便利だと思います。ただし、ターゲット データベースのアクセス許可を設定し、wp-config.php ファイル内で検索および置換するために、サイト固有のデータベース ユーザーとパスワードを用意しておくと便利です。これにより、最終的なクローン作成プロセスが非常にシームレスになります。
作成するアーカイブが一意であることを保証するために、NOW タイムスタンプを使用します。
次のコードは、ユーザーにデフォルト値を表示し、それを受け入れる (Enter キーを押す) か、置き換えることを許可します。 リーリー
ユーザーの設定をすべて収集したら、開始するかどうかを尋ねます:リーリー
ディレクトリツリーをコピーリーリー
また、WordPress の標準ファイル権限も実行して、すべてが正しく設定され、安全であることを確認します。リーリー
WP-Configファイルを更新するリーリー
私もセットアップします。
RELOCATE
设置添加到文件末尾。如果您愿意,可以将其替换为静态 WP_HOME
和 WP_SITEURL
データベースをコピー
Webサーバー設定をコピーする
最後に、準備が整いましたので、開始ボタンを押します。このようなスクリプトが Web サーバー構成を管理するという追加の手順を実行することはほとんどありません。だから私もそうしたいです。
リーリー
そして、それだけです。スクリプトが実際にどのように機能するかは次のとおりです:リーリー
私の小さな WordPress サイトでは、コピーにかかる時間はわずか 30 ~ 90 秒です。絶妙な印刷
知っておくべきことが他にもあります。
まず、クローン Web サイトにログインするには、ソース Web サイトの URL (例: http://clone.io/wp-login) にリダイレクトする wp-admin を使用する代わりに、wp-login.php パスを使用する必要があります。以下に示すようにphp:
ドメイン名を切り替える
WordPress はデータベース内のほとんどのソース ドメインをハードコードしているため、wp-config.php の
RELOCATE
settings-config.php を手動で削除できます。
但是,一位同事建议您可能需要使用 InterconnectIT 的 WordPress 数据库搜索和替换等工具。 Envato Tuts+ 中的“跨主机、服务器和 URL 迁移 WordPress”中也对此进行了记录。
这是 wpclone.sh 的最终脚本 - 请随意更改默认值:
#!/bin/bash -e # Clone a WordPress site via Bash script clear echo "===================================================" echo "Clone WordPress Script" echo "===================================================" # Set Default Settings (helpful for testing) default_mysql_user=$"root-admin" default_mysql_pass=$"super-strong-password" default_source_domain=$"gardening.io" default_target_domain=$"cycling.io" default_source_directory=$"/var/www/gardening" default_target_directory=$"/var/www/cycling" default_apache_directory=$"/etc/apache2/sites-available" default_source_conf=$"gardening.conf" default_target_conf=$"cycling.conf" default_source_dbname=$"gardening" default_source_dbuser=$"user_for_garden" default_source_dbpass=$"pwd_garden" default_target_dbname=$"cycling" default_target_dbuser=$"user_for_cycling" default_target_dbpass=$"pwd_cycling" NOW=$(date +"%Y-%m-%d-%H%M") #Request MySQL Admin read -p "MySQL Master Username (e.g. "$default_mysql_user"): " mysql_user mysql_user=${mysql_user:-$default_mysql_user} echo $mysql_user read -p "MySQL Master Password (e.g. "$default_mysql_pass"): " mysql_pass mysql_pass=${mysql_pass:-$default_mysql_pass} echo $mysql_pass # Request Source Settings read -p "Source Domain (e.g. "$default_source_domain"): " source_domain source_domain=${source_domain:-$default_source_domain} echo $source_domain read -p "Source Directory (no trailing slash e.g. "$default_source_directory"): " source_directory source_directory=${source_directory:-$default_source_directory} echo $source_directory read -p "Source Database Name (e.g. "$default_source_dbname"): " source_dbname source_dbname=${source_dbname:-$default_source_dbname} echo $source_dbname read -p "Source Database User (e.g. "$default_source_dbuser"): " source_dbuser source_dbuser=${source_dbuser:-$default_source_dbuser} echo $source_dbuser read -p "Source Database Pass (e.g. "$default_source_dbpass"): " source_dbpass source_dbpass=${source_dbpass:-$default_source_dbpass} echo $source_dbpass # Request Source Settings read -p "Source Conf File (e.g. "$default_source_conf"): " source_conf source_conf=${source_conf:-$default_source_conf} echo $source_conf # Request Target Settings read -p "Target Domain (e.g. "$default_target_domain"): " target_domain target_domain=${target_domain:-$default_target_domain} echo $target_domain read -p "Target Directory (no trailing slash e.g. "$default_target_directory"): " target_directory target_directory=${target_directory:-$default_target_directory} echo $target_directory read -p "Target Database Name (e.g. "$default_target_dbname"): " target_dbname target_dbname=${target_dbname:-$default_target_dbname} echo $target_dbname read -p "Target Database User (e.g. "$default_target_dbuser"): " target_dbuser target_dbuser=${target_dbuser:-$default_target_dbuser} echo $target_dbuser read -p "Target Database Pass (e.g. "$default_target_dbpass"): " target_dbpass target_dbpass=${target_dbpass:-$default_target_dbpass} echo $target_dbpass read -p "Target Conf File (e.g. "$default_target_conf"): " target_conf target_conf=${target_conf:-$default_target_conf} echo $target_conf echo "Clone now? (y/n)" read -e run if [ "$run" == n ] ; then exit else echo "===================================================" echo "WordPress Cloning is Beginning" echo "===================================================" #backup source_directory cd $source_directory # add -v option to these if you want to see verbose file listings tar -czf source_clone_$NOW.tar.gz . #unzip clone in target directory mkdir -p $target_directory tar -xzf source_clone_$NOW.tar.gz -C $target_directory #remove tarball of source rm source_clone_$NOW.tar.gz cd $target_directory # Reset Directory Permissions find $target_directory -type d -exec chmod 755 {} \; find $target_directory -type f -exec chmod 644 {} \; #set database details with perl find and replace perl -pi -e "s/$source_dbname/$target_dbname/g" wp-config.php perl -pi -e "s/$source_dbuser/$target_dbuser/g" wp-config.php perl -pi -e "s/$source_dbpass/$target_dbpass/g" wp-config.php echo "define('RELOCATE',true);" | tee -a wp-config.php #echo "define('WP_HOME','http://$target_domain');" | tee -a wp-config.php #echo "define('WP_SITEURL','http://$target_domain');" | tee -a wp-config.php echo "================================" echo "Directory duplicated" echo "================================" # Begin Database Duplication # Export the database mysqldump -u$mysql_user -p$mysql_pass $source_dbname > $target_directory/clone_$NOW.sql # Create the target database and permissions mysql -u$mysql_user -p$mysql_pass -e "create database $target_dbname; GRANT ALL PRIVILEGES ON $target_dbname.* TO '$target_dbuser'@'localhost' IDENTIFIED BY '$target_dbpass'" # Import the source database into the target mysql -u$mysql_user -p$mysql_pass $target_dbname < $target_directory/clone_$NOW.sql echo "================================" echo "Database duplicated" echo "================================" #Activate Web Configuration cp $default_apache_directory/$source_conf $default_apache_directory/$target_conf #set database details with perl find and replace perl -pi -e "s/$source_domain/$target_domain/g" $default_apache_directory/$target_conf perl -pi -e "s|${source_directory}|${target_directory}|g" $default_apache_directory/$target_conf a2ensite $target_conf service apache2 reload echo "================================" echo "Web configuration added" echo "================================" echo "Clone is complete." echo "Test at http://"$target_domain echo "================================" fi
如果您有建议和定制,请告诉我。在下面的评论中发表您的想法。
以下行可能有助于您删除和撤消克隆的测试站点。您可以根据您的需要对其进行自定义:
sudo rm -ifr /var/www/clone sudo a2dissite clone.conf sudo service apache2 reload sudo rm /etc/apache2/sites-available/clone.conf mysql -u root -p -e "drop database clone;"
您还可以通过手动替换目标站点的 wp-config.php 中的身份验证密钥和盐来更好地保护您的新 WordPress 站点:
/**#@+ * Authentication Unique Keys and Salts. * * Change these to different unique phrases! * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service} * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again. * * @since 2.6.0 */ define('AUTH_KEY', '+9%S?YVnr%5Vr!Et4J,@9/Z^.kT_Lu~5SGwr9=|Y &D-ARSWf$mF#J_3U:/iE>-R'); define('SECURE_AUTH_KEY', 'e3Wr7%Aa7H1,f<SR[Sp&g.kJw,.)bR-9jz{uU&[R{[J]ITK8q>:!5@y:Q;c01dL '); define('LOGGED_IN_KEY', '1I%pW%UyjRMqy__Da)siA)+V]Ur$9uXPmxv|eBjM~-m&-<WEy&+XXb43uh8&aP+U'); define('NONCE_KEY', 'A9]+PFgvxYa^<B}_.F?9A,!&i-.b6E.I?&?U*)X.Vh+fq`SfE[XJG+MG|pg;y%Ah'); define('AUTH_SALT', 'gT (4]L{mm!|>9kC<%59rB7sbe1)jW0GCnfupJT+8z-z#%o@b|[QH=i@h|-/t!9S'); define('SECURE_AUTH_SALT', 'ON8K<,WSy8+F ~XaQpCwC8(a/{HksMh<T)QLD]s[-:yv+fx8!`<!*~mgB32X:w5k'); define('LOGGED_IN_SALT', 'vHJ%{=X6$ue>ZIo|%|cisp1R}9cJ< Rz-J;H|:O2A7$+*aGXMH!+KvD+tZ/I*U5$'); define('NONCE_SALT', '[ytQ;C)BvgU!#>a,,g|)~EKBQUig7Uv.-8?q%lmFte,P>,]f#.}i`Wx8S+_S@&.('); /**#@-*/
您只需访问 https://api.wordpress.org/secret-key/1.1/salt/ 并将它们剪切并粘贴到您的 wp-config.php 文件中即可:
现在,如果您是 Linux 脚本纯粹主义者,我将允许您更新 Gallagher 的 WordPress Bash 安装脚本。他的脚本复制了默认的 WordPress wp-config.php,因此他可以使用可预测的源字符串来替换他的脚本生成的密钥:
#set WP salts perl -i -pe' BEGIN { @chars = ("a" .. "z", "A" .. "Z", 0 .. 9); push @chars, split //, "!@#$%^&*()-_ []{}<>~\`+=,.;:/?|"; sub salt { join "", map $chars[ rand @chars ], 1 .. 64 } } s/put your unique phrase here/salt()/ge ' wp-config.php
我从未编写过正则表达式来替换我们源站点的动态预先存在的 wp-config.php 文件中的键值。如果您决定这样做,请在评论中分享并提前致谢。
我非常喜欢让这个脚本工作。或者,我至少应该说我喜欢在完成后运行它。我希望我很久以前就创建了它,因为它非常有效和高效。我可以克隆小型 WordPress 网站,并在大约 60 秒内让它们在我的服务器上运行。其他插件或复制选项都不是那么无缝。
如果您有任何疑问,请在下面发布。或者,您可以通过 Twitter @reifman 联系我或直接给我发电子邮件。请查看我的 Envato Tuts+ 讲师页面,查看我编写的其他教程,例如我的创业系列(使用 PHP 构建您的创业公司)。
以上がLinux で WordPress のクローンを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。