1. Code
  2. WordPress
  3. Plugin Development

Clonar WordPress en Linux

Luego, una vez que esté completo, puedes ejecutarlo así:
Scroll to top

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Duplicar WordPress nunca parece fácil

A menudo me gusta lanzar un nuevo sitio de WordPress basado en un sitio existente, como una plantilla. Las configuraciones para temas, complementos y configuraciones pueden ser muy útiles para empezar, en lugar de una instalación limpia donde debe repetir todo desde el principio.

Al crear una imagen de aplicación para revender en Digital Ocean, realicé la construcción de una gota de WordPress instalable, preconfigurada y optimizada previamente. Esencialmente, es una imagen de Digital Ocean que puede lanzar un sitio de WordPress completamente cargado en minutos. Pero, con mayor frecuencia, deseo agregar un sitio de WordPress a uno de mis servidores preexistentes.

Hay varias maneras de hacerlo, pero a menudo encuentro que requieren un enfoque específico y detallado que, como parece, tengo que volver a aprender cada vez. Decidí que era hora de crear un script de shell de Linux que hiciera todo en unos minutos para mí.

En este tutorial, lo guiaré a través de mi investigación y el script de clonación resultante para WordPress. Espero que les guste, pensé que funcionó bastante bien cuando terminé con eso.

Antes de comenzar, recuerde, intento participar en las discusiones a continuación. Si tiene una pregunta o sugerencia de tema, publique un comentario a continuación o contácteme en Twitter @reifman. También puede enviarme un correo electrónico directamente. Espero que algunos de ustedes tengan mejores ideas y mejoras para este script. Agradecería saber de usted.

Otros enfoques para la migración de WordPress

A menudo puede iniciar un nuevo sitio web migrando uno existente a un nuevo servidor, esencialmente copiándolo, y construyendo sobre la copia mientras deja intacto el sitio de origen. Hay una cantidad de enfoques para esto.

Al mover WordPress a una nueva servidor de publicación con WordPress, escribí sobre el uso del complemento Duplicator para hacer esto, pero he encontrado que el proceso es engorroso. Refamiliarizarme con Duplicator cada vez que necesito mover un sitio también ha sido difícil.

Recientemente, escribí sobre esto en Copia de seguridad y restauración de su sitio de WordPress con CodeGuard para Envato Tuts+. Es un servicio que hace que este proceso sea un poco más fácil. Y, pronto, se publicará Cómo simplificar la administración de varios sitios de WordPress, que describe una serie de poderosas ventajas al usar ManageWP. Tiene una función de clonación, pero requiere FTP; por razones de seguridad, evito ejecutar FTP en mis servidores.

También está la serie de dos partes Envato Tuts + de : Moviendo WordPress: Una introducción y Moviendo WordPress: Uso de complementos para mover su sitio. Y hay este tutorial en WPBeginner que usa BackupBuddy. Finalmente, WPClone no requiere FTP pero requiere una instalación limpia de WordPress para instalarse.

Puede aprender mucho de todos estos tutoriales y servicios, pero quería ver si podía crear un script de línea de comandos que clonara un sitio de WordPress de manera más rápida y fácil, siempre.

Planificación del Script

Para escribir este tutorial, confié mucho en trabajos anteriores de otros para reactivar mi conocimiento de los scripts bash y la manipulación del sitio de WordPress. Nunca me he considerado un experto administrador de sistemas Linux. Finalmente, decidí construir mi script de clonación sobre WordPress Bash Install Script de Brian Gallagher.

Nota: Estos son guiones de configuración basados ​​en Debian; otros sabores de Linux como RedHat y CentOS tienen diferentes caminos para Apache y diferentes utilidades.

Aquí está la descripción de Gallagher de su script base:

Descarga la última versión de WP, actualiza wp-config con nombre de usuario, nombre de usuario y contraseña suministrados por el usuario, crea y carga el directorio de CHMOD, copia todos los archivos en el directorio raíz desde el que ejecuta el script, ¡y luego se borra!

Aquí hay muchos guiones bien organizados, pero quería hacer algo que pudiera clonar un sitio activo. Repasemos la arquitectura de una configuración típica de WordPress.

Los componentes iniciales de un sitio de WordPress

