Heim  >  Artikel  >  CMS-Tutorial  >  Klonen Sie WordPress unter Linux

Klonen Sie WordPress unter Linux

王林
王林Original
2023-09-03 08:25:06777Durchsuche

Klonen Sie WordPress unter Linux

Das Kopieren von WordPress schien noch nie einfacher zu sein

Ich starte oft gerne eine neue WordPress-Website basierend auf einer bestehenden Website als Vorlage. Die Konfiguration von Themes, Plugins und Einstellungen ist von Anfang an hilfreich, im Gegensatz zu einer Neuinstallation, bei der Sie alles von Grund auf wiederholen müssen.

In „Erstellen eines Anwendungsimages für den Wiederverkauf auf Digital Ocean“ beschreibe ich detailliert den Prozess der Erstellung eines installierbaren, vorkonfigurierten und voroptimierten WordPress-Droplets. Im Wesentlichen handelt es sich um einen digitalen Ozean von Bildern, der in wenigen Minuten eine vollständig geladene WordPress-Website starten kann. Häufiger möchte ich jedoch eine WordPress-Website zu einem meiner eigenen vorhandenen Server hinzufügen.

Es gibt viele Möglichkeiten, dies zu tun, aber ich stelle oft fest, dass sie einen spezifischen und detaillierten Ansatz erfordern, den ich jedes Mal neu erlernen muss. Ich beschloss, dass es an der Zeit war, ein Linux-Shell-Skript zu schreiben, das mir die ganze Arbeit in wenigen Minuten abnehmen würde.

In diesem Tutorial werde ich Sie durch meine Recherche und das generierte WordPress-Klonskript führen. Ich hoffe, es gefällt euch – als ich es fertig hatte, dachte ich, dass es ziemlich gut funktioniert.

Bevor wir beginnen, denken Sie bitte daran, dass ich versuche, mich an der folgenden Diskussion zu beteiligen. Wenn Sie Fragen oder Themenvorschläge haben, hinterlassen Sie bitte unten einen Kommentar oder kontaktieren Sie mich auf Twitter @reifman. Sie können mir auch direkt eine E-Mail senden. Ich hoffe, dass viele von Ihnen bessere Ideen und Verbesserungen für dieses Skript haben werden. Ich freue mich, von Ihnen zu hören.

Andere Möglichkeiten zur WordPress-Migration

Normalerweise können Sie eine neue Website starten, indem Sie Ihre bestehende Website auf einen neuen Server migrieren (im Wesentlichen kopieren) und auf der Kopie aufbauen, während die Quellwebsite intakt bleibt. Es gibt mehrere Möglichkeiten, dies zu erreichen.

In „Migration von WordPress auf eine neue Serverversion mit WordPress“ habe ich über die Verwendung des Duplicator-Plugins geschrieben, aber ich fand den Prozess umständlich. Es war auch schwierig, mich jedes Mal wieder mit dem Replikator vertraut zu machen, wenn ich den Standort verschieben musste.

Ich habe darüber kürzlich in Sichern und Wiederherstellen Ihrer WordPress-Site mit CodeGuard für Envato Tuts+ geschrieben. Dieser Service erleichtert den Prozess. In Kürze werden wir „How to Simplify Managing Multiple WordPress Websites“ veröffentlichen, in dem die vielen leistungsstarken Vorteile der Verwendung von ManageWP beschrieben werden. Es verfügt über Klonfunktionen, erfordert jedoch FTP. Aus Sicherheitsgründen vermeide ich es, FTP auf meinem Server auszuführen.

Außerdem mit Rachel McCollins zweiteiliger Envato Tuts+-Serie: Mobile WordPress: Eine Einführung und Mobile WordPress: Verschieben Sie Ihre Website mit Plugins. Es gibt ein Tutorial zur Verwendung von BackupBuddy auf WPBeginner. Schließlich erfordert WPClone kein FTP, erfordert jedoch eine saubere WordPress-Installation zum Erstellen.

