Klonen Sie WordPress unter Linux

Was Sie erstellen werden

Das Kopieren von WordPress scheint nie einfach zu sein

Ich möchte oft eine neue WordPress-Site basierend auf einer vorhandenen Site als Vorlage starten. Die Konfigurationen für Designs, Plugins und Einstellungen können sehr nützlich sein, im Gegensatz zu einer Neuinstallation, bei der Sie alles von Anfang an wiederholen müssen.

Beim Erstellen eines App-Images für den Wiederverkauf bei Digital Ocean ging ich durch den Aufbau eines installierbaren, vorkonfigurierten und voroptimierten WordPress-Droplets. Im Wesentlichen handelt es sich um ein Digital Ocean-Bild, mit dem innerhalb von Minuten eine vollständig geladene WordPress-Site gestartet werden kann. Häufiger möchte ich jedoch eine WordPress-Site zu einem meiner bereits vorhandenen Server hinzufügen.

Es gibt verschiedene Möglichkeiten, dies zu tun, aber ich finde oft, dass sie einen spezifischen und detaillierten Ansatz benötigen, den ich jedes Mal neu zu lernen brauche. Ich entschied mich für ein Linux-Shell-Skript, das in wenigen Minuten alles für mich erledigen würde. 

In diesem Tutorial gehe ich Sie durch meine Recherchen und das daraus resultierende Klon-Skript für WordPress. Ich hoffe, es gefällt dir - ich dachte, es hat ziemlich gut funktioniert, als ich damit fertig war.

Bevor wir anfangen, denken Sie daran, ich versuche, an den folgenden Diskussionen teilzunehmen. Wenn Sie eine Frage oder ein Thema haben, schreiben Sie bitte einen Kommentar oder kontaktieren Sie mich unter Twitter @reifman. Sie können mich auch direkt per E-Mail kontaktieren. Ich erwarte, dass einige von Ihnen bessere Ideen und Verbesserungen für dieses Skript haben. Ich würde mich freuen, von Ihnen zu hören.

Andere Ansätze zur WordPress-Migration

Häufig können Sie eine neue Website erstellen, indem Sie eine vorhandene auf einen neuen Server migrieren, im Wesentlichen kopieren und die Kopie aufbauen, wobei die Quell-Site intakt bleibt. Hierfür gibt es verschiedene Ansätze.

Bei der Umstellung von WordPress auf einen neuen Server Publishing mit WordPress habe ich darüber geschrieben, dass Sie dazu das Duplicator-Plugin verwenden. Der Prozess ist jedoch umständlich. Es war auch schwierig, mich jedes Mal, wenn ich eine Website verschieben muss, mit Duplicator neu zu beschäftigen. 

Ich habe dies kürzlich in "Sichern und Wiederherstellen Ihrer WordPress-Site mit CodeGuard für Envato Tuts +" beschrieben. Es ist ein Dienst, der diesen Prozess etwas einfacher macht. In Kürze wird die Vereinfachung der Verwaltung mehrerer WordPress-Sites veröffentlicht, die eine Reihe von Vorteilen bei der Verwendung von ManageWP beschreibt. Es gibt eine Klonfunktion, aber es ist FTP erforderlich. Aus Sicherheitsgründen vermeide ich, FTP auf meinen Servern auszuführen.

Es gibt auch Rachel McCollins zweiteilige Envato Tuts + -Serie: WordPress verschieben: Eine Einführung und WordPress verschieben: Plugins verwenden, um Ihre Site zu verschieben. Bei WPBeginner gibt es dieses Tutorial, das BackupBuddy verwendet. Schließlich benötigt WPClone kein FTP, erfordert aber eine saubere WordPress-Installation.

Sie können von all diesen Tutorials und Diensten viel lernen, aber ich wollte herausfinden, ob ich ein Befehlszeilenskript erstellen könnte, mit dem eine WordPress-Site jedes Mal schneller und einfacher geklont wird.

Planen des Skripts