Una instalación típica de WordPress tiene cuatro componentes principales para la clonación:

  1. Árbol de directorios del sitio
  2. Base de datos
  3. Configuración del servidor web, p. Archivo conf de Apache
  4. Asignación de dominio

También hay información, acceso y configuraciones de seguridad que necesitaremos:

  • Cuenta y contraseña de administración del servidor
  • Nombre de usuario y contraseña del servidor MySql
  • Directorio fuente del sitio
  • Archivo de configuración del servidor web del sitio
  • Nombre de la base de datos, nombre de usuario y contraseña

Esto es lo que necesitaremos especificar para el sitio clonado:

  • Directorio de destino del sitio clonado
  • Nombre de la base de datos clonada, nombre de usuario y contraseña
  • Archivo de configuración del servidor web de los sitios clonados

Lo que el script necesita hacer

  • Adquiera todas las configuraciones a través de las variables de configuración o la entrada del usuario.
  • Copie el directorio del sitio y restáurelo a un directorio de destino.
  • Exportar la base de datos de origen e importarla a una base de datos de destino.
  • Asegure los permisos apropiados en estos directorios.
  • Copie el archivo de configuración del servidor y actualice la configuración del dominio y el directorio.
  •     Recargar el servidor web.

Manualmente, tendremos que actualizar el DNS para el nuevo dominio objetivo. Recomiendo crear registros DNS antes de comenzar para que estén listos una vez que se clone su sitio. No hay nada como clonar un sitio y no poder probar el nombre de dominio porque estás esperando el DNS.

El enfoque de la secuencia de clonación

Ahora, estamos listos para ver cómo funciona la arquitectura del script. De nuevo, utilicé la secuencia de comandos de instalación de WordPress de Gallagher para comenzar, y necesitas esa línea inicial bash en la parte superior:

1
#!/bin/bash -e

2
# Clone a WordPress site via Bash script

3
clear
4
echo "==================================================="
5
echo "Clone WordPress Script"
6
echo "==================================================="

Preparación de su configuración de DNS

Antes de duplicar un sitio, debe configurar el DNS para el sitio clonado. Puede leer sobre la configuración de DNS para un nuevo sitio de WordPress aquí. También estoy entusiasmado con este tutorial de Envato Tuts+, Introducción al aprendizaje y Uso de registros DNS.

Básicamente, debe crear un registro A o CNAME que enrute su URL de clonación deseada al servidor en el que estamos duplicando.

Estableciendo Permisos

En mi servidor, estoy creando un script bash llamado clonewp.sh. Necesitará permisos ejecutables:

1
chmod +x clonewp.sh

Luego, una vez que esté completo, puedes ejecutarlo así:

1
sudo bash clonewp.sh

Recomiendo ejecutar el script como sudo para que no se encuentre con problemas de permisos de archivos.

Establecer valores predeterminados

Para fines de prueba, creé la capacidad de precargar la secuencia de comandos con la configuración predeterminada. Me ayudó a ejecutar las pruebas varias veces sin tener que escribir todo una y otra vez. También pensé que podría ser útil para las personas que quieran modificar el guión o utilizarlo de otras maneras.

Aquí están todas las configuraciones predeterminadas:

1
# Set Default Settings (helpful for testing)

2
default_mysql_user=$"root-admin"
3
default_mysql_pass=$"super-strong-password"
4
default_source_domain=$"gardening.io"
5
default_target_domain=$"cycling.io"
6
default_source_directory=$"/var/www/gardening"
7
default_target_directory=$"/var/www/cycling"
8
default_apache_directory=$"/etc/apache2/sites-available"
9
default_source_conf=$"gardening.conf"
10
default_target_conf=$"cycling.conf"
11
default_source_dbname=$"gardening"
12
default_source_dbuser=$"user_for_garden"
13
default_source_dbpass=$"pwd_garden"
14
default_target_dbname=$"cycling"
15
default_target_dbuser=$"user_for_cycling"
16
default_target_dbpass=$"pwd_cycling"
17
NOW=$(date +"%Y-%m-%d-%H%M")

Sé que parece mucho, pero me pareció útil tener un usuario maestro de MySQL y una contraseña para copias de seguridad de bases de datos, creación de bases de datos e importaciones. Sin embargo, también era útil tener las contraseñas y el usuario de la base de datos específica del sitio para establecer los privilegios de la base de datos de destino y buscar y reemplazar en el archivo wp-config.php. Hace que el proceso de clonación final sea muy fluido.

