Copia de seguridad y restauración completa de GeoNode

El comando de administración para realizar una copia de seguridad y restaurar GeoNode permite extraer consistentemente los modelos de datos de GeoNode y GeoServer en un metaformato serializable que el procedimiento de restauración interpreta posteriormente para reconstruir exactamente toda la estructura.

En particular, la herramienta ayuda a los desarrolladores y administradores a extraer y serializar correctamente los siguientes recursos:

  • GeoNode (Modelo base de recursos):

    1. Capas (tanto ráster como vectoriales)

    2. Mapas

    3. Documentos

    4. Personas con credenciales

    5. Permisos

    6. Estilos asociados

    7. Datos estáticos y plantillas

  • GeoServer (Catálogo):

    1. Configuración y límites de los servicios OWS

    2. Modelo de seguridad junto con configuración de filtros de autenticación, usuarios y credenciales.

    3. Espacios de trabajo

    4. Tiendas (tanto DataStores como CoverageStores)

    5. capas

    6. Estilos

La herramienta expone dos comandos de administración de GeoNode, «copia de seguridad» y «restauración».

Los comandos permiten:

  1. Realice una copia de seguridad completa de los datos y accesorios de GeoNode en un archivo zip

  2. Configuración de GeoServer de copia de seguridad completa (conjuntos de datos físicos: tablas, archivos de forma, geotiffs)

  3. Restaure completamente los accesorios y el catálogo de GeoNode y GeoServer desde el archivo zip

El uso de esos comandos es bastante fácil y directo.

El primer paso es asegurarse de que todo esté configurado correctamente y que se respeten los requisitos para realizar con éxito una copia de seguridad y restauración de GeoNode.

Advertencia

Vale la pena señalar que esta funcionalidad requiere la última GeoServer Extension (2.9.x o superior) para que GeoNode funcione correctamente.

Nota

La documentación completa de GeoServer también está disponible aquí GeoServer Docs

Requisitos y configuración

Antes de ejecutar una copia de seguridad/restauración de GeoNode, es necesario asegurarse de que todo esté configurado y configurado correctamente.

Ajustes

Según las necesidades del administrador, se debe crear el archivo settings.ini antes de ejecutar una copia de seguridad o restauración.

Los archivos predeterminados se pueden encontrar en geonode/br/management/commands/settings_sample.ini y geonode/br/management/commands/settings_docker_sample.ini para los entornos clásico y Docker, respectivamente.El contenido es similar en ambos (un ejemplo de settings_sample.ini):

[database]
pgdump = pg_dump
pgrestore = pg_restore

[geoserver]
datadir = geoserver/data
dumpvectordata = yes
dumprasterdata = yes

[fixtures]
# NOTE: Order is important
apps  = contenttypes,auth,people,groups,account,guardian,admin,actstream,announcements,avatar,base,dialogos,documents,geoserver,invitations,pinax_notifications,layers,maps,oauth2_provider,services,sites,socialaccount,taggit,tastypie,upload,user_messages
dumps = contenttypes,auth,people,groups,account,guardian,admin,actstream,announcements,avatar,base,dialogos,documents,geoserver,invitations,pinax_notifications,layers,maps,oauth2_provider,services,sites,socialaccount,taggit,tastypie,upload,user_messages

El archivo settings.ini se puede crear en cualquier directorio accesible por GeoNode, y su ruta se puede pasar a los procedimientos de copia de seguridad/restauración usando el argumento -c (–config).

Hay algunas secciones diferentes del archivo de configuración que se deben verificar cuidadosamente antes de ejecutar un comando de copia de seguridad/restauración.

Configuración: Sección [base de datos]

[database]
pgdump = pg_dump
pgrestore = pg_restore

Esta sección es bastante sencilla.Contiene sólo dos propiedades:

  • pgvolcado;la ruta del comando local pg_dump.

  • pgrestore;la ruta del comando local pg_restore.

Advertencia

Esas propiedades se ignoran en caso de que GeoNode no esté configurado para usar una base de datos como backend (consulte las secciones settings.py y local_settings.py).

Nota

