Implementar copias de seguridad automáticas con Dropbox
Este artículo te explica cómo configurar una cuenta de Dropbox y Prontus para poder usar la funcionalidad de creación de copias de seguridad automáticas de tus artículos.
Última modificación: Martes 26 de julio de 2022
Prontus te permite implementar respaldos automatizados del contenido de un sitio Prontus usando la plataforma Dropbox. Dropbox es un sistema de almacenamiento de objetos en la nube de amplio uso y también de bajo costo (USD 10 por 1 TB). A la comodidad de un almacenamiento sin preocupaciones de hardware se le suma el hecho de que posee clientes para la mayoría de los SOs de escritorio, sincronizando automáticamente lo que se encuentra en la nube con el disco de uno o más PCs.
Todo esto lo hace sumamente atractivo como sistema de respaldo secundario, primero como copia de seguridad del contenido de un sitio hecho en Prontus (como Prontus no depende de una base de datos, se
cumple con facilidad que todos los archivos necesarios pesarán menos de 150 MB, el límite de Dropbox para archivos continuos), aunque posiblemente se deba tener en cuenta el peso de archivos multimedia, especialmente de video. Para resolver este detalle, Prontus te permite especificar si no deben respaldarse ciertos tipos de archivos, y también agregar directorios específicos al respaldo.
Para crear los respaldos, Prontus usa la versión 2 de la API de Dropbox.
Para poder usar la funcionalidad de respaldo con Dropbox debes primero crear una cuenta de usuario y una aplicación en Dropbox. Para esto, debes registrarte en dropbox.com y luego crear una aplicación en la sección para desarrolladores de Dropbox.
Con tu aplicación creada, debes seguir estos pasos:
- Seleccionar la opción "Dropbox API app"
- Elegir como tipo de datos "Files and datastores"
- Limitar la aplicación a su propio directorio, marcando "Yes" en esa opción.
- Proveer un nombre, y dar click en "Create App".
Una vez creada la aplicación, deberás generar un token. Para esto, en la pestaña "Settings", en la sección "OAuth 2" debes hacer click en el botón "Generate". Dropbox te devolverá un access token, un texto semejante a "6St_M2m2Cf4ARRGGHHAPx8vNXQaJB71hs8V87hF9zhWtH0zMnAdX88B-laX6pBC4
". Debes copiarlo e ingresarlo en la configuración de Prontus, en la vista Dropbox, como se explica en Configuración de Dropbox.
La solución de respaldos a Dropbox funciona agregando o actualizando los artículos y portadas que se guardan posteriormente a su activación. Para generar un respaldo inicial del contenido preexistente debes diseñar un script que copie todo el contenido previo. El código siguiente puede servirte como ejemplo. Dado que usa librerías incluídas con Prontus, debes crearlo dentro del directorio /cgi-cpn/
para evitar problemas de inclusión de módulos:
#!/usr/bin/perl
#
# Algoritmo recursivo para respaldar un directorio Prontus en Dropbox.
#
use strict;
use lib_dropbox; # módulo con las subrutinas necesarias.
# Token de la aplicacion en Dropbox.
my $ATOKEN = ''; # CUSTOM
&lib_dropbox::init($ATOKEN);
# ----- Para probar acceso solamente -----
#print &lib_dropbox::getInfo() . "\n";
#my @entries = &lib_dropbox::getDir('/');
#foreach my $entry (@entries) {
# print "$entry\n";
#}
# ----- /Para probar acceso solamente -----
# Copia todo a Dropbox.
&recurseDirs('/[path_al_sitio_prontus]','/[path_al_directorio_destino]'); # CUSTOM
print "\n";
# ----------------------------------------------------------------------------- #
# Recorre los directorios recursivamente, subiendo a Dropbox los archivos que no
# existen o que tienen un peso distinto.
# @param string source el path completo al directorio a respaldar
# @param string destination el path relativo de destino en Dropbox.
# Debe ser el nombre del directorio de Prontus, para mantener la misma estructura.
sub recurseDirs {
my( $source,$destination) = @_;
my ($entry,$dropBoxEntry,$path,$esdir,$size);
my (@entries,@dropboxEntries);
my %dropboxFileSizes;
print "Inicio: $source -> $destination\n"; # debug
opendir(DIR, $source) || die "Can't opendir " . $source . $!;
@entries = readdir(DIR);
closedir DIR;
# Lee las entradas de dropbox en el destino. \t\t
@dropboxEntries = &prontus_dropbox::getDir($destination);
# Obtiene los tamanos de archivo. Si es un directorio asigna el tamano -1.
%dropboxFileSizes = ();
print " Listado de $destination en dropbox:\n";
foreach $dropBoxEntry (@dropboxEntries) {
($path,$esdir,$size) = split(/\t/,$dropBoxEntry);
# Elimina los directorios superiores del path.
if ($path =~ /\/([^\/]+)$/) {
$path = $1;
}else{
$path = '/';
}
# Asigna el tamano.
if ($esdir) {
$dropboxFileSizes{$path} = -1;
}else{
$dropboxFileSizes{$path} = $size;
}
print " $path $size\n";
}
# Recorre los archivos y subdirectorios.
foreach $entry (sort @entries) {
# Si es un directorio, entonces aplica de nuevo la rutina en forma recursiva.
# No copia los directorios que empiezan con un punto.
if ((-d "$source/$entry") && ($entry !~ /^\./)) {
&recurseDirs("$source/$entry","$destination/$entry");
}
if (-f "$source/$entry") {
# Si no existe en dropbox o si los tamanos son distintos, lo sube.
if ( $dropboxFileSizes{$entry} != -s "$source/$entry") {
print " sube: $source/$entry $destination/$entry\n";
print &prontus_dropbox::putFile("$source/$entry","$destination/$entry");
print "\n";
}
}
}
} # recurseDirs
Conceptos Básicos
¿Qué es Prontus?
Estructura de directorios
Glosario
Navegadores soportados
Tutoriales
Instalación de Prontus CMS
Implementar un nuevo sitio en Prontus
Cómo crear un FID
Cómo crear una plantilla de artículo
Cómo crear una plantilla de portada
Cómo crear plantillas de formulario
Cómo implementar un formulario
Cómo implementar un buscador
Cómo implementar un buscador Elasticsearch
Cómo crear una plantilla de taxonomía
Cómo crear plantillas de tags
Cómo crear una plantilla de listado
Cómo crear una plantilla de tags jerárquicos
Implementar carga de videos en Prontus
Integración de Redes Sociales
Instalación y Configuración
Requerimientos
Configuración del servidor
Base de datos
Asegurar la plataforma
Instalación con Wizard Prontus
Ajustes post-instalación
Archivos de configuración de Prontus
Friendly URLs
Friendly URLs para imágenes
SSI en Prontus
Logs de Eventos
Ejecutar procesos periódicamente con cron
Debugging
Plantillas
Plantillas de FID
Plantillas de artículo
Plantillas de portada
Plantillas de taxonomía
Plantillas de artículos relacionados
Plantillas de tags
Plantillas de listado
Plantillas de tags jerárquicos
Plantillas de mapa de taxonomía
Plantillas de mapa de tags
Marcas
Tipos de marcas
Diccionario de marcas
Marcas para texto
Marcas de lógica
Marcas de despliegue
Marca Menú y Panel
Parsing de marcas en formularios Prontus
Funcionalidades
Funcionalidades SEO en Prontus CMS
Multivistas
Galería de Imágenes
Buscador Multivista
Buscador
Buscador Elasticsearch
Calendarios
Imprimir artículos
Posting de contenidos
Plugins
Post-procesos
Prontus functions
Implementar copias de seguridad automáticas con Dropbox
Implementar múltiples ediciones
Regeneración masiva de artículos via línea de comandos