Von all diesen Tutorials und Diensten kann man viel lernen, aber ich wollte sehen, ob ich ein Befehlszeilenskript erstellen kann, das das Klonen einer WordPress-Site jedes Mal schneller und einfacher macht.

Planungsskript

Um dieses Tutorial zu schreiben, habe ich mich stark auf die früheren Arbeiten anderer Leute verlassen, um mich mit Bash-Skripten und dem Betrieb von WordPress-Websites vertraut zu machen. Ich habe mich nie als professionellen Linux-Systemadministrator betrachtet. Letztendlich habe ich beschlossen, mein Klonskript auf dem WordPress Bash-Installationsskript von Brian Gallagher aufzubauen.

Hinweis: Dies sind Debian-basierte Installationsskripte; andere Versionen von Linux (wie RedHat und CentOS) haben andere Pfade für Apache und andere Dienstprogramme.

Hier ist Gallaghers Beschreibung seines grundlegenden Drehbuchs:

Laden Sie die neueste WP-Version herunter, aktualisieren Sie wp-config mit dem vom Benutzer bereitgestellten Datenbanknamen, Benutzernamen und Passwort, erstellen und CHMOD das Upload-Verzeichnis, kopieren Sie alle Dateien in das Stammverzeichnis des laufenden Skripts und löschen Sie es dann selbst!

Es gibt viele gut organisierte Skripte, aber ich wollte etwas erstellen, das eine Live-Site klont. Sehen wir uns die Architektur einer typischen WordPress-Konfiguration an.

Erste Komponenten einer WordPress-Website

Eine typische WordPress-Installation besteht aus vier Hauptkomponenten zum Klonen:

  1. Verzeichnisbaum der Website
  2. Datenbank
  3. Webserverkonfiguration, z. B. Apache-Konfigurationsdatei
  4. Domänenzuordnung

Wir benötigen außerdem Informationen, Zugriffsrechte und Sicherheitseinstellungen:

  • Serververwaltungskonten und Passwörter
  • Benutzername und Passwort für den MySQL-Server
  • Quellenverzeichnis der Website
  • Webserver-Konfigurationsdatei für Website
  • Datenbankname, Benutzername und Passwort

Folgendes müssen wir für die geklonte Site angeben:

  • Klonen Sie das Zielverzeichnis der Website
  • Datenbankname, Benutzername und Passwort klonen
  • Klonen Sie die Webserver-Konfigurationsdatei einer Website

Was das Skript tun muss

  • Erhalten Sie alle Einstellungen über Konfigurationsvariablen oder Benutzereingaben.
  • Kopieren Sie das Website-Verzeichnis und stellen Sie es im Zielverzeichnis wieder her.
  • Exportieren Sie die Quelldatenbank und importieren Sie sie in die Zieldatenbank.
  • Stellen Sie sicher, dass diese Verzeichnisse über die entsprechenden Berechtigungen verfügen.

  • Kopieren Sie Serverkonfigurationsdateien und aktualisieren Sie Domänen- und Verzeichniseinstellungen.
  • Webserver neu laden.

Wir müssen den DNS der neuen Zieldomäne manuell aktualisieren. Ich empfehle Ihnen, vor dem Start DNS-Einträge zu erstellen, damit diese sofort einsatzbereit sind, sobald Sie Ihre Website geklont haben. Es gibt nichts Besseres, als Ihre Site zu klonen und den Domainnamen nicht testen zu können, weil Sie auf DNS warten.

So implementieren Sie ein Klonskript

Jetzt können wir Ihnen zeigen, wie die Architektur des Skripts funktioniert. Auch hier habe ich damit begonnen, das WordPress-Installationsskript von Gallagher zu nutzen, und Sie benötigen die erste Bash-Zeile oben:

#!/bin/bash -e
# Clone a WordPress site via Bash script
clear
echo "==================================================="
echo "Clone WordPress Script"
echo "==================================================="