La configuración de conexión de la base de datos (tanto para GeoNode como para GeoServer) se tomará de los archivos de configuración settings.py y local_settings.py.Asegúrese de que estén configurados correctamente (también en la instancia de GeoNode de destino) y que se pueda acceder al servidor de la base de datos mientras se ejecuta un comando de copia de seguridad/restauración.

Configuración: Sección [geoserver]

[geoserver]
datadir = /opt/gs_data_dir
datadir_exclude_file_path =
dumpvectordata = yes
dumprasterdata = yes
data_dt_filter =
data_layername_filter =
data_layername_exclude_filter =

Esta sección permite habilitar/deshabilitar una copia de seguridad/restauración completa de datos de GeoServer.

  • datadir: la ruta completa de GeoServer Data Dir, por defecto /opt/gs_data_dir.La ruta debe ser accesible y totalmente escribible por los usuarios de geonode y/o httpd server al ejecutar un comando de copia de seguridad/restauración.

  • datadir_exclude_file_path: lista de rutas separadas por comas para excluir de geoserver_catalog.zip;Esta lista será enviada y administrada directamente por la API REST de GeoServer Backup.

  • dumpvectordata: un indicador booleano que habilita o deshabilita la creación de un volcado de datos vectoriales desde GeoServer (shapefiles o tablas DB).Si es falso (o no), los datos vectoriales no se almacenarán ni se restaurarán.

  • dumprasterdata: un indicador booleano que habilita o deshabilita la creación de un volcado de datos ráster desde GeoServer (geotiffs).Si es falso (o no), los datos ráster no se almacenarán ni se restaurarán.

  • data_dt_filter: {cmp_operator} {ISO8601} p.ej.> 2019-04-05T24:00 que significa «incluir en el archivo de copia de seguridad solo los archivos que se modificaron después de 2019-04-05T24:00

  • data_capaname_filter: lista separada por comas de nombres de capa, opcionalmente con sintaxis global, por ejemplo: toscana_*,italia;Sólo los datos originales RASTER y los volcados de tablas VECTORIAL que coincidan con esos filtros se incluirán en el archivo ZIP de respaldo.

  • data_capaname_exclude_filter: lista separada por comas de nombres de capa, opcionalmente con sintaxis global, por ejemplo: toscana_*,italia;Los datos originales RASTER y los volcados de la tabla VECTORIAL que coincidan con esos filtros serán excluidos del archivo ZIP de respaldo.

Advertencia

Habilitar estas opciones requiere que el directorio de datos de GeoServer sea accesible y completamente escribible para los usuarios de geonode y/o httpd server al ejecutar un comando de copia de seguridad/restauración.

Configuración: Sección [accesorios]

[fixtures]
#NOTE: Order is important
apps   = people,account,avatar.avatar,base.backup,base.license,base.topiccategory,base.region,base.resourcebase,base.contactrole,base.link,base.restrictioncodetype,base.spatialrepresentationtype,guardian.userobjectpermission,guardian.groupobjectpermission,layers.uploadsession,layers.style,layers.layer,layers.attribute,layers.layerfile,maps.map,maps.maplayer,maps.mapsnapshot,documents.document,taggit

dumps  = people,accounts,avatars,backups,licenses,topiccategories,regions,resourcebases,contactroles,links,restrictioncodetypes,spatialrepresentationtypes,useropermissions,groupopermissions,uploadsessions,styles,layers,attributes,layerfiles,maps,maplayers,mapsnapshots,documents,tags

Esta sección es la más compleja.Normalmente no es necesario modificarlo.Sólo un usuario experto que conozca la estructura del modelo Python y GeoNode debe modificar esta sección.

Qué significan sus propiedades:

  • aplicaciones;una lista ordenada de aplicaciones GeoNode Django.El procedimiento de copia de seguridad/restauración volcará/restaurará los dispositivos en un formato portátil.

  • deshecho;esta es la lista de archivos asociados a las aplicaciones Django.El orden debe ser el mismo que en la propiedad apps anterior.Cada nombre representa el nombre de archivo donde volcar/leer desde los dispositivos de la aplicación individual.