Utilicé la marca de tiempo NOW para asegurarme de que los archivos que creamos son únicos.

Solicitar la configuración

El siguiente código muestra el valor predeterminado para el usuario y le permite aceptarlo (presionando regresar) o reemplazarlo:

1
# Request Source Settings

2
read -p "Source Domain (e.g. "$default_source_domain"): " source_domain
3
source_domain=${source_domain:-$default_source_domain}
4
echo $source_domain
5
read -p "Source Directory (no trailing slash e.g. "$default_source_directory"): " source_directory
6
source_directory=${source_directory:-$default_source_directory}
7
echo $source_directory
8
read -p "Source Database Name (e.g. "$default_source_dbname"): " source_dbname
9
source_dbname=${source_dbname:-$default_source_dbname}
10
echo $source_dbname
11
read -p "Source Database User (e.g. "$default_source_dbuser"): " source_dbuser
12
source_dbuser=${source_dbuser:-$default_source_dbuser}
13
echo $source_dbuser
14
read -p "Source Database Pass (e.g. "$default_source_dbpass"): " source_dbpass
15
source_dbpass=${source_dbpass:-$default_source_dbpass}
16
echo $source_dbpass
17
# Request Source Settings

18
read -p "Source Conf File (e.g. "$default_source_conf"): " source_conf
19
source_conf=${source_conf:-$default_source_conf}
20
echo $source_conf
21
# Request Target Settings

22
read -p "Target Domain (e.g. "$default_target_domain"): " target_domain
23
target_domain=${target_domain:-$default_target_domain}
24
echo $target_domain
25
read -p "Target Directory (no trailing slash e.g. "$default_target_directory"): " target_directory
26
target_directory=${target_directory:-$default_target_directory}
27
echo $target_directory
28
read -p "Target Database Name (e.g. "$default_target_dbname"): " target_dbname
29
target_dbname=${target_dbname:-$default_target_dbname}
30
echo $target_dbname
31
read -p "Target Database User (e.g. "$default_target_dbuser"): " target_dbuser
32
target_dbuser=${target_dbuser:-$default_target_dbuser}
33
echo $target_dbuser
34
read -p "Target Database Pass (e.g. "$default_target_dbpass"): " target_dbpass
35
target_dbpass=${target_dbpass:-$default_target_dbpass}
36
echo $target_dbpass
37
read -p "Target Conf File (e.g. "$default_target_conf"): " target_conf
38
target_conf=${target_conf:-$default_target_conf}
39
echo $target_conf

Una vez que hemos recopilado todas las configuraciones del usuario, le preguntamos si desea comenzar:

1
echo "Clone now? (y/n)"
2
read -e run
3
if [ "$run" == n ] ; then

4
exit

5
else

6
echo "==================================================="
7
echo "WordPress Cloning is Beginning"
8
echo "==================================================="

Copia del árbol de directorios

Ahora las cosas se mueven un poco más rápido. Creamos tarballs del sitio fuente, hacemos un directorio objetivo y extraemos el tarball allí:

1
#backup source_directory

2
cd $source_directory
3
# add -v option to these if you want to see verbose file listings

4
tar -czf source_clone_$NOW.tar.gz .
5
#unzip clone in target directory

6
mkdir -p $target_directory
7
tar -xzf source_clone_$NOW.tar.gz -C $target_directory
8
#remove tarball of source

9
rm source_clone_$NOW.tar.gz
10
cd $target_directory

También ejecutamos los permisos de archivos estándar para WordPress para asegurarnos de que todo esté configurado correctamente y de forma segura:

1
# Reset Directory Permissions

2
find $target_directory -type d -exec chmod 755 {} \;
3
find $target_directory -type f -exec chmod 644 {} \;

Actualice el archivo de configuración de WP

continuación, usamos Perl para buscar y reemplazar la autenticación de la base de datos fuente con la información de la base de datos de destino:

1
#set database details with perl find and replace

2
perl -pi -e "s/$source_dbname/$target_dbname/g" wp-config.php
3
perl -pi -e "s/$source_dbuser/$target_dbuser/g" wp-config.php
4
perl -pi -e "s/$source_dbpass/$target_dbpass/g" wp-config.php
5
echo "define('RELOCATE',true);" | tee -a wp-config.php
6
#echo "define('WP_HOME','http://$target_domain');" | tee -a wp-config.php

7
#echo "define('WP_SITEURL','http://$target_domain');" | tee -a wp-config.php

8
echo "================================"
9
echo "Directory duplicated"
10
echo "================================"

También agrego la configuración RELOCATE al final del archivo. Si lo desea, puede reemplazar esto con la configuración estática de WP_HOME y WP_SITEURL.

Copia la base de datos

A continuación, volcamos la base de datos, creamos una nueva base de datos con permisos proporcionados por el usuario y luego le importamos la base de datos:

1
# Begin Database Duplication

2
# Export the database

3
mysqldump -u$mysql_user -p$mysql_pass $source_dbname > $target_directory/clone_$NOW.sql
4
# Create the target database and permissions

5
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'"
6
# Import the source database into the target

7
mysql -u$mysql_user -p$mysql_pass $target_dbname < $target_directory/clone_$NOW.sql
8
echo "================================"
9
echo "Database duplicated"
10
echo "================================"

Una vez más, me pareció mejor utilizar la autenticación maestra de MySQL para estas actividades al configurar las configuraciones de la base de datos en función del sitio de origen y la configuración de clonación de sitio único.

Copie la configuración del servidor web

Finalmente, estamos listos para concluir y presionar el botón de inicio. Es raro ver este tipo de scripts gestionar el paso adicional para la configuración del servidor web. Entonces, yo también quería hacer eso.

Copié el archivo Apache .conf del sitio de origen a un nuevo archivo .conf para el clon. Usé Perl para reemplazar cadenas por los dominios y las rutas de directorio. Luego, activé el sitio con Apache y recargué el servidor web:

1
#Activate Web Configuration

2
cp $default_apache_directory/$source_conf $default_apache_directory/$target_conf
3
#set database details with perl find and replace

4
perl -pi -e "s/$source_domain/$target_domain/g" $default_apache_directory/$target_conf
5
perl -pi -e "s|${source_directory}|${target_directory}|g" $default_apache_directory/$target_conf
6
a2ensite $target_conf
7
service apache2 reload
8
echo "================================"
9
echo "Web configuration added"
10
echo "================================"
11
echo "Clone is complete."
12
echo "Test at http://"$target_domain
13
echo "================================"
14
fi

Y eso es. Así es como se ve el texto en la vida real:

1
===================================================
2
Clone WordPress Script
3
===================================================
4
MySQL Master Username (e.g. root-admin): harry_potter
5
harry_potter
6
MySQL Master Password (e.g. super-strong-password): voldemoort~jenny7!
7
voldemoort~jenny7!
8
Source Domain (e.g. gardening.io): 
9
gardening.io
10
Source Directory (no trailing slash e.g. /var/www/gardening): 
11
/var/www/gardening
12
Source Database Name (e.g. gardening): database_gardening
13
database_gardening
14
Source Database User (e.g. user_for_garden): hermione
15
hermione
16
Source Database Pass (e.g. pwd_garden): !987654321abcdefgh#
17
!987654321abcdefgh#
18
Source Conf File (e.g. gardening.conf): gardening.conf
19
gardening.conf
20
Target Domain (e.g. cycling.io): 
21
cycling.io
22
Target Directory (no trailing slash e.g. /var/www/cycling): /var/www/cycling
23
/var/www/cycling
24
Target Database Name (e.g. cycling): database_cycling
25
database_cycling
26
Target Database User (e.g. user_for_cycling): hedwig
27
hedwig
28
Target Database Pass (e.g. pwd_cycling): 
29
pwd_for_cycling_not_hogwartz
30
Target Conf File (e.g. cycling.conf): 0007b-cycling.conf               
31
0007b-cycling.conf
32
Clone now? (y/n)
33
y
34
===================================================
35
WordPress Cloning is Beginning
36
===================================================
37
tar: .: file changed as we read it
38
define('RELOCATE',true);
39
================================
40
Directory duplicated
41
================================
42
================================
43
Database duplicated
44
================================
45
Enabling site 0007b-cycling.
46
To activate the new configuration, you need to run:
47
  service apache2 reload
