Copias de seguridad de GeoServer

Nota

Fecha Autores
8 Octubre 2014

©2013 FAO Forestry

Excepto donde quede reflejado de otra manera, la presente documentación se halla bajo licencia : Creative Commons (Creative Commons - Attribution - Share Alike: http://creativecommons.org/licenses/by-sa/3.0/deed.es)

Un aspecto importante a la hora de administrar GeoServer es la creación de copias de seguridad. GeoServer almacena toda su configuración en el directorio de datos de GeoServer, referido a partir de ahora como $GEOSERVER_DATA.

Así, para realizar una copia de seguridad, es necesario copiar este directorio, comprimido por comodidad y optimización de espacio, a algún lugar fuera del servidor. Los siguientes comandos crearían una copia de la configuración de GeoServer en el fichero /tmp/geoserver-backup.tgz:

$ cd $GEOSERVER_DATA
$ tar -czvf /tmp/geoserver-backup.tgz *

Nótese que el comando tar, encargado de la compresión, se debe ejecutar en el directorio $GEOSERVER_DATA. Las opciones -czvf especificadas significan:

  • c: crear
  • z: comprimir en zip
  • v: verbose, muestra por pantalla los ficheros que se incluyen en la copia de seguridad
  • f: fichero resultante, especificado a continuación

Advertencia

Es muy importante guardar los ficheros con la copia de seguridad en una máquina distinta al servidor de GeoServer, ya que en caso de que haya algún problema con dicha máquina se pueden perder también las copias.

Para recuperar la configuración sólo tenemos que reemplazar el directorio $GEOSERVER_DATA por los contenidos del fichero. Para ello se puede descomprimir la copia de seguridad en un directorio temporal:

$ mkdir /tmp/copia
$ tar -xzvf /tmp/geoserver-backup.tgz --directory=/tmp/copia

A diferencia del comando tar que utilizamos para crear la copia de seguridad, ahora estamos usando la opción x (extraer) en lugar de c (crear) y estamos especificando con la opción --directory que queremos extraer la copia en el directorio /tmp/copia.

Una vez descomprimido sólo hay que reemplazar los contenidos del directorio $GEOSERVER_DATA por los del directorio /tmp/copia. Por seguridad, moveremos los contenidos actuales del directorio $GEOSERVER_DATA a otro directorio temporal:

$ mkdir /tmp/data
$ sudo mv $GEOSERVER_DATA/* /tmp/data/

Nótese que para vaciar el directorio tenemos que utilizar permisos de superusuario, con sudo, ya que generalmente el directorio $GEOSERVER_DATA pertenece al usuario que ejecuta GeoServer (tomcat7 en este ejemplo) y es distinto al usuario que administra el sistema.

Tras estas dos instrucciones el directorio $GEOSERVER_DATA estará vacío y tendremos los contenidos actuales en /tmp/data/ y la copia en /tmp/copia. Por tanto, sólo tenemos que copiar los contenidos de /tmp/copia a $GEOSERVER_DATA:

$ sudo cp -R /tmp/copia/* $GEOSERVER_DATA

De nuevo, al modificar el directorio $GEOSERVER_DATA tenemos que utilizar sudo.

Para que GeoServer pueda gestionar de nuevo esos ficheros, hay que cambiar el propietario de los ficheros recuperados para que tengan el mismo que el $GEOSERVER_DATA. Para ver qué usuario es este, podemos ejecutar el siguiente comando:

$ ls -l $GEOSERVER_DATA/..
total 4
drwxr-xr-x 17 tomcat7 tomcat7 4096 Oct  9 09:25 data

y ver que el usuario y grupo es tomcat7 y tomcat7. Con esta información, podemos restablecer los permisos así:

$ sudo chown -R tomcat7:tomcat7 $GEOSERVER_DATA/*

Por último, quedaría reiniciar GeoServer. En este ejemplo, se ejecuta dentro de un Tomcat7 por lo que basta con ejecutar:

$ sudo service tomcat7 restart

Creación de copias parciales

Algunos directorios dentro de $GEOSERVER_DATA pueden ocupar mucho espacio y no ser interesantes para las copias de seguridad frecuentes. Es el caso del directorio de GeoWebCache gwc, que contiene el cacheado de las teselas dibujadas para cada capa y puede llegar a ocupar varios Gigabytes.

Para evitar esto, sólo es necesario utilizar el comando tar de una manera ligeramente distinta, pasándole como parámetro los directorios dentro de $GEOSERVER_DATA que queremos excluir:

$ cd $GEOSERVER_DATA
$ tar -czvf /tmp/geoserver-partial-backup.tgz --exclude=www --exclude=gwc *

Nótesen los parámetros --exclude indicando que no se deben incluir en la copia los directorios www y gwc.

Advertencia

Es importante saber que una copia parcial no puede recuperarse del mismo modo que una copia total, ya que si reemplazamos todo el directorio, perderíamos los subdirectorios que no han sido copiados.

Así, para recuperar una copia parcial procederíamos de la misma manera que en el caso general, pero vaciando sólo los contenidos de $GEOSERVER_DATA que están en la copia.

Copia de un workspace

En otros casos, la copia de seguridad es interesante sólo para aspectos concretos, como un workspace.

Tómese por ejemplo la copia del workspace nfms. En este caso es más fácil hacer la copia completa de ese directorio que hacerla en $GEOSERVER_DATA y excluir todo lo que no es el workspace:

$ cd $GEOSERVER_DATA/workspaces/nfms
$ tar -czvf /tmp/geoserver-nfms-backup.tgz *

Para recuperar la copia, realizaremos los pasos anteriores pero sólo en el directorio $GEOSERVER_DATA/workspaces/nfms:

$ mkdir /tmp/copia
$ tar -xzvf /tmp/geoserver-nfms-backup.tgz --directory=/tmp/copia

La copia de los datos actuales la hacemos sólo para $GEOSERVER_DATA/workspaces/nfms:

$ mkdir /tmp/data
$ sudo mv $GEOSERVER_DATA/workspaces/nfms/* /tmp/data/

Tras estas dos instrucciones el directorio $GEOSERVER_DATA/workspaces/nfms estará vacío y tendremos la configuración actual del workspace en /tmp/data/ y la copia de seguridad del workspace en /tmp/copia. Por tanto, sólo tenemos que copiar los contenidos de /tmp/copia a $GEOSERVER_DATA/workspaces/nfms:

$ sudo cp -R /tmp/copia/* $GEOSERVER_DATA/workspaces/nfms

Por último, hay que cambiar el propietario de los ficheros recuperados:

$ sudo chown -R tomcat7:tomcat7 $GEOSERVER_DATA/workspaces/nfms/*

y reiniciar GeoServer:

$ sudo service tomcat7 restart