Ejecutando desde la CLI

Las siguientes secciones muestran instrucciones sobre cómo realizar una copia de seguridad/restauración desde la línea de comandos utilizando los comandos de administración de administración de Django.

Para obtener una guía de usuario básica para el comando de administración desde la línea de comando, simplemente ejecute

python manage.py backup --help

python manage.py restore --help

--help proporcionará la lista de opciones de línea de comando disponibles con una breve descripción.

Por defecto, ambos procedimientos activan el modo Solo lectura, deshabilitando cualquier solicitud de modificación de contenido, que se revierte al estado anterior (antes de la ejecución) una vez finalizado, independientemente del resultado del comando (éxito o fracaso).Para deshabilitar la activación de este modo, se puede pasar el argumento --skip-read-only al comando.

Vale la pena señalar que ambos comandos permiten la siguiente opción

python manage.py backup --force / -f

python manage.py restore --force / -f

Lo que habilita un modo no interactivo, lo que significa que no se le pedirá al usuario una confirmación explícita.

Respaldo

Para realizar una copia de seguridad simplemente ejecute el comando:

python manage.py backup --backup-dir=<target_bk_folder_path> --config=</path/to/settings.ini>

El comando de administración generará automáticamente un archivo .zip en la carpeta de destino en caso de éxito.En el directorio de destino se creará el archivo .md5 con el mismo nombre que la copia de seguridad.Contiene el hash MD5 del archivo de copia de seguridad, que se puede utilizar para comprobar la integridad del archivo antes de la restauración.

Vale la pena mencionar que br (aplicación Backup & Restore GeoNode) no se volcará, incluso si se especifica en settings.ini ya que su contenido está estrictamente relacionado con la determinada instancia de GeoNode.

Actualmente, GeoNode no admite ninguna extracción automática del archivo de copia de seguridad.Debe transferirse manualmente, si es necesario, al entorno de la instancia de destino.

Restaurar

El comando restore tiene una serie de argumentos, modificando su ejecución:

# -c / --config: ruta al archivo de configuración settings.ini.Si el archivo de copia de seguridad cuenta con su configuración, esta última será utilizada por el comando de restauración y esta opción ya no será obligatoria.

  1. --skip-geoserver: no se realizará la restauración de la copia de seguridad del GeoServer

  2. --skip-geoserver-info: {Valor predeterminado: Verdadero} Omite la información global de GeoServer, como la URL base del proxy y otra información de metadatos globales de GeoServer

  3. --skip-geoserver-security: {Predeterminado: Verdadero} Omite todas las configuraciones de seguridad de GeoServer

  4. --backup-file: (exclusivo junto con --backup-files-dir) ruta al archivo de respaldo .zip

  5. --backup-files-dir: (exclusivo junto con --backup-file) directorio que contiene archivos de respaldo.El directorio puede contener varios archivos, pero sólo se permiten archivos de respaldo con una extensión .zip.En caso de que haya varios archivos comprimidos en el directorio, se restaurará el más nuevo, creado después de la hora de creación de la última copia de seguridad ya restaurada.Esta opción se implementó pensando en las restauraciones automáticas.

  6. --recovery-file: Archivo de copia de seguridad que contiene datos de GeoNode para restaurar en caso de falla.

  7. -l / --with-logs: el archivo de copia de seguridad se comparará con los registros de restauración (historial).En caso de que esta copia de seguridad ya haya sido restaurada (comparación basada en MD5), se genera RuntimeError, lo que impide la ejecución de la restauración.

  8. -n / --notify: el resultado del procedimiento de restauración se enviará mediante una notificación por correo electrónico a los superusuarios de la instancia (nota: la notificación se enviará a los superusuarios de la instancia antes de la restauración).

  9. --skip-read-only: el procedimiento de restauración se realizará sin configurar el modo Solo lectura durante la ejecución.

  10. --soft-reset: el procedimiento de restauración preservará la tabla/los recursos del geoservidor durante la restauración.De forma predeterminada, el procedimiento eliminará tablas y recursos.