48
 * Reloading web server apache2                                                                                     * 
49
================================
50
Web configuration added
51
================================
52
Clone is complete.
53
Test at http://cycling.io
54
================================

En mis pequeños sitios de WordPress, ¡la duplicación tomó solo de 30 a 90 segundos!

Letra pequeña

Hay un par de cosas más que necesitarás saber.

Ruta de acceso directo al principio

Primero, para iniciar sesión en su sitio clonado, deberá usar la ruta wp-login.php en lugar de wp-admin, que redirige a la URL del sitio fuente, p. http://clone.io/wp-login.php como se muestra a continuación:

Clone WordPress Use the wp-login php pathClone WordPress Use the wp-login php pathClone WordPress Use the wp-login php path

Cambiando Dominios

Dado que WordPress codifica gran parte de su dominio fuente en la base de datos, he descubierto que usar la configuración RELOCATE en wp-config.php hace que sea fácil actualizar esto a través de General > Configuración. Simplemente guarde el formulario con la nueva URL de destino:

Clone WordPress General Domain SettingsClone WordPress General Domain SettingsClone WordPress General Domain Settings

Una vez que haya guardado la URL de destino clonada, puede eliminar manualmente la configuración RELOCATE de wp-config.php.

Sin embargo, un colega sugiere que puede utilizar una herramienta como Búsqueda y Reemplazo de InterconnectIT para bases de datos de WordPress. También se ha documentado en Envato Tuts + en la migración de WordPress a través de hosts, servidores y URL.

El script final

Esta es la última secuencia de comandos para wpclone.sh. Siéntase libre de cambiar los valores predeterminados:

1
#!/bin/bash -e

2
# Clone a WordPress site via Bash script

3
clear
4
echo "==================================================="
5
echo "Clone WordPress Script"
6
echo "==================================================="
7
# Set Default Settings (helpful for testing)

8
default_mysql_user=$"root-admin"
9
default_mysql_pass=$"super-strong-password"
10
default_source_domain=$"gardening.io"
11
default_target_domain=$"cycling.io"
12
default_source_directory=$"/var/www/gardening"
13
default_target_directory=$"/var/www/cycling"
14
default_apache_directory=$"/etc/apache2/sites-available"
15
default_source_conf=$"gardening.conf"
16
default_target_conf=$"cycling.conf"
17
default_source_dbname=$"gardening"
18
default_source_dbuser=$"user_for_garden"
19
default_source_dbpass=$"pwd_garden"
20
default_target_dbname=$"cycling"
21
default_target_dbuser=$"user_for_cycling"
22
default_target_dbpass=$"pwd_cycling"
23
NOW=$(date +"%Y-%m-%d-%H%M")
24
25
#Request MySQL Admin

26
read -p "MySQL Master Username (e.g. "$default_mysql_user"): " mysql_user
27
mysql_user=${mysql_user:-$default_mysql_user}
28
echo $mysql_user
29
read -p "MySQL Master Password (e.g. "$default_mysql_pass"): " mysql_pass
30
mysql_pass=${mysql_pass:-$default_mysql_pass}
31
echo $mysql_pass
32
33
# Request Source Settings

34
read -p "Source Domain (e.g. "$default_source_domain"): " source_domain
35
source_domain=${source_domain:-$default_source_domain}
36
echo $source_domain
37
read -p "Source Directory (no trailing slash e.g. "$default_source_directory"): " source_directory
38
source_directory=${source_directory:-$default_source_directory}
39
echo $source_directory
40
read -p "Source Database Name (e.g. "$default_source_dbname"): " source_dbname
41
source_dbname=${source_dbname:-$default_source_dbname}
42
echo $source_dbname
43
read -p "Source Database User (e.g. "$default_source_dbuser"): " source_dbuser
44
source_dbuser=${source_dbuser:-$default_source_dbuser}
45
echo $source_dbuser
46
read -p "Source Database Pass (e.g. "$default_source_dbpass"): " source_dbpass
47
source_dbpass=${source_dbpass:-$default_source_dbpass}
48
echo $source_dbpass
49
# Request Source Settings

