Bienvenido a cursohacker.es. Puedes acceder a todo el contenido líbremente pero si deseas poder crear tus propios temas en el foro y que tus respuestas y comentarios se publiquen de forma automática regístrate como alumno aquí

Copia Seguridad Web Completa

El peor escenario que se le puede dar a cualquier webmaster es sin duda alguna recibir la siguiente noticia: "El servidor ha perdido toda la información y hemos perdido todos los datos de tu página web". Que ocurra este hecho es áltamente improbable, pero la realidad es que ocurre a veces. El equipo de cursohacker ha tenido que asesorar a varias empresas afectadas por el incidente que ha ocurrido esta semana: http://www.meneame.net/story/cientos-paginas-webs-personales-borradas-copias-seguridad/1 

Si proteges las cosas que te importan protege tu web

Delegar la tarea de realizar copias de seguridad tanto de documentos importantes como de programas o incluso tu página web es una tarea importante. Si te acuerdas de realizar las copias de seguridad tarde, como ha ocurrido a los webmaster afectados, el problema tendrá una difícil solución. Por este motivo hoy vamos a presentarte un método para que utilices el CMS que utilices (wordpress, prestashop, drupal, magento, joomla....) puedas tener un sistema de copias de seguridad automático y seguro. Y es que no solo importa hacer copias de seguridad, también importa dónde las guardas. Desde el punto de vista de la seguridad informática necesitamos que las copias de seguridad cumplan cuatro condiciones de vital importancia:

  1. Integridad. Necesitamos asegurarnos que los datos que contiene la copia de seguridad no serán alterados por terceros.
  2. Privacidad. Necesitamos asegurarnos que los datos almacenados en la copia no serán accesibles a terceros.
  3. Disponibilidad. Necesitamos asegurarnos que lo copia estará en un lugar cuyo riesgo de pérdida es mínimo.
  4. Automática. Las copias de seguridad deben realizarse de forma automática para evitar que dejen de realizarse.

Teniendo en cuenta estas cuatro características que cualquier sistema de copias de seguridad debe cumplir vamos a mostraros como crear elaborar un sistema para proteger vuestra página web ante cualquier problema en el servidor.

Como realizar una copia de tu web completa y automatizada.

A partir de aquí este artículo se va a convertir en un tutorial sobre cómo hacer una copia de seguridad de tu web completa para poder restaurarla de forma rápida en caso de que se produza cualquier catástrofe en el servidor. Para ello vamos a tener en cuenta los siguientes puntos; para la automatización de la copia de seguridad, esto es, que se haga cada día, vamos a crear un script en PHP que se encargará de hacer el trabajo por nosotros. Para asegurarnos la disponibildad y que esta copia jamás se perderá vamos a hacer uso de Dropbox y para asegurarnos de que nadie pueda acceder a nuestra copia de seguridad en el supuesto caso de que accedan a nuestro Dropbox vamos a guardar la copia de seguridad comprimida con cotraseña.

Primer paso copia seguridad web

El primer paso para crear el sistea de copias de seguridad automatizadas será tener una cuenta dropbox. Dropbox es un sistema que se utiliza para poder sincronizar archivos en distintos equipos y también para que tengas una copia de los mismos en la nube. Si no tienes cuenta de Dropbox puedes fácilmente crearte una de forma gratuita aquí: www.dropbox.com. Una vez la tengas creadas vamos a utilizar Dropbox de forma profesional, que para ello estamos tratando de mejorar. Así que vamos a indicar a nuestro dropbox que vamos a crear una aplicación para subir archivos. Esto se indica a dropbox desde la siguiente dirección: https://www.dropbox.com/developers/apps Y pulsamos sobre "Create App"
Crear aplicación dropbox paso 1

Lo siguiente que debemos hacer es indicar a Dropbox el tipo de aplicación y los permisos que necesita, indicamos Dropbox API app, Ficheros y bases de datos (Files and datastores), para ganar seguridad indicamos que la aplicación solo necesita acceder a los archivos que ella misma crea, y finalmente elegimos un nombre:
Crear aplicacion dropbox

Al pulsar sobre el botón Create app, ya tendremos creada nuestra aplicación. Y mostrará un aspecto tal que así:

Como véis hemos indicado que solo podemos utilizarla nosotros (Develpment users -> Only you), solo tiene permiso para acceder a su carpeta y nos da los dos datos mas importantes que necesitamos para trabajar con esta aplicación; el AppKey y el App secret Estos dos datos son privados para vosotros. Cada uno tendréis una pareja de datos distintos. Esto es así porque cada uno utilizaréis estos datos para enviar las copias a vuestros respectivos DropBox. Ya tenemos nuestro Dropbox preparado para recibir copias de seguridad, ahora nos queda trabajarnos un script en el servidor que sea quien envíe dichas copias.