Para realizar una restauración de copia de seguridad predeterminada, simplemente ejecute el comando:

python manage.py restore --backup-file=<target_restore_file_path> --config=</path/to/settings.ini>

Para que se ejecute la restauración, es necesario definir el argumento --backup-file o --backup-files-dir.

Advertencia

La restauración sobrescribirá todas las instancias de destino de GeoNode (y por defecto de GeoServer), incluidos los usuarios, el catálogo y la base de datos, así que tenga mucho cuidado.

Inspección de la GUI del administrador de GeoNode

El historial de copias de seguridad restauradas se puede verificar en el panel de administración.

Inicie sesión en el panel de administración y seleccione la tabla Copias de seguridad restauradas de la aplicación BACKUP/RESTORE.

../../_images/br_1.png

Se mostrará una lista con un historial de todas las copias de seguridad restauradas.Puede seleccionar una determinada copia de seguridad para ver sus datos.

../../_images/br_2.png

La vista detallada de la copia de seguridad restaurada muestra el nombre del archivo de copia de seguridad, su hash MD5, su fecha de creación/modificación (en la carpeta de destino) y la fecha de la restauración.Tenga en cuenta que el historial de copia de seguridad restaurada no se puede modificar.

../../_images/br_3.png

B/R en entorno Docker

Al ejecutar B/R en el entorno Docker, la creación de la copia de seguridad en/la restauración debe ejecutarse en el directorio /backup_restore.Es un volumen compartido entre imágenes de Geoserver y Geonode, creado únicamente para este propósito.Apuntar a otra ubicación fallará, ya que una de las imágenes no tendrá acceso a los archivos.

Advertencia

Al ejecutar B/R en el entorno Docker recuerde crear el archivo settings.ini basado en settings_docker_sample.ini para apuntar a un directorio de datos de Geoserver adecuado.En otros casos, la discrepancia en la configuración puede provocar errores inesperados.

Advertencia

El único otro volumen compartido entre imágenes es /geoserver_data/data, pero la creación de copias de seguridad no debe realizarse allí, ya que en tal caso se pueden crear copias de seguridad recursivas de Geoserver.

Trabajo de B/R Jenkins en el entorno Docker

Al instalar GeoNode a través de geonode-project Docker (ver Instalación básica de GeoNode), una instancia de Jenkins CI/CD también se implementa automáticamente y está disponible a través de http://<geonode_host>/jenkins.

../../_images/br_jenkins_1.png

Configurar Jenkins en el primer inicio

La primera vez que intente acceder a Jenkins, deberá desbloquearlo y generar un nuevo nombre de usuario y contraseña de administrador.

Para hacer eso, necesita imprimir el contenido del archivo generado automáticamente /var/jenkins_home/secrets/initialAdminPassword

  1. En primer lugar, busque el ID del contenedor de Jenkins, normalmente jenkins4{{project_name}} donde {{project_name}} es el nombre de su instancia geonode-project (por ejemplo, my_geonode)

$> docker ps

  CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                                                NAMES
  e9fc97a75d1a        geonode/nginx:geoserver      "/docker-entrypoint.…"   2 hours ago         Up 2 hours          0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp                                             nginx4my_geonode
  c5496400b1b9        my_geonode_django            "/bin/sh -c 'service…"   2 hours ago         Up 2 hours                                                                                               django4my_geonode
  bc899f81fa28        my_geonode_celery            "/bin/sh -c 'service…"   2 hours ago         Up 2 hours                                                                                               celery4my_geonode
  3b213400d630        geonode/geoserver:2.17.1     "/usr/local/tomcat/t…"   2 hours ago         Up 2 hours          8080/tcp                                                                             geoserver4my_geonode
  d2f59d70a0d3        geonode/postgis:11           "docker-entrypoint.s…"   2 hours ago         Up 2 hours          5432/tcp                                                                             db4my_geonode
  3f9ce0be7f88        rabbitmq                     "docker-entrypoint.s…"   2 hours ago         Up 2 hours          4369/tcp, 5671-5672/tcp, 25672/tcp                                                   rabbitmq4my_geonode
  02fdbce9ae73        geonode/letsencrypt:latest   "./docker-entrypoint…"   2 hours ago         Up 14 seconds                                                                                            my_geonode_letsencrypt_1
  c745520fd551        jenkins/jenkins:lts          "/sbin/tini -- /usr/…"   2 hours ago         Up 2 hours          0.0.0.0:9080->9080/tcp, 8080/tcp, 0.0.0.0:50000->50000/tcp, 0.0.0.0:9443->8443/tcp   jenkins4my_geonode
  1. Ahora simplemente cat el archivo de arriba dentro del contenedor de Jenkins.