50
read -p "Source Conf File (e.g. "$default_source_conf"): " source_conf
51
source_conf=${source_conf:-$default_source_conf}
52
echo $source_conf
53
# Request Target Settings

54
read -p "Target Domain (e.g. "$default_target_domain"): " target_domain
55
target_domain=${target_domain:-$default_target_domain}
56
echo $target_domain
57
read -p "Target Directory (no trailing slash e.g. "$default_target_directory"): " target_directory
58
target_directory=${target_directory:-$default_target_directory}
59
echo $target_directory
60
read -p "Target Database Name (e.g. "$default_target_dbname"): " target_dbname
61
target_dbname=${target_dbname:-$default_target_dbname}
62
echo $target_dbname
63
read -p "Target Database User (e.g. "$default_target_dbuser"): " target_dbuser
64
target_dbuser=${target_dbuser:-$default_target_dbuser}
65
echo $target_dbuser
66
read -p "Target Database Pass (e.g. "$default_target_dbpass"): " target_dbpass
67
target_dbpass=${target_dbpass:-$default_target_dbpass}
68
echo $target_dbpass
69
read -p "Target Conf File (e.g. "$default_target_conf"): " target_conf
70
target_conf=${target_conf:-$default_target_conf}
71
echo $target_conf
72
echo "Clone now? (y/n)"
73
read -e run
74
if [ "$run" == n ] ; then

75
exit

76
else

77
echo "==================================================="
78
echo "WordPress Cloning is Beginning"
79
echo "==================================================="
80
#backup source_directory

81
cd $source_directory
82
# add -v option to these if you want to see verbose file listings

83
tar -czf source_clone_$NOW.tar.gz .
84
#unzip clone in target directory

85
mkdir -p $target_directory
86
tar -xzf source_clone_$NOW.tar.gz -C $target_directory
87
#remove tarball of source

88
rm source_clone_$NOW.tar.gz
89
cd $target_directory
90
# Reset Directory Permissions

91
find $target_directory -type d -exec chmod 755 {} \;
92
find $target_directory -type f -exec chmod 644 {} \;
93
#set database details with perl find and replace

94
perl -pi -e "s/$source_dbname/$target_dbname/g" wp-config.php
95
perl -pi -e "s/$source_dbuser/$target_dbuser/g" wp-config.php
96
perl -pi -e "s/$source_dbpass/$target_dbpass/g" wp-config.php
97
echo "define('RELOCATE',true);" | tee -a wp-config.php
98
#echo "define('WP_HOME','http://$target_domain');" | tee -a wp-config.php

99
#echo "define('WP_SITEURL','http://$target_domain');" | tee -a wp-config.php

100
echo "================================"
101
echo "Directory duplicated"
102
echo "================================"
103
# Begin Database Duplication

104
# Export the database

105
mysqldump -u$mysql_user -p$mysql_pass $source_dbname > $target_directory/clone_$NOW.sql
106
# Create the target database and permissions

107
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'"
108
# Import the source database into the target

109
mysql -u$mysql_user -p$mysql_pass $target_dbname < $target_directory/clone_$NOW.sql
110
echo "================================"
111
echo "Database duplicated"
112
echo "================================"
113
#Activate Web Configuration

114
cp $default_apache_directory/$source_conf $default_apache_directory/$target_conf
115
#set database details with perl find and replace

116
perl -pi -e "s/$source_domain/$target_domain/g" $default_apache_directory/$target_conf
117
perl -pi -e "s|${source_directory}|${target_directory}|g" $default_apache_directory/$target_conf
118
a2ensite $target_conf
119
service apache2 reload
120
echo "================================"
121
echo "Web configuration added"
122
echo "================================"
123
echo "Clone is complete."
124
echo "Test at http://"$target_domain
125
echo "================================"
126
fi

Si tiene sugerencias y personalizaciones, hágamelo saber. Publique sus pensamientos a continuación en los comentarios.

Limpieza para pruebas extendidas

Las siguientes líneas pueden serle útiles para eliminar y deshacer los sitios de prueba que clona. Puede personalizarlo según sus necesidades:

1
  sudo rm -ifr /var/www/clone
2
  sudo a2dissite clone.conf 
3
  sudo service apache2 reload
4
  sudo rm /etc/apache2/sites-available/clone.conf
