ホームページ  >  記事  >  CMS チュートリアル  >  Linux で WordPress のクローンを作成する

Linux で WordPress のクローンを作成する

王林
王林オリジナル
2023-09-03 08:25:06777ブラウズ

Linux で WordPress のクローンを作成する

WordPress のコピーがかつてないほど簡単になりました

私は、既存の Web サイトをテンプレートとして、新しい WordPress Web サイトを立ち上げることがよくあります。すべてを最初から繰り返す必要がある新規インストールとは異なり、テーマ、プラグイン、設定の構成は最初から役立ちます。

「Digital Ocean で再販するためのアプリケーション イメージの構築」では、インストール可能、事前構成、事前最適化された WordPress ドロップレットを構築するプロセスについて詳しく説明します。本質的には、完全にロードされた WordPress Web サイトを数分で起動できる画像のデジタルの海です。ただし、より一般的には、WordPress Web サイトを自分の既存のサーバーの 1 つに追加したいと考えています。

これを行うには多くの方法がありますが、特定かつ詳細なアプローチが必要であることが多く、そのたびに学び直さなければならないようです。私は、すべての作業を数分で実行してくれる Linux シェル スクリプトを作成する時期が来たと判断しました。

このチュートリアルでは、私の調査と生成された WordPress クローン スクリプトについて説明します。気に入っていただければ幸いです。完成したとき、とてもうまくいったと思いました。

始める前に、私は以下の議論に参加しようとしているということを覚えておいてください。ご質問やトピックの提案がございましたら、以下にコメントを残すか、Twitter @reifman までご連絡ください。直接メールでも構いません。多くの方がこのスクリプトに対してより良いアイデアや改善をしてくれることを願っています。連絡ありがとう。

WordPress 移行のその他の方法

通常、既存の 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 ウェブサイトの初期コンポーネント

典型的な WordPress インストールには、クローン作成用の 4 つの主要コンポーネントがあります:

  1. ウェブサイトのディレクトリツリー
  2. データベース
  3. Apache 設定ファイルなどの Web サーバー設定
  4. ドメインマッピング

情報、アクセス権、セキュリティ設定も必要です:

  • サーバー管理アカウントとパスワード
  • MySql サーバーのユーザー名とパスワード
  • ウェブサイトのソースディレクトリ
  • ウェブサイト用のウェブサーバー設定ファイル
  • データベース名、ユーザー名、パスワード

クローンサイトに指定する必要があるものは次のとおりです:

  • Webサイトのターゲットディレクトリのクローンを作成します
  • データベース名、ユーザー名、パスワードを複製します
  • Web サイトの Web サーバー設定ファイルのクローンを作成する

スクリプトが行う必要があること

  • 構成変数またはユーザー入力を通じてすべての設定を取得します。
  • Web サイトのディレクトリをコピーし、ターゲット ディレクトリに復元します。
  • ソースデータベースをエクスポートし、ターゲットデータベースにインポートします。
  • これらのディレクトリに適切な権限があることを確認してください。

  • サーバー構成ファイルをコピーし、ドメインとディレクトリの設定を更新します。
  • Webサーバーをリロードします。

新しいターゲット ドメインの DNS を手動で更新する必要があります。 Web サイトの複製後にすぐに使用できるように、開始する前に DNS レコードを作成しておくことをお勧めします。サイトのクローンを作成しても、DNS を待っているためにドメイン名をテストできないことほど良いことはありません。

クローンスクリプトの実装方法

これで、スクリプトのアーキテクチャがどのように機能するかを説明する準備が整いました。繰り返しますが、Gallagher の WordPress インストール スクリプトを利用することから始めました。先頭に最初の bash 行が必要です:

リーリー

DNS設定を準備する

サイトをコピーする前に、複製されたサイトの DNS を構成する必要があります。新しい WordPress サイトの DNS 構成については、こちらをご覧ください。私は、この Envato Tuts+ チュートリアル「DNS レコードの学習と使用の概要」にも興奮しています。

基本的に、必要なクローン URL をレプリケートしているサーバーにルーティングする A レコードまたは CNAME を作成する必要があります。

権限を設定する

私のサーバー上で、clnewp.sh という bash スクリプトを作成しています。実行可能権限が必要です:

リーリー