$> docker container exec -u 0 -it jenkins4my_geonode sh -c 'cat /var/jenkins_home/secrets/initialAdminPassword'

  b91e9d*****************373834
  1. Copie el código hash que acaba de obtener de la impresión anterior y cópielo y péguelo en la ventana del navegador.

../../_images/br_jenkins_2.png

En el siguiente paso, simplemente instale Complementos predeterminados.Puede instalar más de ellos más adelante desde la página de administración.

../../_images/br_jenkins_3.png

Espere hasta que Jenkins haya terminado de configurar los complementos.

../../_images/br_jenkins_4.png

Proporcione las credenciales de administrador según lo solicitado

../../_images/br_jenkins_5.png

Confirme la URL de la instancia de Jenkins; esto se puede cambiar desde la configuración más adelante en caso de que necesite actualizar la dirección del servidor.

../../_images/br_jenkins_6.png

Bien hecho, Jenkins ya está listo.

../../_images/br_jenkins_7.png

El siguiente paso es configurar un trabajo de Jenkins capaz de interactuar con el contenedor Docker de Django y ejecutar una copia de seguridad completa.

../../_images/br_jenkins_8.png

Configure un trabajo de Jenkins para ejecutar una copia de seguridad completa en el contenedor Django

Antes de crear el nuevo trabajo de Jenkins, necesitamos instalar y configurar un nuevo complemento, Publicar a través de SSH

Para hacer eso, una vez que haya iniciado sesión como admin, vaya a la pestaña Jenkins Página de administración > Administrar complementos

../../_images/br_jenkins_9.png
../../_images/br_jenkins_10.png

Haga clic en la pestaña Available y busque SSH complementos disponibles

../../_images/br_jenkins_11.png

Seleccione y marque la casilla Publicar sobre SSH.

../../_images/br_jenkins_12.png

Instale los complementos y reinicie Jenkins

../../_images/br_jenkins_13.png

El siguiente paso es configurar la Conexión del servidor SSH para el complemento Publicar sobre SSH.

Mover a Configuración de Jenkins

../../_images/br_jenkins_14.png

Desplácese hacia abajo hasta encontrar la sección del complemento Publicar sobre SSH

../../_images/br_jenkins_15.png

Dependiendo de cómo se haya configurado su servicio HOST SSH, es posible que necesite cierta información para configurar la conexión.

A continuación se muestra un ejemplo utilizando un host global (master.demo.geonode.org) que acepta conexiones SSH mediante claves RSA

../../_images/br_jenkins_16.png

Nota

Antes de guardar la configuración, asegúrese siempre de que la conexión esté bien utilizando el botón Probar configuración

../../_images/br_jenkins_17.png