5
  mysql -u root -p -e "drop database clone;"

Cambio de claves de seguridad en Wp-Config.php

También puede proteger mejor su nuevo sitio de WordPress reemplazando manualmente las claves de autenticación y las sales dentro del wp-config.php del sitio de destino:

1
/**#@+

2
 * Authentication Unique Keys and Salts.
3
 *
4
 * Change these to different unique phrases!
5
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key 
6
service}
7
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have 
8
to log in again.
9
 *
10
 * @since 2.6.0
11
 */
12
define('AUTH_KEY',         '+9%S?YVnr%5Vr!Et4J,@9/Z^.kT_Lu~5SGwr9=|Y &D-ARSWf$mF#J_3U:/iE>-R');
13
define('SECURE_AUTH_KEY',  'e3Wr7%Aa7H1,f<SR[Sp&g.kJw,.)bR-9jz{uU&[R{[J]ITK8q>:!5@y:Q;c01dL ');
14
define('LOGGED_IN_KEY',    '1I%pW%UyjRMqy__Da)siA)+V]Ur$9uXPmxv|eBjM~-m&-<WEy&+XXb43uh8&aP+U');
15
define('NONCE_KEY',        'A9]+PFgvxYa^<B}_.F?9A,!&i-.b6E.I?&?U*)X.Vh+fq`SfE[XJG+MG|pg;y%Ah');
16
define('AUTH_SALT',        'gT (4]L{mm!|>9kC<%59rB7sbe1)jW0GCnfupJT+8z-z#%o@b|[QH=i@h|-/t!9S');
17
define('SECURE_AUTH_SALT', 'ON8K<,WSy8+F ~XaQpCwC8(a/{HksMh<T)QLD]s[-:yv+fx8!`<!*~mgB32X:w5k');
18
define('LOGGED_IN_SALT',   'vHJ%{=X6$ue>ZIo|%|cisp1R}9cJ< Rz-J;H|:O2A7$+*aGXMH!+KvD+tZ/I*U5$');
19
define('NONCE_SALT',       '[ytQ;C)BvgU!#>a,,g|)~EKBQUig7Uv.-8?q%lmFte,P>,]f#.}i`Wx8S+_S@&.(');
20
/**#@-*/

Simplemente puede visitar https://api.wordpress.org/secret-key/1.1/salt/ y cortarlos y pegarlos en su archivo wp-config.php:

WordPress Authentication Key and Salt GeneratorWordPress Authentication Key and Salt GeneratorWordPress Authentication Key and Salt Generator

Ahora, si eres un purista de scripts de Linux, te dejaré actualizar el script Bash de instalación de WordPress de Gallagher. Su secuencia de comandos copió el WordPress predeterminado wp-config.php por lo que tendría cadenas fuente predecibles para reemplazar con las claves generadas por su secuencia de comandos:

1
#set WP salts

2
perl -i -pe'

3
  BEGIN {

4
    @chars = ("a" .. "z", "A" .. "Z", 0 .. 9);

5
    push @chars, split //, "!@#$%^&*()-_ []{}<>~\`+=,.;:/?|";

6
    sub salt { join "", map $chars[ rand @chars ], 1 .. 64 }

7
  }

8
  s/put your unique phrase here/salt()/ge

9
' wp-config.php

Nunca escribí una expresión regular para reemplazar los valores clave en archivos wp-config.php dinámicos preexistentes de nuestros sitios de origen. Si decide hacerlo, compártalo en los comentarios y agradece de antemano.

¿Preguntas?

Disfruté muchísimo el funcionamiento de este script. O, al menos debería decir que disfruté de ejecutarlo cuando terminé. Ojalá lo hubiera creado hace mucho tiempo, ya que es increíblemente eficaz y eficiente. Pude clonar pequeños sitios de WordPress y ejecutarlos en mi servidor en aproximadamente 60 segundos. Ninguno de los otros complementos o opciones de duplicación son tan uniformes.

Si tiene preguntas, publíquelas a continuación. O bien, puede ponerse en contacto conmigo en Twitter @reifman o enviarme un correo electrónico directamente. Por favor revisa mi página de instructores Envato Tuts+ para ver otros tutoriales que he escrito, como mi serie de inicio (Construyendo tu inicio con PHP).

enlaces relacionados