Um dieses Tutorial zu schreiben, habe ich mich viel auf frühere Arbeiten anderer verlassen, um mein Wissen über Bash-Skripte und die Manipulation von WordPress-Sites zu verbessern. Ich habe mich nie für einen erfahrenen Linux-Systemadministrator gehalten. Letztendlich entschied ich mich, mein Klon-Skript auf Brian Gallaghers WordPress Bash Install Script aufzubauen. 

Hinweis: Dies sind Debian-basierte Setup-Skripte. Andere Linux-Varianten wie RedHat und CentOS weisen unterschiedliche Pfade für Apache und andere Dienstprogramme auf.

Hier ist Gallaghers Beschreibung seines Basisskripts:

Lädt die neueste WP-Version herunter, aktualisiert wp-config mit vom Benutzer angegebenem DB-Namen, Benutzername und Kennwort, erstellt ein CHMOD-Upload-Verzeichnis, kopiert alle Dateien in das Hauptverzeichnis, aus dem Sie das Skript ausführen, und löscht sich anschließend!

Zunächst gibt es viele gut organisierte Skripte, aber ich wollte etwas erstellen, das eine aktive Site klonen könnte. Sehen wir uns die Architektur einer typischen WordPress-Konfiguration an.

Die ursprünglichen Komponenten einer WordPress-Site

Eine typische WordPress-Installation enthält vier Hauptkomponenten für das Klonen:

  1. Verzeichnisbaum der Site 
  2. Datenbank 
  3. Webserver-Konfiguration, z. Apache-Conf-Datei
  4. Domänenzuordnung

Es gibt auch Informationen, Zugriffs- und Sicherheitseinstellungen, die wir benötigen:

  • Server-Administrationskonto und Passwort
  • Benutzername und Kennwort des MySQL-Servers
  • Quellverzeichnis der Site
  • Webserver-Konfigurationsdatei der Site
  • Datenbankname, Benutzername und Passwort

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

  • Zielverzeichnis der geklonten Site
  • Geklonter Datenbankname, Benutzername und Passwort
  • Webserver-Konfigurationsdatei der geklonten Sites

Was das Skript tun muss

  • Erfassen Sie alle Einstellungen über Konfigurationsvariablen oder Benutzereingaben.
  • Kopieren Sie das Standortverzeichnis und stellen Sie es in einem Zielverzeichnis wieder her.
  • Exportieren Sie die Quellendatenbank und importieren Sie sie in eine Zieldatenbank.
  • Stellen Sie sicher, dass die richtigen Berechtigungen für diese Verzeichnisse vorhanden sind.
  • Kopieren Sie die Serverkonfigurationsdatei und aktualisieren Sie die Domänen- und Verzeichniseinstellungen.
  • Laden Sie den Webserver neu.

Manuell müssen wir das DNS für die neue Zieldomäne aktualisieren. Ich empfehle, DNS-Einträge zu erstellen, bevor Sie beginnen, damit sie nach dem Klonen Ihrer Site bereit sind. Es gibt nichts Besseres als das Klonen einer Site und Sie können den Domänennamen nicht testen, da Sie auf den DNS warten.

Der Ansatz des Klon-Skripts

Nun sind wir bereit, durchzugehen, wie die Architektur des Skripts funktioniert. Wieder habe ich das WordPress-Installationsskript von Gallagher verwendet, und Sie benötigen oben die erste Bash-Zeile:

#! / bin / bash -e # Eine WordPress-Site über das Bash-Skript klonen. echo löschen "=============================== ===================== "echo" WordPress-Skript klonen "echo" ===================== =============================== " 

Vorbereiten Ihrer DNS-Einstellungen

Bevor Sie eine Site duplizieren, müssen Sie den 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, Eine Einführung in das Lernen und Verwenden von DNS-Einträgen.

Grundsätzlich müssen Sie einen A-Datensatz oder einen CNAME erstellen, der Ihre gewünschte Klon-URL an den Server weiterleitet, auf dem wir duplizieren.

Festlegen von Berechtigungen