Bereiten Sie Ihre DNS-Einstellungen vor

Bevor Sie die Site kopieren, müssen Sie DNS für die geklonte Site konfigurieren. Informationen zur DNS-Konfiguration für eine neue WordPress-Site finden Sie hier. Ich freue mich auch über dieses Envato Tuts+-Tutorial „Einführung in das Erlernen und Verwenden von DNS-Einträgen“.

Grundsätzlich müssen Sie einen A-Eintrag oder CNAME erstellen, der die gewünschte Klon-URL an den Server weiterleitet, den wir replizieren.

Berechtigungen festlegen

Auf meinem Server erstelle ich ein Bash-Skript namens clnewp.sh. Es sind ausführbare Berechtigungen erforderlich:

chmod +x clonewp.sh

Sobald Sie fertig sind, können Sie es wie folgt ausführen:

sudo bash clonewp.sh

Ich empfehle, das Skript als sudo auszuführen, damit Sie nicht auf Dateiberechtigungsprobleme stoßen.

Standardwert festlegen

Zu Testzwecken habe ich eine Funktion erstellt, die Skripte mit Standardeinstellungen vorlädt. Es hilft mir, Tests immer wieder durchzuführen, ohne alles immer wieder eingeben zu müssen. Ich denke auch, dass dies für jeden nützlich sein könnte, der das Skript in Zukunft ändern oder auf andere Weise verwenden möchte.

Hier sind alle Standardeinstellungen:

# 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")

Ich weiß, das scheint viel zu sein, aber ich finde es nützlich, einen MySQL-Masterbenutzer und ein Passwort für Datenbanksicherungen, Datenbankerstellung und -importe zu haben. Es ist jedoch auch nützlich, über einen standortspezifischen Datenbankbenutzer und ein Kennwort zu verfügen, um Berechtigungen für die Zieldatenbank festzulegen und in der Datei wp-config.php zu suchen und zu ersetzen. Dadurch verläuft der abschließende Klonvorgang sehr reibungslos.

Ich verwende NOW-Zeitstempel, um sicherzustellen, dass die von uns erstellten Archive einzigartig sind.

Einstellungen anfordern

Der folgende Code zeigt dem Benutzer einen Standardwert an und ermöglicht ihm, ihn zu akzeptieren (Eingabetaste drücken) oder zu ersetzen:

# 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

Sobald wir alle Einstellungen des Benutzers erfasst haben, fragen wir ihn, ob er loslegen möchte:

echo "Clone now? (y/n)"
read -e run
if [ "$run" == n ] ; then
exit
else
echo "==================================================="
echo "WordPress Cloning is Beginning"
echo "==================================================="

Verzeichnisbaum kopieren

Jetzt geht es schneller. Wir erstellen einen Tarball der Quellseite, erstellen das Zielverzeichnis und extrahieren den Tarball dort:

#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

Wir führen auch die Standard-Dateiberechtigungen von WordPress aus, um sicherzustellen, dass alles korrekt und sicher eingerichtet ist:

# Reset Directory Permissions
find $target_directory -type d -exec chmod 755 {} \;
find $target_directory -type f -exec chmod 644 {} \;

WP-Config-Datei aktualisieren

Als nächstes verwenden wir Perl, um die Authentifizierung der Quelldatenbank zu suchen und durch die Informationen der Zieldatenbank zu ersetzen:

#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 "================================"

Ich werde es auch RELOCATE 设置添加到文件末尾。如果您愿意,可以将其替换为静态 WP_HOMEWP_SITEURL einrichten.

Datenbank kopieren

Als nächstes sichern wir die Datenbank, erstellen eine neue Datenbank mit den vom Benutzer bereitgestellten Berechtigungen und importieren die Datenbank darin:

# 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 "================================"

