Hacer una copia o espejo de un sitio usando wget
A veces uno necesita hacer una copia completa de un sitio web para acceso fuera de línea, o también para convertir un sitio dinámico a estático, especialmente cuando un cliente tiene un sitio web en una versión obsoleta de un manejador de contenido como WordPress o Joomla en una versión muy vieja y corriendo una versión de PHP vulnerable. Esto es especialmente útil cuando el sitio web no requiere ser modificado. Esto trae como beneficio un sitio más veloz y más seguro, ya que un sitio estático HTML se envía tal cual al navegador de las personas usuarias, sin tener que ejecutar código PHP potencialmente vulnerable.
Con la herramienta de línea de comandos wget es posible de forma muy sencilla descargar un sitio web entero:
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent http://example.org
Explicación de algunos de los argumentos:
--mirror– Descarga recursivamente y hace otros ajustes relacionados, implica:-r -N -l inf --no-remove-listing.--convert-links– convierte enlaces y referencias en HTML como CSS, para poder ser vistas fuera de línea.--adjust-extension– Ajusta la extensión de los objetos html o css según el tipo de datos--page-requisites– Descarga objetos enlazados como hojas de estilo CSS e imágenes requeridos para ver el sitio fuera de línea.--no-parent– No subir a directorios superiores en el URL, útil cuando se está haciendo espejo de un URL específico como http://example.org/sub-directorio/
Ejemplo de conversión de sitio WordPress en un sistema cPanel:
# Entrar como usuario a shell, para no ejecutar comandos como root
su - user -s /bin/bash
# Crear directorio de descargas
mkdir download && cd download
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent http://example.org
# Hacer un respaldo del directorio raíz del sitio web
cd ..
mv public_html public_html~
# Colocar la copia descargada en línea
mv download/example.org public_html
# Probar sitio, ajustar detalles y opcionalmente borrar base de datos luego de hacer respaldo
# Con esto el sitio dinámico ha sido convertido a estático.
Referencias:
- GNU wget manual: https://www.gnu.org/software/wget/manual/wget.html
- Make Offline Mirror of a Site using wget: https://www.guyrutenberg.com/2014/05/02/make-offline-mirror-of-a-site-using-wget/