Auf meinem Server erstelle ich ein Bash-Skript namens clonewp.sh. Es werden ausführbare Berechtigungen benötigt:

chmod + x clonewp.sh

Sobald es fertig ist, können Sie es so ausführen:

Sudo Bash Clonewp.sh

Ich empfehle, das Skript als Sudo auszuführen, damit keine Probleme mit der Dateiberechtigung auftreten.

Voreinstellungen festlegen

Zu Testzwecken habe ich die Möglichkeit geschaffen, das Skript mit Standardeinstellungen vorab zu laden. Es hat mir dabei geholfen, Tests wiederholt zu durchlaufen, ohne alles immer wieder neu eingeben zu müssen. Ich dachte auch, dass es nützlich sein könnte für Leute, die das Skript später ändern oder auf andere Weise nutzen wollen.

Hier sind alle Standardeinstellungen:

# Standardeinstellungen festlegen (hilfreich zum Testen) 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 =" " default_source_dbuser = $ "user_for_garden" default_source_dbpass = $ "pwd_garden" default_target_dbname = $ "radfahren" default_target_dbuser = $ "user_for_cycling" default_target_dbpass = $ "pwd_cycling" NOW = $ "" ") 

Ich weiß, es scheint viel zu sein, aber ich fand es nützlich, einen MySQL-Master-Benutzer und ein Kennwort für Datenbanksicherungen, Datenbankerstellung und Importe zu haben. Es war jedoch auch nützlich, über den standortspezifischen Datenbankbenutzer und die Kennwörter zu verfügen, um Zieldatenbankberechtigungen festzulegen und in der Datei wp-config.php zu suchen und zu ersetzen. Dadurch wird der ultimative Klonvorgang sehr nahtlos.

Ich habe den JETZT-Zeitstempel verwendet, um sicherzustellen, dass die von uns erstellten Archive eindeutig sind.

Einstellungen anfordern

Der folgende Code zeigt den Standard für den Benutzer und ermöglicht es ihm, ihn zu akzeptieren (Drücken der Eingabetaste) oder ihn zu ersetzen:

# Quell-Einstellungen der Quelle lesen -p "Quelldomäne (z. B." $ default_source_domain "):" Quelldomäne Quelldomäne = $ Quelldomäne: - $ default_source_domain echo $ Quellendomäne read -p "Quellverzeichnis (kein nachstehender Schrägstrich, z. B." $ default_source_directory "): "source_directory source_directory = $ source_directory: - $ default_source_directory echo $ source_directory read -p" Name der Quellendatenbank "(z. B." $ default_source_dbname "):" source_dbname source_dbname = - default_source_db_name Datenbankbenutzer (z. B. "$ default_source_dbuser"): "source_dbuser source_dbuser = $ source_dbuser: - $ default_source_dbuser echo $ source_dbuser read -p" Quellendatenbankpass (z. B. "$ default_source_dbpass"): "source_dbpass source_dbpass = $ source_dbpass = default_source_dbpass echo $ source_dbpass # Quelle-Einstellungen der Quelle lesen -p "Quell-Konfigurationsdatei (z. B." $ default_source_conf "):" source_conf source_conf = $ source_conf: - $ default_source_conf echo $ source_conf # Request Targe t Einstellungen read -p "Zieldomäne (z. B. "$ default_target_domain"): "target_domain target_domain = $ target_domain: - $ default_target_domain echo $ target_domain read -p" Zielverzeichnis (kein nachstehender Schrägstrich, z. B. "$ default_target_directory"): "target_directory =" $ target_directory ". echo $ target_directory read -p "Name der Zieldatenbank (z. B." $ default_target_dbname "):" target_dbname target_dbname = $ Ziel_dbname: - $ default_target_dbname echo $ target_dbname read -p "Zieldatenbankbenutzer (z. B." $ default_target_dbuser "):" target_dbuser = $ target_dbuser: - $ default_target_dbuser echo $ target_dbuser read -p "Zieldatenbankpass (z. B." $ default_target_dbpass "):" target_dbpass target_dbpass = $ target_dbpass: - $ default_target_dbpass (zB "$ default_target_conf"): "target_conf target_conf = $ target_conf: - $ default_target_conf echo $ target_conf