Wieder einmal finde ich es am besten, für diese Aktivitäten die primäre MySQL-Authentifizierung zu verwenden und gleichzeitig die Datenbankeinstellungen basierend auf der Quellsite und den Kloneinstellungen einer einzelnen Site zu konfigurieren.

Webserverkonfiguration kopieren

Endlich sind wir bereit, die Dinge abzuschließen und den Startknopf zu drücken. Ich sehe selten, dass solche Skripte den zusätzlichen Schritt der Verwaltung einer Webserverkonfiguration übernehmen. Deshalb möchte ich das auch tun.

Ich habe die Apache-.conf-Datei der Quellseite in die geklonte neue .conf-Datei kopiert. Ich verwende Perl, um Zeichenfolgen für Domänen- und Verzeichnispfade zu ersetzen. Anschließend habe ich die Seite per Apache aktiviert und den Webserver neu geladen:

#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

Und das ist es. So funktioniert das Drehbuch im wirklichen Leben:

===================================================
Clone WordPress Script
===================================================
MySQL Master Username (e.g. root-admin): harry_potter
harry_potter
MySQL Master Password (e.g. super-strong-password): voldemoort~jenny7!
voldemoort~jenny7!
Source Domain (e.g. gardening.io): 
gardening.io
Source Directory (no trailing slash e.g. /var/www/gardening): 
/var/www/gardening
Source Database Name (e.g. gardening): database_gardening
database_gardening
Source Database User (e.g. user_for_garden): hermione
hermione
Source Database Pass (e.g. pwd_garden): !987654321abcdefgh#
!987654321abcdefgh#
Source Conf File (e.g. gardening.conf): gardening.conf
gardening.conf
Target Domain (e.g. cycling.io): 
cycling.io
Target Directory (no trailing slash e.g. /var/www/cycling): /var/www/cycling
/var/www/cycling
Target Database Name (e.g. cycling): database_cycling
database_cycling
Target Database User (e.g. user_for_cycling): hedwig
hedwig
Target Database Pass (e.g. pwd_cycling): 
pwd_for_cycling_not_hogwartz
Target Conf File (e.g. cycling.conf): 0007b-cycling.conf               
0007b-cycling.conf
Clone now? (y/n)
y
===================================================
WordPress Cloning is Beginning
===================================================
tar: .: file changed as we read it
define('RELOCATE',true);
================================
Directory duplicated
================================
================================
Database duplicated
================================
Enabling site 0007b-cycling.
To activate the new configuration, you need to run:
  service apache2 reload
 * Reloading web server apache2                                                                                     * 
================================
Web configuration added
================================
Clone is complete.
Test at http://cycling.io
================================

Auf meiner kleinen WordPress-Seite dauert das Kopieren nur 30 bis 90 Sekunden!

Exquisiter Druck

Es gibt noch mehr Dinge, die Sie wissen müssen.

Zuerst direkt anmelden

Um sich bei der geklonten Website anzumelden, müssen Sie zunächst den Pfad wp-login.php anstelle von wp-admin verwenden, der zur URL der Quellwebsite weiterleitet, zum Beispiel http://clone.io/wp-login. php wie unten gezeigt:

Klonen Sie WordPress unter Linux

Domainnamen wechseln

Da WordPress die meisten Quelldomänen in der Datenbank fest codiert, habe ich festgestellt, dass die Verwendung der RELOCATE Einstellungen in wp-config.php einfach über Allgemein > Einstellungen aktualisiert werden kann. Speichern Sie das Formular einfach mit Ihrer neuen Ziel-URL:

Klonen Sie WordPress unter Linux

Nachdem Sie die geklonte Ziel-URL gespeichert haben, können Sie RELOCATE Settings-config.php manuell aus wp löschen.

但是,一位同事建议您可能需要使用 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 文件中即可:

Klonen Sie WordPress unter Linux

现在,如果您是 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 插件

Das obige ist der detaillierte Inhalt vonKlonen Sie WordPress unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn