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):
Capas (tanto ráster como vectoriales)
Mapas
Documentos
Personas con credenciales
Permisos
Estilos asociados
Datos estáticos y plantillas
GeoServer (Catálogo):
Configuración y límites de los servicios OWS
Modelo de seguridad junto con configuración de filtros de autenticación, usuarios y credenciales.
Espacios de trabajo
Tiendas (tanto DataStores como CoverageStores)
capas
Estilos
La herramienta expone dos comandos de administración de GeoNode, «copia de seguridad» y «restauración».
Los comandos permiten:
Realice una copia de seguridad completa de los datos y accesorios de GeoNode en un archivo zip
Configuración de GeoServer de copia de seguridad completa (conjuntos de datos físicos: tablas, archivos de forma, geotiffs)
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 degeonodey/ohttpd serveral 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(ono), 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(ono), 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 originalesRASTERy los volcados de tablasVECTORIALque 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 originalesRASTERy los volcados de la tablaVECTORIALque 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
archivosasociados a las aplicaciones Django.El orden debe ser el mismo que en la propiedad apps anterior.Cada nombre representa elnombre de archivodonde 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.
--skip-geoserver: no se realizará la restauración de la copia de seguridad del GeoServer--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--skip-geoserver-security: {Predeterminado: Verdadero} Omite todas las configuraciones de seguridad de GeoServer--backup-file: (exclusivo junto con--backup-files-dir) ruta al archivo de respaldo.zip--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.--recovery-file: Archivo de copia de seguridad que contiene datos de GeoNode para restaurar en caso de falla.-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.-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).--skip-read-only: el procedimiento de restauración se realizará sin configurar el modo Solo lectura durante la ejecución.--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.
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.
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.
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.
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
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
Ahora simplemente
catel 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
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.
En el siguiente paso, simplemente instale Complementos predeterminados.Puede instalar más de ellos más adelante desde la página de administración.
Espere hasta que Jenkins haya terminado de configurar los complementos.
Proporcione las credenciales de administrador según lo solicitado
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.
Bien hecho, Jenkins ya está listo.
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.
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
Haga clic en la pestaña Available y busque SSH complementos disponibles
Seleccione y marque la casilla Publicar sobre SSH.
Instale los complementos y reinicie Jenkins
El siguiente paso es configurar la Conexión del servidor SSH para el complemento Publicar sobre SSH.
Mover a Configuración de Jenkins
Desplácese hacia abajo hasta encontrar la sección del complemento Publicar sobre SSH
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
Nota
Antes de guardar la configuración, asegúrese siempre de que la conexión esté bien utilizando el botón Probar configuración
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.
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:
Necesitará hacer algunos cambios en su archivo
docker-compose.ymlpara 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
Agregue el servidor
localhosta la configuración del complemento Publicar sobre SSHModo para http://localhost:9080/jenkins/configure y complete la información requerida
Nota
Antes de guardar la configuración, asegúrese siempre de que la conexión esté bien utilizando el botón Probar configuración
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.
Vaya a Jenkins Home y haga clic en el botón Crear un trabajo
Proporcione un nombre al trabajo y seleccione Proyecto de estilo libre
Habilite la estrategia Rotación de registros si es necesario
Configure los Parámetros del trabajo que serán utilizados por el script más adelante.
Agregue tres Parámetros de cadena
como se muestra a continuación
BKP_FOLDER_NAME
FUENTE_URL
Advertencia
Proporcione la URL correcta de su instancia de GeoNode
TARGET_URL
Advertencia
Proporcione la URL correcta de su instancia de GeoNode
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
Finally let’s create the SSH Build Step
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'
Haga clic en Avanzado y cambie los parámetros como se muestra a continuación
![]()
¡Guardar! Estás listo para ejecutar el trabajo…
Vincula la carpeta backup_restore a una carpeta local en HOST¶
En el caso de que necesite guardar los archivos de copia de seguridad fuera del contenedor acoplable, existe la posibilidad de vincular directamente la carpeta backup_restore a una carpeta local en HOST.
En ese caso, no necesitará docker cp los archivos cada vez desde los contenedores, estarán directamente disponibles en el sistema de archivos del host.
Advertencia
Esté siempre atento al espacio en disco.Los archivos de copias de seguridad pueden ser enormes.
Nota
Es posible que también desee considerar filtrar los archivos a través de los filtros dt de respaldo en settings.ini para reducir el tamaño de los archivos comprimidos, incluidos solo los nuevos.
Modifique docker-compose.override.yml de la siguiente manera para vincular las carpetas de respaldo afuera.
Nota
/data/backup_restore es una carpeta ubicada físicamente en el sistema de archivos del host.
$> vim docker-compose.override.yml
version: '2.2'
services:
django:
build: .
# Loading the app is defined here to allow for
# autoreload on changes it is mounted on top of the
# old copy that docker added when creating the image
volumes:
- '.:/usr/src/my_geonode'
- '/data/backup_restore:/backup_restore' # Link to local volume in the HOST
celery:
volumes:
- '/data/backup_restore:/backup_restore' # Link to local volume in the HOST
geoserver:
volumes:
- '/data/backup_restore:/backup_restore' # Link to local volume in the HOST
jenkins:
volumes:
- '/data/backup_restore:/backup_restore' # Link to local volume in the HOST
# Restart the containers
$> docker-compose up -d