完整的GeoNode备份和恢复¶
用于备份和恢复GeoNode的管理命令允许以可序列化的元格式一致地提取GeoNode和Geoserver数据模型,恢复过程稍后将解释该格式,以便准确重建整个结构。
特别是,该工具可帮助开发人员和管理员正确提取和序列化以下资源:
GeoNode (资源库模型):
图层(栅格和矢量)
地图
文件
有资历的人
权限
关联样式
静电数据和模板
GeoServer (目录):
OWS服务配置和限制
安全模型以及身份验证过滤器配置、用户和凭据
工作空间
商店(数据存储区和CoverageStores)
图层
样式
该工具公开了两个GeoNode管理命令:“BACKUP”和“RESTORE”。
这些命令允许执行以下操作:
完全备份zip归档中的GeoNode数据和装置
完全备份Geoserver配置(物理数据集-表、shapefile、Geotiff)
从zip归档文件中完全恢复GeoNode和Geoserver装置和目录
这些命令的使用非常简单和直接。
第一步是确保正确配置所有内容,并遵守必要条件,以便成功执行GeoNode备份和恢复。
警告
值得注意的是,此功能需要最新的 GeoServer Extension (2.9.x或更高版本)才能正常工作。
注解
此处还提供Geoserver的完整文档 GeoServer Docs
必备条件和设置¶
在此之前 运行GeoNode备份/恢复时,必须确保所有内容都已正确配置和设置。
设置¶
根据管理员需要,文件 settings.ini
必须在运行备份或还原之前放弃。
默认文件位于 geonode/br/management/commands/settings_sample.ini
和 geonode/br/management/commands/settings_docker_sample.ini
适用于经典和Docker环境。两者的内容相似(示例来自 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
The settings.ini
file can be created in any directory accessible by GeoNode, and it's path can be passed to the backup / restore
procedures using -c (--config) argument.
在运行备份/还原命令之前,必须仔细检查配置文件的几个不同部分。
设置: [数据库] 部分¶
[database]
pgdump = pg_dump
pgrestore = pg_restore
这一节非常简单。它只包含两个属性:
pgdump ;
pg_dump
本地指挥部。** ;
pg_restore
本地指挥部。
警告
如果未将GeoNode配置为使用数据库作为后端,则忽略这些属性(请参见 settings.py
和 local_settings.py
章节)
注解
数据库连接设置(GeoNode和Geoserver)将从 settings.py
和 local_settings.py
配置文件。确保它们配置正确(也在目标GeoNode实例上),并且在执行备份/恢复命令时可以访问数据库服务器。
设置: [地球服务器] 部分¶
[geoserver]
datadir = /opt/gs_data_dir
datadir_exclude_file_path =
dumpvectordata = yes
dumprasterdata = yes
data_dt_filter =
data_layername_filter =
data_layername_exclude_filter =
此部分允许启用/禁用Geoserver的完整数据备份/恢复。
数据目录 :默认情况下为Geoserver数据目录的完整路径
/opt/gs_data_dir
。这条路 must 具有可访问性,并且 完全可写 由geonode
和/或httpd server
用户在执行备份/还原命令时。datadir_exclude_file_path :要从中排除的路径的逗号分隔列表
geoserver_catalog.zip
;此列表将由Geoserver备份睡觉接口直接发送和管理。转储矢量数据 :启用或禁用从Geoserver(shapefile或DB表)创建矢量数据转储的布尔标志。如果
false
(或no
)矢量数据将不会存储/重新存储。转储数据 :启用或禁用从Geoserver(Geotiff)创建栅格数据转储的布尔标志。如果
false
(或no
)不会存储/重新存储栅格数据。data_dt_filter :{cmp_Operator}{ISO8601}例如>2019-04-05T24:00,意思是“在备份档案中只包含在2019-04-05T24:00之后修改过的文件
data_layername_filter :逗号分隔的列表
layer names
,可选地使用GLOB语法,例如:Tuscany_ ,italy; Only ``RASTER`` original data and ``VECTORIAL`` table dumps matching those filters will be * *包括在内 *放入备份ZIP存档中data_layername_exclude_filter :逗号分隔的列表
layer names
,可选地使用GLOB语法,例如:Tuscany_ ,italy; The ``RASTER`` original data and ``VECTORIAL`` table dumps matching those filters will be * *已排除 *来自备份ZIP归档
警告
启用这些选项 需要 可访问的Geoserver数据目录和 完全可写 对于 geonode
和/或 httpd server
用户在执行备份/还原命令时。
设置: [固定装置] 部分¶
[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
这一节是最复杂的一节。通常您不需要修改它。只有了解Python和GeoNode模型结构的专家用户才能修改此部分。
其属性的含义:
apps ;GeoNode Django应用程序的有序列表。备份/恢复过程将以便携格式转储/恢复灯具。
转储 ;这是……的名单
files
与Django应用程序相关联。订单 must 与中的相同 apps 上面的财产。每个名称代表file name
转储到哪个位置/从单个应用程序的固定装置读取。
从CLI执行¶
以下各节介绍如何使用Django Admin Management命令从命令行执行备份/恢复。
要从命令行获取管理命令的基本用户指南,只需运行
python manage.py backup --help python manage.py restore --help
--help
将提供可用命令行选项列表,并提供简要说明。
缺省情况下,这两个过程都会激活 Read Only 模式,禁用任何内容修改请求,无论命令结果如何(成功或失败),完成后内容修改请求都会恢复到以前的状态(从执行前)。为了禁用该模式的激活, --skip-read-only
参数可以传递给命令。
值得注意的是,这两个命令都允许以下选项
python manage.py backup --force / -f python manage.py restore --force / -f
这启用了非交互模式,这意味着将不会要求用户明确确认。
备份¶
要执行备份,只需运行以下命令:
python manage.py backup --backup-dir=<target_bk_folder_path> --config=</path/to/settings.ini>
管理命令将自动生成 .zip
在成功的情况下将文件存档到目标文件夹。在目标目录中 .md5
将创建与备份同名的文件。它包含备份文件的MD5散列,该散列可用于在恢复之前检查存档的完整性。
值得一提的是 br
(Backup&Restore GeoNode应用程序)将不会转储,即使在中指定也是如此 settings.ini
因为它的内容与某个GeoNode实例严格相关。
目前,GeoNode不支持备份文件的任何自动提取。如果需要,应该手动将其传输到目标实例环境。
恢复¶
这个 restore
命令具有多个参数,用于修改其执行:
# -c
/ --config
:指向 settings.ini
配置文件。如果备份档案随其设置一起提供,则后者将由RESTORE命令使用,并且此选项将不再是强制选项
--skip-geoserver
:将不执行Geoserver备份恢复--skip-geoserver-info
:{default:true}跳过Geoserver全局信息,如代理基础URL和其他全局Geoserver元数据信息--skip-geoserver-security
:{default:true}跳过Geoserver所有安全设置--backup-file
:(独家与--backup-files-dir
)备份的路径.zip
存档--backup-files-dir
:(独家与--backup-file
)包含备份档案的目录。该目录可能包含多个文件,但是 only 允许将备份存档与.zip
分机。如果目录中存在多个存档,则将还原在上次已还原的备份创建时间之后创建的最新存档。此选项的实施考虑到了自动恢复。--recovery-file
:备份包含要在出现故障时恢复的GeoNode数据的归档。-l
/--with-logs
:将对照还原日志(历史记录)检查备份文件。如果此备份已还原(基于MD5的比较),则会引发运行错误,从而阻止还原执行。-n
/--notify
:恢复过程结果会以邮件通知的方式通知实例的超级用户(注意:恢复前会通知实例的超级用户)。--skip-read-only
:恢复过程将在不设置的情况下进行 Read Only 模式。--soft-reset
:还原过程将在还原期间保留Geoserver表/资源。缺省情况下,该过程将删除表和资源
要执行默认备份恢复,只需运行以下命令:
python manage.py restore --backup-file=<target_restore_file_path> --config=</path/to/settings.ini>
要运行恢复,它需要以下任一项 --backup-file
或 --backup-files-dir
已定义参数。
警告
还原将 覆盖 GeoNode的整个目标实例(默认情况下是Geoserver),包括用户、目录和数据库,因此要非常小心。
GeoNode管理GUI检查¶
可以在管理面板中验证还原备份的历史记录。
登录到管理面板并选择 Restored backups
表格来源 BACKUP/RESTORE
申请。
将显示一个列表,其中包含所有已还原备份的历史记录。您可以选择某个备份来查看其数据。
还原备份的详细视图显示备份存档的名称、MD5散列、创建/修改日期(在目标文件夹中)和还原日期。请注意,无法修改还原的备份历史记录。
Docker环境下的B/R¶
在Docker环境中执行B/R时,应在以下位置执行创建备份到/恢复自 /backup_restore
目录。它是Geoserver和Geonode映像之间的共享卷,仅为此目的而创建。指向另一个位置将失败,因为其中一个图像将无法访问文件。
警告
在Docker环境下执行应收时 记住 要创建 settings.ini
文件基于 settings_docker_sample.ini
指向正确的Geoserver数据目录!在其他情况下,配置不匹配可能会导致意外错误。
警告
映像之间共享的唯一其他卷是 /geoserver_data/data
,但创建备份 不应该 在那里执行,因为在这种情况下可能会创建递归Geoserver备份。
Docker环境下的B/R Jenkins作业¶
通过安装GeoNode时 geonode-project Docker(请参见 GeoNode基本安装 ),一个实例 Jenkins CI/CD 还可以通过以下方式自动部署和使用 http://<geonode_host>/jenkins 。
首次启动时配置Jenkins¶
第一次尝试访问Jenkins时,您需要将其解锁并生成新的管理员用户名和密码。
为此,您需要打印自动生成的文件的内容 /var/jenkins_home/secrets/initialAdminPassword
首先搜索Jenkins容器ID,通常 jenkins4{{{{project_name}}}} 哪里
{{{{project_name}}}}
是你的名字吗? geonode-project 实例(例如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
现在只是
cat
上面Jenkins容器内的文件
$> docker container exec -u 0 -it jenkins4my_geonode sh -c 'cat /var/jenkins_home/secrets/initialAdminPassword'
b91e9d*****************373834
复制您刚刚从上面的打印中获得的散列代码,并将其复制并粘贴到浏览器窗口
在下一步中,只需安装 Default Plugins 。您可以稍后从管理页面安装更多。
等待Jenkins完成插件的配置
根据要求提供管理员凭据
确认Jenkins实例URL,稍后可以从配置中更改此URL,以防您需要更新服务器地址
干得好,詹金斯现在准备好了
下一步是配置能够与Django Docker容器交互并运行完整备份的Jenkins Job
配置Jenkins作业以在Django容器上运行完整备份¶
在创建新的Jenkins作业之前,我们需要安装和配置一个新插件, Publish over SSH
要做到这一点,一旦以以下身份登录 admin
,去詹金斯家 Management Page > Manage Plugins 选项卡
单击 Available 选项卡并搜索 SSH
可用的插件
选择并选中 Publish over SSH
一
安装插件并重新启动Jenkins
下一步是配置 SSH Server Connection
对于 Publish over SSH 插件。
移动到 Jenkins Configuration
向下滚动,直到找到 Publish over SSH 插件部分
这取决于您的 HOST SSH service
已配置,您可能需要几个信息才能设置连接。
下面是使用全局主机的示例 (master.demo.geonode.org
)接受 SSH
通过以下方式连接 RSA keys
注解
在保存配置之前,请始终使用 Test Configuration 按钮
还可以运行和配置 Jenkins 作为实例在本地运行 localhost 。在这种情况下,您需要更改几项内容才能允许 Jenkins 访问您的本地网络。
首先,要确保 OpenSSH Server 已在您的PC上正确安装并运行。最终检查所有防火墙规则。
$> sudo apt install openssh-server # Test your connection locally $> ssh -p 22 user@localhost user@localhost's password:
您需要对您的
docker-compose.yml
文件,以便启用 host network 配置。注解
启用
network_mode: "host"
关于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
警告
从现在开始,您的本地Jenkins实例将可以从 http://localhost:9080/jenkins
添加
localhost
服务器连接到 Publish over SSH 插件配置模式到 http://localhost:9080/jenkins/configure 并填写所需信息
注解
在保存配置之前,请始终使用 Test Configuration 按钮
现在,我们准备创建Jenkins作业,该作业将运行GeoNode停靠实例的完整备份和恢复。
移动到Jenkins Home并单击 Create a Job 按钮
为作业提供名称,然后选择 Freestyle project
启用 Log rotation 策略(如果需要)
配置 Job Parameters 脚本稍后将使用它。
加三个 String Parameters
如下所示
BKP_FOLDER_NAME
SOURCE_URL
警告
提供地理节点实例的正确URL
TARGET_URL
警告
提供地理节点实例的正确URL
启用 Delete workspace before build starts 和 Add timestamps to the Console Output Build Environment 选项
最后,让我们创建 SSH Build Step
选择正确的 SSH Server 并提供 Exec Command 下面
警告
替换 {{{{project_name}}}} 带着您的 geonode-project instance name (例如 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'
单击 Advanced 并按如下所示更改参数
救球! 您已准备好运行作业.
链接 backup_restore 文件夹复制到 HOST¶
如果您需要将备份档案保存在码头容器之外,可以直接将 backup_restore 文件夹复制到 HOST 。
那样的话,您就不需要 docker cp 每次从容器中获取文件时,它们将直接在主机文件系统上可用。
警告
始终注意磁盘空间。备份档案可能非常庞大。
注解
您可能还需要考虑通过上的备份DT筛选器筛选文件 settings.ini 以减小存档文件的大小,仅包括新的存档文件。
修改 docker-compose.override.yml
如下所示,以便将备份文件夹链接到外部。
注解
/data/backup_restore
是物理上位于主机文件系统中的文件夹。
$> 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