Nachdem wir alle Einstellungen vom Benutzer gesammelt haben, fragen wir, ob er beginnen möchte:

echo "Jetzt klonen? (j / n)" read -e run, wenn ["$ run" == n]; dann beenden Sie else echo "=============================================== ====== "echo" WordPress-Klonen beginnt "echo" =================================== ================== " 

Kopieren der Verzeichnisstruktur

Jetzt geht es etwas schneller voran. Wir erstellen Tarballs der Quell-Site, erstellen ein Zielverzeichnis und extrahieren das Tarball dort:

#backup source_directory cd $ source_directory # Fügen Sie diesen Optionen die Option -v hinzu, wenn Sie ausführliche Dateilisten anzeigen möchten. tar -czf source_clone_ $ NOW.tar.gz. #unzip Klon im Zielverzeichnis mkdir -p $ Zielverzeichnis tar -xzf source_clone_ $ JETZT.tar.gz -C $ Zielverzeichnis #zur Entfernung des Quellverzeichnisses rm source_clone_ $ NOW.tar.gz cd $ target_directory 

Wir führen auch die Standard-Dateiberechtigungen für WordPress aus, um sicherzustellen, dass alles ordnungsgemäß und sicher eingerichtet ist:

# Verzeichnis-Berechtigungen zurücksetzen find $ target_directory -type d -exec chmod 755  \; find $ target_directory -type f -exec chmod 644  \; 

Aktualisieren Sie die WP-Config-Datei

Als Nächstes verwenden wir perl, um die Quelldatenbankauthentifizierung durch die Zieldatenbankinformationen zu suchen und zu ersetzen:

#set datenbankdetails mit perl suchen und ersetzen 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 "Verzeichnis dupliziert" echo " ================================= "

Ich füge auch das hinzu UMZIEHEN Einstellung am Ende der Datei. Wenn Sie möchten, können Sie dies durch statisch ersetzen WP_HOME und WP_SITEURL die Einstellungen.

Kopieren Sie die Datenbank

Als Nächstes sichern Sie die Datenbank, erstellen eine neue Datenbank mit den vom Benutzer angegebenen Berechtigungen und importieren die Datenbank in diese Datenbank:

# Datenbank-Duplizierung beginnen # Exportieren Sie die Datenbank mysqldump -u $ mysql_user -p $ mysql_pass $ source_dbname> $ target_directory / clone_ $ NOW.sql # Erstellen Sie die Zieldatenbank und die Berechtigungen 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' "# Importieren Sie die Quelldatenbank in das Ziel mysql -u $ mysql_user -p $ mysql_pass $ target_dbname < $target_directory/clone_$NOW.sql echo "================================" echo "Database duplicated" echo "================================" 

Wiederum fand ich es am besten, die Master-MySQL-Authentifizierung für diese Aktivitäten zu verwenden, während Sie die Datenbankeinstellungen auf Grundlage der Quell-Site- und der Single-Site-Clone-Einstellungen konfigurieren.

Kopieren Sie die Webserver-Konfiguration

Schließlich können wir die Dinge zusammenfassen und die Starttaste drücken. Es ist selten, dass diese Skripts den zusätzlichen Schritt für die Webserverkonfiguration verwalten. Das wollte ich auch.

Ich habe die Apache-.conf-Datei der Quell-Site in eine neue .conf-Datei für den Klon kopiert. Ich habe perl als String für die Domains und die Verzeichnispfade verwendet. Dann habe ich die Site mit Apache aktiviert und den Webserver neu geladen:

#Activate Web Configuration cp $ default_apache_directory / $ source_conf $ default_apache_directory / $ target_conf #set datenbankdetails mit perl suchen und ersetzen perl -pi -e "s / $ source_domain / $ target_domain / g" $ default_apache_directory / $ target_conf perlpi -e "s | $ source_directory | $ target_directory | g" $ default_apache_directory / $ target_conf a2ensite $ target_conf-Dienst apache2 reload echo "========================= =========== "echo" Web-Konfiguration hinzugefügt "echo" =============================== = "echo" Der Klon ist abgeschlossen. " echo "Test bei http: //" $ target_domain echo "================================" "

Und das ist es. So sieht ein Durchlauf des Skripts im wirklichen Leben aus:

================================================== = WordPress-Skript klonen ================================================ ===== MySQL Master Benutzername (z. B. root-admin): harry_potter harry_potter MySQL Master-Passwort (z. B. Super-Strong-Passwort): voldemoort ~ jenny7! voldemoort ~ jenny7! Quelldomäne (z. B. gardening.io): gardening.io Quellverzeichnis (kein nachstehender Schrägstrich z. B. / var / www / gardening): / var / www / gardening Quelldatenbankname (z. B. Gartenarbeit): database_gardening database_gardening Quelldatenbankbenutzer (z. B. user_for_garden) : hermione hermione Source Database Pass (z. B. pwd_garden):! 987654321abcdefgh #! 987654321abcdefgh # Quelldatei (z. B. gardening.conf): gardening.conf gardening.conf Zieldomäne (z. B. Cycling.io): cycling.io Zielverzeichnis (kein Trailing) Schrägstrich (z. B. / var / www / cycling): / var / www / cycling / var / www / cycling Name der Zieldatenbank (z. B. Radfahren): database_cycling database_cycling Zieldatenbankbenutzer (z. B. user_for_cycling): hedwig hedwig Zieldatenbank-Pass (z. B. pwd_cycling): pwd_for_cycling_not_hogwartz Ziel-Konf-Datei (z. B. cycling.conf): 0007b-cycling.conf 0007b-cycling.conf Jetzt klonen? (j / n) y ============================================= ======= WordPress-Klonen beginnt ========================================= ============= tar:.: Datei geändert, während wir sie definieren ('RELOCATE', true); ================================= Verzeichnis dupliziert ================ ================================================ Datenbank dupliziert ================================= Site 0007b-Cycling aktivieren. Um die neue Konfiguration zu aktivieren, müssen Sie Folgendes ausführen: service apache2 reload * Webserver neu laden apache2 * ============================== == Webkonfiguration hinzugefügt ================================== Das Klonen ist abgeschlossen. Test unter http://cycling.io =================================

Auf meinen kleinen WordPress-Sites dauerte die Vervielfältigung nur 30 bis 90 Sekunden!

Kleingedrucktes

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

Direkter Anmeldepfad zuerst

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

Domänen wechseln

Da WordPress einen Großteil Ihrer Quelldomäne in der Datenbank fest codiert, habe ich festgestellt, dass dies die Verwendung der UMZIEHEN Die Einstellung in wp-config.php erleichtert das Aktualisieren durch Allgemein> Einstellungen. Sie speichern einfach das Formular mit der neuen Ziel-URL:

Nachdem Sie die geklonte Ziel-URL gespeichert haben, können Sie die UMZIEHEN Einstellung von wp-config.php manuell.

Ein Kollege schlägt jedoch vor, dass Sie ein Tool wie InterconnectITs Search and Replace für WordPress-Datenbanken verwenden möchten. Es ist auch bei Envato Tuts + in der Migration von WordPress über Hosts, Server und URLs dokumentiert.  

Das letzte Skript

Hier ist das letzte Skript für wpclone.sh. Sie können die Standardeinstellungen jederzeit ändern:

#! / bin / bash -e # Eine WordPress-Site über das Bash-Skript klonen. echo löschen "=============================== ===================== "echo" WordPress-Skript klonen "echo" ===================== ============================== "# Standardeinstellungen festlegen (hilfreich zum Testen) 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 / apack2 / 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 =" " = $ "user_for_cycling" default_target_dbpass = $ "pwd_cycling" JETZT = $ (Datum + "% Y-% m-% d-% H-M M") #Request MySQL Admin read -p "MySQL-Master-Benutzername (z. B." $ default_mysql_user ") ): "mysql_user mysql_user = $ mysql_user : - $ default_mysql_user echo $ mysql_user read -p "MySQL-Master-Passwort (z. B. "$ default_mysql_pass"): "mysql_pass mysql_pass = $ mysql_pass: - $ default_mysql_pass echo $ mysql_pass # Quelle-Einstellungen abfragen read -p" Quelldomäne (z. B. "$ default_source_domain"): "source_domain" =  echo $ source_domain read -p "Quellverzeichnis (kein nachstehender Schrägstrich, z. B." $ default_source_directory "):" source_directory source_directory = $ Quellverzeichnis: - $ default_source_directory echo $ source_directory -p "Quellendatenbankname" (z. B. "default_source_db_name") : "source_dbname source_dbname = $ source_dbname: - $ default_source_dbname echo $ source_dbname read -p" Quelldatenbankbenutzer (z. B. "$ default_source_dbuser"): "source_dbbuser source_dbuser = $ source_dbb_db_benutzer" - Dateiname Quelldatenbank-Pass (z. B. "$ default_source_dbpass"): "source_dbpass source_dbpass = $ source_dbpass: - $ default_source_dbpass echo $ source_dbpass # Quelle-Einstellungen der Quelle lesen -p" Quell-Konf-Datei (zB "$ default_source_conf") "):" source_conf source_conf = $ source_conf: - $ default_source_conf echo $ source_conf # Zieleinstellungen abfragen -p "Zieldomäne (z. "$ default_target_domain"): "target_domain target_domain = $ target_domain: - $ default_target_domain echo $ target_domain read -p" Zielverzeichnis (kein nachstehender Schrägstrich, z. B. "$ default_target_directory"): "target_directory =" $ target_directory ". echo $ target_directory read -p "Name der Zieldatenbank (z. B." $ default_target_dbname "):" target_dbname target_dbname = $ Ziel_dbname: - $ default_target_dbname echo $ target_dbname read -p "Zieldatenbankbenutzer (z. B." $ default_target_dbuser "):" target_dbuser = $ target_dbuser: - $ default_target_dbuser echo $ target_dbuser read -p "Zieldatenbankpass (z. B." $ default_target_dbpass "):" target_dbpass target_dbpass = $ target_dbpass: - $ default_target_dbpass (zB "$ default_target_conf"): "target_conf target_conf = $ target_conf: - $ default_target_conf echo $ target_conf echo" Jetzt klonen? (j / n) "read -e ausführen, wenn [" $ run "== n]; dann anderes Echo beenden" ========================================= ========================================================================================================================================================================================= ===================================== "#backup source_directory cd $ source_directory # add -v option zu diesen, wenn Sie ausführliche Dateilisten anzeigen möchten tar -czf source_clone_ $ NOW.tar.gz. #unzip Klon im Zielverzeichnis mkdir -p $ target_directory tar -xzf source_clone_ $ JETZT.tar.gz -C $ target_directory #remove tarball of source rm source_clone_ $ NOW.tar.gz cd $ target_directory # Verzeichnisberechtigungen zurücksetzen find $ target_directory -type d -exec chmod 755  \; find $ target_directory -type f -exec chmod 644  \; #set-Datenbankdetails mit perl Suchen und Ersetzen von 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 "Verzeichnis dupliziert" echo " =============================== "# Datenbank-Duplizierung beginnen # Exportieren Sie die Datenbank mysqldump -u $ mysql_user -p $ mysql_pass $ source_dbname> $ target_directory / clone_ $ NOW.sql # Erstellen Sie die Zieldatenbank und die Berechtigungen mysql -u $ mysql_user -p $ mysql_pass -e "create database $ target_dbname; GRANT ALL PRIVILEGES ON $ target_dbuser '@' localhost 'IDENTIFIED BY' $ target_dbpass '"# Importieren Sie die Quelldatenbank in das Ziel 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

