Automatización de la desinstalación de WordPress
El segundo post de la serie sobre automatización trata sobre la desinstalación de un servidor WordPress que fue instalado con el script que explicamos en el post anterior de la serie. Con otras instalaciones es muy probable que este script de desinstalación no funcione sin modificaciones.
El script de desinstalación no utiliza ningún archivo de configuración. Tan solo requiere un parámetro al lanzar el script, el cual debe ser el nombre del dominio del servidor que vamos a desinstalar. El script funciona en local.
Como en el script anterior, tenemos las función iferror que, en caso de que sea llamada, sale de script con un mensaje.
# function: iferror # produces an exit code 1 with message function iferror { if [[ $? -eq 1 ]]; then echo $1; exit 1; fi }
Justo al iniciarse la ejecución, comprueba que el administrador haya introducido un parámetro.
if [[ $# -eq 0 ]]; then echo "You must enter a FQDN as parameter. \ Example: ./uninstall_wordpress.sh yourdomain.org"; exit 1; else domain=$1 fi
Esta comprobación aún requiere mejoras. Si el parámetro no es un nombre de dominio, el script terminará su ejecución antes de hacer modificación alguna, cuando no encuentre el dominio para ser desinstalado.
A continuación, comprueba que el usuario que ha lanzado el script sea root.
if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi
A partir del nombre de dominio introducido como parámetro, el script encuentra el directorio dónde WordPress está instalado:
# function: read_root_path # Read root path from Nginx server function read_root_path { if [[ -e /etc/nginx/sites-available/$domain.conf ]];then wp_path=$(grep -E "root.*$domain" /etc/nginx/sites-available/$domain.conf \ | awk -F' ' '{print substr($2, 1, length($2)-1)}'); else iferror "Site is not available"; fi }
Para ello lee el archivo de configuración del servidor en Ngnix y almacena el directorio en la variable wp_path
Conociendo la ruta en la que se encuentra la instalación, es posible leer el archivo wp-config.php adecuado.
# function: get_config_parameters # Read wp-config.php to get parameters needed to uninstall function get_config_parameters { wp_cnf=$wp_path/wp-config.php db_name=$(grep "DB_NAME" $wp_cnf | awk -F"'" '{print $4}') db_user=$(grep "DB_USER" $wp_cnf | awk -F"'" '{print $4}') db_password=$(grep "DB_PASSWORD" $wp_cnf | awk -F"'" '{print $4}') db_host=$(grep "DB_PASSWORD" $wp_cnf | awk -F"'" '{print $4}') if [[ $db_host == '' ]]; then db_host=localhost fi }
Define las variables con el nombre de la base de datos, junto usuario y password de la misma, además del host en la que está funcionando.
Con esos datos, podemos proceder. Siguiente paso, el script elimina la base de datos:
# function: mysql_remove_database # Remove database from mysql function mysql_remove_database { SQL="drop database if exists $db_name;"; mysql -u$db_user -p$db_password -e "$SQL" || iferror "Database not removed"; }
Ejecuta una sentencia Mysql con las variables que hemos definido antes. Esta función eliminará la base de datos y no será posible recuperarla sin no hay alguna copia en algún otro lugar. En el siguiente post de la serie, publicaré un script para automatizar backups de todo el sitio y enviarlos a un host remoto.
La siguiente función, elimina el directorio raíz del sitio de WordPress:
# function: remove_root_path # remove path of WordPress installation function remove_root_path { if [[ -d $wp_path ]]; then rm -rf $wp_path; else iferror "Root path does not exists" fi }
La siguientes dos funciones, eliminan el servidor de Nginx. La primera de ellas deshabilita el servidor borrando el enlace simbólico; la segunda, elimina la disponibilidad del servidor.
# function: nginx_disable_site # disable site from sites-enabled function nginx_disable_site { if [[ -e /etc/nginx/sites-enabled/$domain.conf ]]; then rm -f /etc/nginx/sites-enabled/$domain.conf; systemctl reload nginx; else iferror "Site is not enabled" fi } #function nginx_remove_site # remove server from sites-available function nginx_remove_site { if [[ -e /etc/nginx/sites-available/$domain.conf ]]; then rm -f /etc/nginx/sites-available/$domain.conf; else iferror "Site is not available " fi }
La función start ejecuta la funciones en serie. Una función a las que llame esta función no se ejecuta si la función anterior no se ha ejecutado con éxito, a excepción de la primera de ellas.
function start { read_root_path \ && get_config_parameters \ && mysql_remove_database \ && remove_root_path \ && nginx_disable_site \ && nginx_remove_site }
Por último, tan sólo hay que llamar a la función start para ejecutar todo el script.
Todos los scripts de esta serie relacionados con WordPress están en mi github.
Saludos 🙂