También es posible ejecutar y configurar Jenkins para que se ejecute localmente, como una instancia en localhost.En ese caso necesitarás cambiar algunas cosas para permitir que Jenkins acceda a tu red local.

  1. En primer lugar, asegúrese de que OpenSSH Server esté correctamente instalado y ejecutándose en su PC.Finalmente, verifique las reglas del firewall.

    $> sudo apt install openssh-server
    
    # Test your connection locally
    $> ssh -p 22 user@localhost
       user@localhost's password:
    
  2. Necesitará hacer algunos cambios en su archivo docker-compose.yml para habilitar la configuración host network.

    Nota

    Habilite network_mode: "host" en el contenedor Jenkins

    $> vim docker-compose.yml
    
    ...
    jenkins:
       image: jenkins/jenkins:lts
       # image: istresearch/jenkins:latest
       container_name: jenkins4${COMPOSE_PROJECT_NAME}
       user: jenkins
       ports:
          - '${JENKINS_HTTP_PORT}:${JENKINS_HTTP_PORT}'
          - '${JENKINS_HTTPS_PORT}:${JENKINS_HTTPS_PORT}'
          - '50000:50000'
       network_mode: "host"
       volumes:
          - jenkins_data:/var/jenkins_home
          - backup-restore:/backup_restore
          # - /var/run/docker.sock:/var/run/docker.sock
       environment:
          - 'JENKINS_OPTS=--httpPort=${JENKINS_HTTP_PORT} --httpsPort=${JENKINS_HTTPS_PORT} --prefix=/jenkins'
    ...
    
    # Recreate the Jenkins container
    $> docker-compose stop jenkins
    $> docker-compose rm jenkins
    $> docker-compose up -d jenkins
    

    Advertencia

    A partir de ahora, se podrá acceder a su instancia local de Jenkins desde http://localhost:9080/jenkins

  3. Agregue el servidor localhost a la configuración del complemento Publicar sobre SSH

    Modo para http://localhost:9080/jenkins/configure y complete la información requerida

    ../../_images/br_jenkins_18.png

    Nota

    Antes de guardar la configuración, asegúrese siempre de que la conexión esté bien utilizando el botón Probar configuración

    ../../_images/br_jenkins_17.png

Ahora estamos listos para crear el trabajo de Jenkins que ejecutará una copia de seguridad y restauración completa de nuestra instancia dockerizada de GeoNode.

  1. Vaya a Jenkins Home y haga clic en el botón Crear un trabajo

    ../../_images/br_jenkins_19.png
  2. Proporcione un nombre al trabajo y seleccione Proyecto de estilo libre

    ../../_images/br_jenkins_20.png
  3. Habilite la estrategia Rotación de registros si es necesario

    ../../_images/br_jenkins_21.png
  4. Configure los Parámetros del trabajo que serán utilizados por el script más adelante.

    Agregue tres Parámetros de cadena

    ../../_images/br_jenkins_22.png

    como se muestra a continuación

    1. BKP_FOLDER_NAME

      ../../_images/br_jenkins_23.png
    2. FUENTE_URL

      Advertencia

      Proporcione la URL correcta de su instancia de GeoNode

      ../../_images/br_jenkins_24.png
    3. TARGET_URL

      Advertencia

      Proporcione la URL correcta de su instancia de GeoNode

      ../../_images/br_jenkins_25.png
  5. Habilite las opciones Eliminar espacio de trabajo antes de que comience la compilación y Agregar marcas de tiempo a la salida de la consola Entorno de compilación

    ../../_images/br_jenkins_26.png
  6. Finally let’s create the SSH Build Step

    ../../_images/br_jenkins_27.png

    Seleccione el SSH Server correcto y proporcione el Exec Command a continuación

    Advertencia

    Reemplace {{project_name}} con su geonode-nombre de instancia del proyecto (por ejemplo, my_geonode)

    # Replace {{project_name}} with your geonode-project instance name (e.g. my_geonode)
    # docker exec -u 0 -it django4{{project_name}} sh -c 'SOURCE_URL=$SOURCE_URL TARGET_URL=$TARGET_URL ./{{project_name}}/br/backup.sh $BKP_FOLDER_NAME'
    # e.g.:
    docker exec -u 0 -it django4my_geonode sh -c 'SOURCE_URL=$SOURCE_URL TARGET_URL=$TARGET_URL ./my_geonode/br/backup.sh $BKP_FOLDER_NAME'
    
    ../../_images/br_jenkins_28.png

Haga clic en Avanzado y cambie los parámetros como se muestra a continuación

../../_images/br_jenkins_29.png

¡Guardar! Estás listo para ejecutar el trabajo…

../../_images/br_jenkins_30.png
../../_images/br_jenkins_31.png
../../_images/br_jenkins_32.png
../../_images/br_jenkins_33.png