Wenn Sie Vorschläge und Anpassungen haben, lassen Sie es mich wissen. Schreibe deine Gedanken weiter unten in die Kommentare.

Bereinigung für erweiterte Tests

Die folgenden Zeilen können für das Löschen und Rückgängigmachen von geklonten Test-Sites hilfreich sein. Sie können es an Ihre Bedürfnisse anpassen:

 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;"

Sicherheitsschlüssel in Wp-Config.php ändern

Sie können Ihre neue WordPress-Site auch besser sichern, indem Sie die Authentifizierungsschlüssel und -salze in der wp-config.php der Ziel-Site manuell ersetzen.

/ ** # @ + * Authentifizierung Eindeutige Schlüssel und Werte. * * Ändern Sie diese in verschiedene eindeutige Phrasen! * Sie können diese mit dem @link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org Secret-Key-Service generieren. * Sie können diese jederzeit ändern, um alle vorhandenen Einstellungen ungültig zu machen Kekse. Dadurch müssen sich alle Benutzer erneut anmelden. * * @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:! 5 @ y: Q; c01dL '); define ('LOGGED_IN_KEY', '1I% pW% UyjRMqy__Da) siA) + V] Ur $ 9uXPmxv | eBjM ~ -m &-9 kC<%59rB7sbe1)jW0GCnfupJT+8z-z#%o@b|[QH=i@h|-/t!9S'); define('SECURE_AUTH_SALT', 'ON8K<,WSy8+F ~XaQpCwC8(a/HksMhZIo |% | 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 @ &. ('); / ** # @ - * /

Sie können einfach https://api.wordpress.org/secret-key/1.1/salt/ besuchen und sie ausschneiden und in Ihre wp-config.php-Datei einfügen:

Wenn Sie ein Linux-Skript-Purist sind, können Sie Gallaghers WordPress Bash-Installationsskript aktualisieren. Sein Skript wurde über die Standard-WordPress-Datei "wp-config.php" kopiert, damit er vorhersagbare Quellzeichenfolgen mit Schlüsseln erhält, die sein Skript generiert:

#set WP salt perl -i -pe 'BEGIN @chars = ("a"… "z", "A" ... "Z", 0 ... 9); drücke @chars, split //, "! @ # $% ^ & * () -_ []  <> ~ \ '+ = ,.;: /? |"; sub salt join "", map $ chars [rand @chars], 1… 64 s / setzen Sie Ihre eindeutige Phrase hier / salt () / ge 'wp-config.php

Ich habe nie einen Regex geschrieben, um die Schlüsselwerte in dynamischen, bereits vorhandenen wp-config.php-Dateien unserer Quellensites zu ersetzen. Wenn Sie sich dafür entscheiden, teilen Sie es bitte in den Kommentaren und danken Sie im Voraus.

Fragen?

Ich habe es sehr genossen, dieses Skript zum Laufen zu bringen. Oder ich sollte zumindest sagen, dass es mir Spaß machte, es zu betreiben, als ich fertig war. Ich wünschte, ich hätte es vor langer Zeit erstellt, da es unglaublich effektiv und effizient ist. Ich könnte kleine WordPress-Sites klonen und sie in etwa 60 Sekunden auf meinem Server ausführen. Keines der anderen Plugins oder Duplizierungsoptionen ist so nahtlos.

Wenn Sie Fragen haben, posten Sie diese bitte weiter unten. Sie können mich auch auf Twitter @reifman kontaktieren oder mich direkt per E-Mail kontaktieren. Auf meiner Envato Tuts + Instructor-Seite finden Sie weitere Tutorials, die ich geschrieben habe, wie zum Beispiel meine Startserie (Erstellen eines Startups mit PHP)..

ähnliche Links

  • WordPress Bash Install Script von Brian Gallagher
  • WordPress verschieben
  • Ein Shell-Skript für eine vollständige WordPress-Sicherung von Konstantin Kovshenin
  • WordPress Plugins verfügbar auf CodeCanyon