Segundo paso copia seguridad web

Para facilitarnos el trabajo nos vamos a descargar una librería que contiene todo lo necesario para poder trabajar con dropbBox desde PHP. Para no tener que buscar mucho os la dejo directamente descargable desde aquí: DropPHP-master.zip. Este artículo se ha publicado a finales de enero de 2014,  si estáis leyendo estas líneas pasados varios meses os recomiendo buscar la última versión publicada de DropPHP. Una vez descargada la vamos a descomprimir de modo que veremos los siguientes archivos:

Si estáis acostumbrados a programar en PHP con esto podréis dar rienda suelta a vuestra imaginación, ya que tenéis dos archivos de ejemplo, "sample.php" y "sample-form.php" para ver cómo funcionan. Pero si no sois programadores y dado que en el curso aún no hemos llegado a la parte de programación vamos a ver paso por paso cómo utilizar todo esto.
El primer paso será subir estos archivos al servidor donde está alojada nuestra página web. Si no sabes como hacerlo puedes conseguir Winscp de forma gratuita y ver un tutorial sobre como funciona en Tutorial de uso WinSCP. Una vez subido se nos quedará con el siguiente aspecto:
DropPHP WinSCP

Esta librería tiene un sistema de "Tokens", para verificar si tenemos permisos suficientes para trabajar con dropbox, por este motivo es necesario crear una carpeta nueva llamada "tokens" y que tenga permisos de escritura. Para crear esta carpeta hacemso click con el botón secundario en la parte blanca (justo debajo de OAuthSimple_license.txt) y seleccionamos nuevo directorio:

Llega el momento de verificar que nuestro servidor es capaz de comunicarse con DropBox. Así que vamos a abrir el archivo "sample-form.php" y en el vamos a meter el App Key y el App Secret. Podemos editar archivos directamente desde WinSCP, basta con hacer doble click sobre el mismo:

Aseguraos que no os equivocáis ya que de lo contrario la autentificación fallará y no podréis utilizar la aplicación. Una vez introducidos solo tenemos que pulsar sobre guardar para guardar los cambios y poder hacer la primera prueba. Yo estoy trabajando sobre un servidor de prueba, la dirección de mi servidor es 192.168.1.40, pero si vosotros estáis trabajando sobre vuestra web, debéis sustituir 192.168.1.40 por el nombre de vuestra web. Para hacer la primera prueba abrimos un navegador y navegamos a la siguiente dirección: http://192.168.1.40/DropPHP/sample-form.php Recordad sustituir 192.168.1.40 por la dirección de vuestra web. En el navegador aparecerá lo siguiente:
dopbox aplicacion
Como véis nos está diciendo que necesitamos dar permiso a la aplicación en DropBox para poder utilizarla. Así que hacemos click donde nos indica y llegamos a dropbox donde debemos permtirle el acceso:
autentificacion dropbox
Permitimos el acceso y dropbox nos lleva de nuevo a nuestra aplicación:

Si hemos llegado aquí es que todo hay ido correctamente, mediante este formulario de ejemplo que trae la librería DropPHP podríamos subir archivos a dropbox haciendo click en el botón "Seleccionar archivo" y posteriormente en "Upload!". Si queréis podéis probarlo. Nosotros continuamos con la siguiente tarea.

Tercer paso copia seguridad web

Ahora que ya tenemos una aplicación conectada a nuestro servidor, necesitamos automatizar la tarea de subir archivos para que sea nuestro propio servidor el que haga todo el trabajo de forma automática.

Vamos crear un primer archivo que le vamos a llamar subirDropbox.php en el directorio DropPHP, el cual se va a encargar de subir un archivo zip que nosotros generaremos y que contrendrá la copia de seguridad de toda nuestra web. Os dejaré todos los archivos que vamos a crear empaquetados juntos para que os sea mas fácil de subir. Cuando descarguéis el paquete completo de archivos abird el archivo subriDropbox.php y escribid en el tanto vuestro app_key como vuestro app_secret tal y como lo hicísteis en el example-form.php. Lo único que hace este archivo es coger un zip creado y subirlo a dropbox. Otro punto que tenéis que poner en este archivo es la ruta de vuestra web. Esto se ve en WinSCP en la parte derecha arriba:
ruta web winscp

Y con todo esto el archivo subirDropbox.php tendrá la siguiente apariencia:

Ahora vamos a crear un archivo que nos gestione las copias, será el encargado de saber si se ha hecho la copia de seguridad o si hay que hacerla y subirla a dropbox. El archivo se llamará gestorCopias.php, también está incluido en el paquete de archivos que dejaremos al final. El archivo gestorCopias.php trabaja de la siguiente manera. Primero comprueba si se ha hecho la copia de seguridad diaria, si se ha hecho para, sino crea la copia. La copia se crea siguiento estos pasos:

  1. Se hace una copia de toda la base de datos.
  2. Se crea un zip con todo el contenido de tu web protegido con contraseña
  3. Se sube a dropbox
  4. Se borra la copia de seguridad del servidor para evitar el acceso por parte de terceros (aunque la copia esté protegida con clave, se gana más en seguridad si la ocultamos a los demás).

En este archivo debéis de configurar tanto los datos de conexión a vuestra base de datos como la ruta de vuestra web, y lo mas importante LA CONTRASEÑA DEL ARCHIVO que contendrá la copia de seguridad:

Por último hay un fichero que lleva el control de copias de seguridad realizadas; este archivo se llama CopiasSubidas.txt y en cada linea guarda la fecha en la que se ha hecho la copia de seguridad. Con estos 3 archivos ya tenemos el sistema creado. Os dejo aquí el paquete con los archivos: sistema-copias-seguridad.rar. Debéis descomprimirlo, poner vuestros datos en cada uno de los archivos tal y como se ha explicado anteriormente y subirlo a vuestra carpeta DropPHP:

Fijaros que hemos borrado los dos archivos de ejemplo que teníamos "example.php" y "example-form.php". Esto es MUY importante ya que así evitaís que alguien pueda utilizarlos para subir cosas a vuestro dropbox.

Cuarto paso copia seguridad web

Ya tenemos nuestro sistema funcionando, para probarlo tan solo debéis navegar a la siguiente dirección: http//vuestraWeb/DropPHP/gestorCopias.php y veréis como se hace una copia de seguridad y se sube a la carpeta de la aplicación en Dropbox. Si volvéis a navegar de nuevo, no os creará una segunda copia de seguridad ya que el sistema sabe que hay hay una creada y no será hasa el próximo día hasta que se haga una nueva. La cuestión ahora es ¿Cómo hacemos que cada día se ejecute el sistema? Evidentemente el sistema de copia de seguridad debe ser automático y no depender de que nosotros habramos esa dirección cada día. Entonces debemos encontrar un método para que se habra sola cada día. 

Tenemos varias formas de solucionar este problema. Algunos hostings permiten la gestión de tareas automáticas, si es vuestro caso podéis indicar que todos los días a una hora cualquiera (recomiendo una hora nocturna que no haya muchas visitas) se haga la llamada a gestorCopias.php. Pero si no es el caso podéis hacer la siguiente modificación en vuestro archivo index.php y añadir la siguiente linea:

<iframe height="0" width="0" src="DropPHP/gestorCopias.php"></iframe>  

Esto hará que cada visitante que entre en vuestra web active el sistema, solo el primero de cada día creará copia de seguridad, los demás no lo harán, ya que el sistema sabrá que ya está hecha la copia de seguridad.

Esperamos que todo esto os sirva de ayudar para proteger vuestras webs frente a errores en el servidor y que no os pase como los que han sufrido las consecuencias de perder la web de un día para otro. Para cualquier duda puedes utilizar los comentarios o la sección de contacto.

Comentarios

Pero la copia de seguriad solo se realixa de la base de datos, y para respaldar todo los archivos web?.

Por cierto, tu captcha es muy fastidiosa. Usa otra mas amigable

Este sistema de copias de seguridad no solo copia la base de datos. Realiza una copia tanto de los ficheros como de la base de datos. Luego ambas copias las empaqueta en un archivo comprimido para que ocupen menos y las carga en dropbox.

Perdona mi torpeza pero estoy intentando seguir todos tus pasos y me muestra esto

Parse error: syntax error, unexpected '"' in /XXXXX/DropPHP/subirDropbox.php on line 17

Y no soy capaz de dar con el error.

Muchas gracias.

Creo que el error es porque tienes puesta una comilla de más.
Saludos.

Muchas gracias por compartir este tutorial, yo ya lo tengo funcionando en mi web !!

Cuando desde el sample-form.php añado un archivo de tamaño pequeño lo sube perfectamente, cuando es algo más grande por ejemplo 30kb ya no lo sube se queda el explorador cargando. ¿Sabes a que se puede deber?

Excelente tutorial, bastante bien explicado... solo se quedan unas cosas sueltas..

Bueno a mi me funciona la comunicación con Dropbox, me genera el archivo comprimido pero dentro esta otro archivo zip y así susesivamente.

A ver si sabes porque podría ser.

Atentamente, 

Diego!

Si te ha sido de utilidad Compárteme