Feb 072013
 

En este articulo veremos como utilizar este completo script de backup y restore para GNUPanel gnupanel-backup_0.1.0.tar.bz2
Agradecemos a GNUtransfer el habernos cedido un VPS y otros recursos para escribir este articulo.

Nota: Debemos tener disponible una cuenta de ftp para hacer el backup de nuestro servidor.
Nota 2: Este script esta diseñado para hacer backup de GNUPanel.

Nos aseguramos de tener instalados los paquetes duplicity, rsync, ncftp, mawk y por supuesto GNUPanel.

root@vps146167:/# apt-get install rsync duplicity ncftp mawk
Reading package lists... Done
Building dependency tree
Reading state information... Done
mawk is already the newest version.
rsync is already the newest version.
ncftp is already the newest version.
duplicity is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
root@vps146167:/#

Descargamos el script, lo descomprimimos, ingresamos en el directorio gnupanel-backup_0.1.0 y ejecutamos ./install.sh

root@vps146167:/#
 cd /tmp
root@vps146167:/tmp# wget http://downloads.geeklab.com.ar/files/scripts/gnupanel-backup_0.1.0.tar.bz2
--2013-02-06 18:06:50--  http://downloads.geeklab.com.ar/files/scripts/gnupanel-backup_0.1.0.tar.bz2
Resolving downloads.geeklab.com.ar (downloads.geeklab.com.ar)... 69.61.29.79
Connecting to downloads.geeklab.com.ar (downloads.geeklab.com.ar)|69.61.29.79|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3941 (3.8K) [application/x-bzip2]
Saving to: `gnupanel-backup_0.1.0.tar.bz2'

100%[=====================================================================================================================================================================================================================================================================================>] 3,941       --.-K/s   in 0s

2013-02-06 18:06:50 (61.7 MB/s) - `gnupanel-backup_0.1.0.tar.bz2' saved [3941/3941]

root@vps146167:/tmp# tar xf gnupanel-backup_0.1.0.tar.bz2
root@vps146167:/tmp# cd gnupanel-backup_0.1.0/
root@vps146167:/tmp/gnupanel-backup_0.1.0# ./install.sh
root@vps146167:/tmp/gnupanel-backup_0.1.0#

Luego editamos el archivo /etc/gnupanel/gnupanel-backup.conf, Veremos las distintas variables.

DIRS: Es un listado de los directorios que se respaldaran debería quedar así

Para Ubuntu

#DIRS="/etc /var/log /var/www /var/spool/squirrelmail /var/lib/squirrelmail /var/mail/correos /var/lib/mailman/archives /var/lib/mailman/data /var/lib/mailman/lists /var/lib/awstats /var/lib/dbconfig-common" #DEBIAN
DIRS="/etc /var/log /var/www /var/spool/squirrelmail /var/lib/squirrelmail /var/mail/correos /var/lib/mailman/archives /var/lib/mailman/data /var/lib/mailman/lists /var/lib/awstats" #UBUNTU

Para Debian

DIRS="/etc /var/log /var/www /var/spool/squirrelmail /var/lib/squirrelmail /var/mail/correos /var/lib/mailman/archives /var/lib/mailman/data /var/lib/mailman/lists /var/lib/awstats /var/lib/dbconfig-common" #DEBIAN
#DIRS="/etc /var/log /var/www /var/spool/squirrelmail /var/lib/squirrelmail /var/mail/correos /var/lib/mailman/archives /var/lib/mailman/data /var/lib/mailman/lists /var/lib/awstats" #UBUNTU

PG_VERSION: La versión de postgresql que tengamos instalada típicamente 8.1, 8.3, 8.4, 9.1

PG_VERSION=9.1

FTP_USER: Usuario FTP
FTP_PASSWORD: Contraseña FTP
FTP_SERVER: Dirección FTP

FTP_USER=ftpuser
FTP_PASSWORD=ftppassword
FTP_SERVER=192.168.1.50

LOCAL_DIR_BACKUP: Directorio local donde se copiaran los archivos antes de ser subidos al servidor FTP
LOCAL_DIR_RESTORE: Directorio local donde se copiaran los archivos desde el FTP antes de hacer el restore.

LOCAL_DIR_BACKUP=/var/backups/gnupanel
LOCAL_DIR_RESTORE=/var/backups/gnupanel-restore

Estos cuatro parámetros son para el duplicity
REMOVE_OLDER: Eliminar todos grupos de respaldo mayor que el tiempo dado.
VOLSIZE: Cambiar el tamaño del volumen en Mb.
DAY_FULL: Duplicity hace un backup incremental, este valor indica que día de la semana realiza un backup completo, valores posibles de 1, 2, 3, 4, 5, 6, 7
DUPLICITY_GPG_PASSPHRASE: Duplicity encripta los datos que se envían al FTP, esta es la contraseña que se usa para esa encriptación.

REMOVE_OLDER=7D
VOLSIZE=100
DAY_FULL=7

DUPLICITY_GPG_PASSPHRASE=change_for_random_string

DROP_LOCAL_DIR_BACKUP: “yes” borra el directorio LOCAL_DIR_BACKUP una vez subido al FTP.

DROP_LOCAL_DIR_BACKUP=no

Entonces una configuración típica debería lucir así (Las lineas resaltadas son las que típicamente deben ser modificadas)

#DIRS="/etc /var/log /var/www /var/spool/squirrelmail /var/lib/squirrelmail /var/mail/correos /var/lib/mailman/archives /var/lib/mailman/data /var/lib/mailman/lists /var/lib/awstats /var/lib/dbconfig-common" #DEBIAN
DIRS="/etc /var/log /var/www /var/spool/squirrelmail /var/lib/squirrelmail /var/mail/correos /var/lib/mailman/archives /var/lib/mailman/data /var/lib/mailman/lists /var/lib/awstats" #UBUNTU

PG_VERSION=9.1

FTP_USER=ftpuser
FTP_PASSWORD=ftppassword
FTP_SERVER=192.168.1.50

LOCAL_DIR_BACKUP=/var/backups/gnupanel
LOCAL_DIR_RESTORE=/var/backups/gnupanel-restore

REMOVE_OLDER=7D
VOLSIZE=100
DAY_FULL=7

DUPLICITY_GPG_PASSPHRASE=change_for_random_string

DROP_LOCAL_DIR_BACKUP=no

Luego ejecutamos el comando manualmente para chequear que todo funcione correctamente

root@vps146167:/# gnupanel-backup.sh
root@vps146167:/#

y chequeamos el archivo /var/log/gnupanel-backup.sh.err donde el script dirige todos los errores

root@vps146167:/# cat /var/log/gnupanel-backup.sh.err
root@vps146167:/#

y luego el archivo /var/log/gnupanel-backup.sh.log donde el script dirige la salida estandar

root@vps146167:/# cat /var/log/gnupanel-backup.sh.log
BEGIN backup PostgreSQL
END backup PostgreSQL
BEGIN backup MySQL
END backup MySQL
Import of duplicity.backends.giobackend Failed: No module named gio
Import of duplicity.backends.sshbackend Failed: No module named paramiko
NcFTP version is 3.2.5
Synchronizing remote metadata to local cache...
Deleting local /root/.cache/duplicity/b630c5d253d414ed6c552487122e44fc/duplicity-full-signatures.20130206T025047Z.sigtar.gz (not authoritative at backend).
Deleting local /root/.cache/duplicity/b630c5d253d414ed6c552487122e44fc/duplicity-full.20130206T025047Z.manifest (not authoritative at backend).
Deleting local /root/.cache/duplicity/b630c5d253d414ed6c552487122e44fc/duplicity-inc.20130206T025047Z.to.20130206T054111Z.manifest (not authoritative at backend).
Deleting local /root/.cache/duplicity/b630c5d253d414ed6c552487122e44fc/duplicity-new-signatures.20130206T025047Z.to.20130206T054111Z.sigtar.gz (not authoritative at backend).
Last full backup date: none
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1360194685.50 (Wed Feb  6 18:51:25 2013)
EndTime 1360194696.93 (Wed Feb  6 18:51:36 2013)
ElapsedTime 11.43 (11.43 seconds)
SourceFiles 5377
SourceFileSize 47382494 (45.2 MB)
NewFiles 5377
NewFileSize 47382494 (45.2 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 5377
RawDeltaSize 45737257 (43.6 MB)
TotalDestinationSizeChange 10863678 (10.4 MB)
Errors 0
-------------------------------------------------

Import of duplicity.backends.giobackend Failed: No module named gio
Import of duplicity.backends.sshbackend Failed: No module named paramiko
NcFTP version is 3.2.5
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Wed Feb  6 18:51:24 2013
No old backup sets found, nothing deleted.
Import of duplicity.backends.giobackend Failed: No module named gio
Import of duplicity.backends.sshbackend Failed: No module named paramiko
NcFTP version is 3.2.5
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Wed Feb  6 18:51:24 2013
No extraneous files found, nothing deleted in cleanup.
root@vps146167:/#

Con esto tenemos el backup completo, en caso de desastre el restore se hace de la siguiente manera

Instalamos GNUPanel pero solamente estos tres pasos

./install-dep.sh
./gnupanel-install.sh
gnupanel-config.sh

Los valores de IP, dominio principal, etc deben ser los mismos que en la instalación original.

Una vez que se termino de ejecutar gnupanel-config.sh instalamos el script gnupanel-backup_0.1.0.tar.bz2 y lo configuramos con los valores exactamente iguales a los que tenia al momento de hacer el backup. Solo dos valores se pueden cambiar
FTP_PASSWORD: En caso que se haya modificado.
PG_VERSION: Debe tener el de la versión instalada.

Luego ejecutamos el script con el parametro restore

root@vps146167:/# gnupanel-backup.sh restore
root@vps146167:/#

Y chequeamos el archivo /var/log/gnupanel-backup.sh.err

root@vps146167:/# cat /var/log/gnupanel-backup.sh.err
psql:/var/backups/gnupanel-restore/databases/postgresql/all_postgres.dump:22: ERROR:  role "postgres" already exists
root@vps146167:/#

Ese error es normal y no debería traer problemas.

Y en el archivo /var/log/gnupanel-backup.sh.log tenemos toda la salida estandar del script

Por ultimo reiniciamos el servidor

Con esto finalizamos el articulo.

  6 Responses to “Script de backup y restore para GNUPanel”

  1. Hola, si ejecutas el respaldo de este backup, hay alguna manera de corregir la ip luego, por ejemplo levanto el respaldo con el mismo dominio pero con otra ip, se puede? que partes habría que retocar?
    El respaldo entiendo guarda los dominios e ip pero si quiero mantener el sistema de respaldo y eventualmente debo cambiar dominio e ip podría ser según cómo funciona el panel?
    Donde indicas que genera respaldos incrementales, eso es incremental como rsync?
    Si genera backup incremental eso mantiene un respaldo completo, entonces para que realizar aparte un respaldo completo?

    Gracias.

  2. Lo de corregir la IP seguramente la semana que viene estaré publicando un nuevo post con una nueva versión del script con la opción incorporada de cambiar la IP.

    El script lo que hace es un día por semana hace el backup completo los demás días hace un incremental, eso es por si pasa algo con el primer full backup del cual dependen el resto, esto si quieres lo puedes modificar

    Gracias por tu interés.

  3. Hola, y al cambiar esa ip de la misma forma podría ser el dominio.

    Tengo algunas modificaciones que me funcionan para mantener un secundario estable pero me faltan detalles, por eso la pregunta.

    Se me ocurre un server con esos respaldos con un script tirando ping al primario y si cae el primario levanta el respaldo automático. Para eso tener un server preparado en otro lado con otra ip y otro dominio.

    Los dominios configurados con un ttl bajo para que cambie el dns pronto apuntando a la otra ip, no sé si será correcto todo pero por lo menos me ha funcionado parcialmente.

    Otros paneles tienen sistemas de respaldos parecidos a esto, si GNUPanel tuviera algo parecido o mejorado sería ideal.

    Sigo probando opciones.

    Gracias.

    • Hola,

      Corregir la IP es bastante sencillo es solo cambiar la cadena en el sql y los archivos que pudieran tenerla,
      cambiar el dominio no es tan sencillo pues hay muchas rutas que hay que modificar, tanto de web como de correo.
      Se puede llegar a hacer pero es una tarea mucho mas delicada.

      Saludos.

  4. Si lo entiendo, lo que pasa es que la mayoría de los registros de dominios por ejemplo .com no dejan colocar el mismo dominio como primario y secundario por lo que no se podría colocar en el secundario el mismo dominio con la segunda ip.

    Voy a esperar ese nuevo script para seguir con mis pruebas que por ahora algunas funcionan, no todo esta perdido.

    Muchas gracias.

  5. Por ejemplo yo actualmente tengo un respaldo con rsync, cada directorio lo respaldo de esa forma el tema era la ip, buscando ahora tengo esto.

    Respaldo los directorios con rsync luego paso en las carpetas este script, find *.* | xargs perl -pi -e ‘s/ip-vieja/ip-nueva/’

    Con eso le cambio las ip a los archivos y a decir verdad funciona súper bien y rápido, tengo respaldos con rsync cada x tiempo en los cron sin problemas, el tema era el respaldo de mysql y postgresql, digamos los directorios de esta forma es muy fácil hacerlo muy fácil.

    Pero las bases de datos en eso me quedo, tienes alguna forma de poder mejorar el tema de las bases de datos? la idea es respaldar completo las bd enviarlas por rsync al otro server y levantar los respaldos pasando antes el script para cambiar las ip.

    Ahora estoy pasando de Debian 6 a 7 por lo que no podre respaldar todos los directorios por completo, tienes el detalle completo de donde mete GNUPanel cada cosa, si tengo eso mas el respaldo bien hecho de las bases de datos tendría un sistema completo y muy fácil de usar.

    Gracias.