完了したら、次のように実行できます:

リーリー

ファイル権限の問題が発生しないように、スクリプトを sudo として実行することをお勧めします。

デフォルト値を設定する

テスト目的で、デフォルト設定でスクリプトをプリロードする関数を作成しました。すべてを何度も入力する必要がなく、テストを何度も実行するのに役立ちます。また、これは、将来スクリプトを変更したり、他の方法で使用したい人にとっても役立つかもしれないと思います。

すべてのデフォルト設定は次のとおりです:

リーリー

これは大変なことのように思えるかもしれませんが、データベースのバックアップ、データベースの作成、インポートには MySQL マスター ユーザーとパスワードを用意しておくと便利だと思います。ただし、ターゲット データベースのアクセス許可を設定し、wp-config.php ファイル内で検索および置換するために、サイト固有のデータベース ユーザーとパスワードを用意しておくと便利です。これにより、最終的なクローン作成プロセスが非常にシームレスになります。

作成するアーカイブが一意であることを保証するために、NOW タイムスタンプを使用します。

リクエスト設定

次のコードは、ユーザーにデフォルト値を表示し、それを受け入れる (Enter キーを押す) か、置き換えることを許可します。 リーリー

ユーザーの設定をすべて収集したら、開始するかどうかを尋ねます:

リーリー

ディレクトリツリーをコピー

物事は今、より速く進んでいます。ソース サイトの tarball を作成し、ターゲット ディレクトリを作成して、そこに tarball を抽出します。

リーリー

また、WordPress の標準ファイル権限も実行して、すべてが正しく設定され、安全であることを確認します。

リーリー

WP-Configファイルを更新する

次に、perl を使用して、ソース データベース認証を検索し、ターゲット データベース情報で置き換えます。

リーリー

私もセットアップします。

RELOCATE 设置添加到文件末尾。如果您愿意,可以将其替换为静态 WP_HOMEWP_SITEURLデータベースをコピー

次に、データベースをダンプし、ユーザーが提供した権限で新しいデータベースを作成し、そこにデータベースをインポートします。 リーリー

ソース サイトと単一サイト クローンの設定に基づいてデータベース設定を構成する際、これらのアクティビティにはプライマリ MySQL 認証を使用することが最善であることが改めてわかりました。

Webサーバー設定をコピーする

最後に、準備が整いましたので、開始ボタンを押します。このようなスクリプトが Web サーバー構成を管理するという追加の手順を実行することはほとんどありません。だから私もそうしたいです。

ソース サイトの Apache .conf ファイルを、複製された新しい .conf ファイルにコピーしました。 Perl を使用してドメインとディレクトリのパスの文字列置換を行っています。次に、Apache を使用してサイトをアクティブ化し、Web サーバーをリロードしました。

リーリー

そして、それだけです。スクリプトが実際にどのように機能するかは次のとおりです:

リーリー

私の小さな WordPress サイトでは、コピーにかかる時間はわずか 30 ~ 90 秒です。

絶妙な印刷

知っておくべきことが他にもあります。

まずは直接ログインしてください

まず、クローン Web サイトにログインするには、ソース Web サイトの URL (例: http://clone.io/wp-login) にリダイレクトする wp-admin を使用する代わりに、wp-login.php パスを使用する必要があります。以下に示すようにphp:

ドメイン名を切り替えるLinux で WordPress のクローンを作成する

WordPress はデータベース内のほとんどのソース ドメインをハードコードしているため、wp-config.php の

設定を使用すると、

[一般] > [設定] から簡単に更新できることがわかりました。新しいリンク先 URL を指定してフォームを保存するだけです:

RELOCATE

クローンされたターゲット URL を保存した後、wp から

settings-config.php を手動で削除できます。 Linux で WordPress のクローンを作成する

但是,一位同事建议您可能需要使用 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 中的安全密钥

您还可以通过手动替换目标站点的 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 で WordPress のクローンを作成する

现在,如果您是 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 构建您的创业公司)。

相关链接

  • WordPress Bash 安装脚本,作者:Brian Gallagher
  • 移动 WordPress
  • 用于完整 WordPress 备份的 Shell 脚本,作者:Konstantin Kovshenin
  • CodeCanyon 上提供 WordPress 插件

以上がLinux で WordPress のクローンを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。