Saltar al contenido

elAyo.es – Sistemas

Linux, servicios, wordpress, scripting, modding, etc…

Archivo

Categoría: Scripts

Después de varios días liado con este tema, por fin tengo listo el script para clonar instalaciones de wordpress, lo voy a publicar en fase “beta”, ya que solo se ha problado en

una máquina con ubuntu server y un wordpress recién instalado, supongo que habrá que realizar más modificaciones si por ejemplo usuamos permant links.

Nuestro proyecto se va a componer de los siguientes puntos.

  1. Crear copia de base de datos y carpeta wordpress
  2. Modificar datos de conexión de la instalación clonada para emplear la base de datos generada.
  3. Dar privilegios al nuevo usuario mysql para trabajar sobre la nueva base de datos.
  4. Cambiar url del nuevo blog para que funcione correctamente.

Ahí va el script, si tenéis algún problema o duda, ruego me informéis para poder revisarlo, también se aceptan sugerencias.

#!/bin/bash
# SCRIPT DE CLONACION PARA WORDPRESS, CREADO POR ELAYO.ES
 
################################################################################
################# EMPIEZA LA PARTE DEL SCRIPT MODIFICABLE ######################
################################################################################
 
# Definimos la raiz de nuestro servidor apache
RUTA=/var/www
 
# Indicamos la base de datos a clonar
DBA=dba1
 
# Base de datos a crear, también será el nombre del nuevo usuario mysql
DBADEST=dba2
 
# Usuario con privilegios para crear bases de datos.
SERVER=localhost
USER=usuario
PASS=contraseña
 
# Password para el nuevo usuario mysql
PASS1=contraseña2
 
# Carpeta wordpress a copiar
FOLDER=wordpress
 
# dominio actual, ejemplo: elayo.es o www.elayo.es
DOMAIN=elayo.es
 
################################################################################
################# TERMINA LA PARTE DEL SCRIPT MODIFICABLE ######################
################################################################################
 
# Carpeta wordpress a copiar
WPDIR1=$RUTA/$FOLDER
 
# Definimos la ruta de la nueva carpeta a crear
WPDIR2=$RUTA/$DBADEST
 
# Hacemos un backup de la base de datos a clonar
BACKUP=`mysqldump --add-drop-table -h $SERVER -u $USER --password=$PASS $DBA > $TEMP/$DBADEST.sql`
$BACKUP
 
# Copiamos la carpeta de wordpress
cp -rp $WPDIR1 $WPDIR2
 
# Creamos la base de datos DBADEST y volcamos todos los datos
mysqladmin create -u $USER --password=$PASS $DBADEST
mysql -h $SERVER -u $USER --password=$PASS $DBADEST < $TEMP/$DBADEST.sql 
 
# Eliminamos archivos temporales
rm -rf $TEMP/$DBADEST.sql
 
# Sustituimos la base de datos de wordpress en wp-config.php
sed s/$DBA/$DBADEST/g $WPDIR2/wp-config.php > $WPDIR2/wp-config.php-new
rm $WPDIR2/wp-config.php
mv $WPDIR2/wp-config.php-new $WPDIR2/wp-config.php
 
# Establecemos comunicación con el servidor mysql, creamos el nuevo usuario y le damos privilegios sobre la nueva DBA.
# Aprovechamos la conexión para modificar los campos siteurl y home de la nueva DBA.
 
MYSQL="mysql -u $USER --password=$PASS"
$MYSQL << END
use $DBADEST;
GRANT ALL PRIVILEGES ON $DBADEST.* TO '$DBADEST'@'localhost' IDENTIFIED BY '$PASS1' WITH GRANT OPTION;
update ap_options set option_value='http://$DOMAIN/$DBADEST' where option_name='siteurl';
update ap_options set option_value='http://$DOMAIN/$DBADEST' where option_name='home';
END

Revisión 1 script 18/11/2009:
Efectivamente se ha probado el script con una instalación de wordpress que tiene configurados “enlaces permanentes” y no ha ido bien, la web se clona correctamente pero algunos links aún hacen referencia a la web clonada.

Solución temporal Revisión 1:
Si entramos en el wordpress clonado y dejamos los enlaces permanentes por defecto, el blog funciona correctamente.
Pendiente solución definitiva

Bugs encontrados
1 – Si en la variable DBADEST, definimos un nombre con un “-”, recibimos un error de mysql, para evitarlo, no crear nombres con guiones u otros caracteres especiales.

Vamos a explicar la forma de automatizar el alta de un usuario en el sistema, en este caso lo he adaptado para que dicho usuario no tenga acceso al bash, solo al servidor ftp.

useradd -N -g users -d /home/usuario -p`perl -e 'print crypt("'"$PASS"'","SA"), "\n";'` -c "Comentario" -s /bin/nologin usuario

A continuación os describo los parametros a modificar:

users = grupo a que va a pertenecer nuestro usuario

/home/usuario = ruta de nuestro ftp

comentario = añadimos una descripción

usuario = nombre del nuevo usuario

Nota: si tenéis problemas con la opción -N, la podéis omitir, solo sirve para no crear un grupo con el mismo nombre que el usuario, en alguna distro podría no funcionar.

 

Vamos a emplear la utilidad domain de plesk, para crear un subdominio con su usuario ftp, aparte definiremos una quota de almacenamiento de 100MB, todo ello desde la consola de comandos.

#!/bin/bash
echo Nombre de usuario
read user
echo Contraseña
read pass
echo Dominio
read domain
echo Subdominio
read subdomain
 
/usr/local/psa/bin/subdomain --create $subdomain -domain $domain -hard_quota 100M -php true -ftp_user native -login $user -passwd $pass

Ya véis que tiene poca complicación, para todos aquellos que tengan Plesk en su server, os recomiendo que le echéis un vistazo a la documentación proporcionada, la verdad, no está nada mal.

Poco a poco, vamos ir dejando de emplear la interfaz web que nos proporciona Plesk, para empezar a utilizar la consola (que es lo nuestro), yo por lo menos me aburro cuando veo que todo es tan facil :-(

Para empezar, he creado este pequeño script que nos crea una base de datos y le asigna un usuario, de esta manera nos estamos ahorrando algo de tiempo y a demás, nos puede servir para otras muchas cosas si le ponemos un poco de imaginación.

#!/bin/bash
# Crea base de datos y usuario mysql
echo Nombre de usuario
read user
echo Contraseña
read pass
echo Dominio
read domain
echo Base de datos
read dba
/usr/local/psa/bin/database --create $dba -domain $domain -type mysql
/usr/local/psa/bin/database -u $dba -add_user $user -passwd $pass

Como véis, es un pequeño script interactivo, en las primeras lineas nos consulta los datos necesarios, y en las dos últimas se crean base de datos y usuario respectivamente.

Vamos a ver un comando bastante interesante para VirtualBox, si necesitamos que una máquina virutal arranque durante el inicio del sistema, nos bastará con crear el siguiente script y ejecutarlo en el inicio de sessión de nuestro usuario por defecto.

#!/bin/bash
nohup VBoxSDL -vm VM &
exit

Si necesitamos que se ejecute a pantalla completa, añadimos la opción –fullscreen, de esta manera podemos tener un windows por encima de nuestro querido Linux ;-)

#!/bin/bash
nohup VBoxSDL -vm VM --fullscreen
exit