SPCGeoNode

概述

spc geonode是spc的geonode部署设置。它使部署生产就绪的geonode变得容易。该设置的目的是为了简单而不是灵活性,因此它只适用于典型的小规模地球物理装置。

该设置也可用于geonode开发或自定义。

先决条件

确保你有一个docker版本(用17.12测试)和docker compose。

  • Linux:https://docs.docker.com/install/linux/docker ce/ubuntu/install-from-a-package和https://docs.docker.com/compose/install/install-compose

  • Windows:https://store.docker.com/editions/community/docker-ce-desktop-windows

  • Mac:https://store.docker.com/editions/community/docker-ce-desktop-mac

使用

以下所有命令都来自此文件夹:

cd /path/to/geonode/scripts/spcgeonode

开发

仅启动主要服务(应足以进行开发):

docker-compose up --build -d django geoserver postgres nginx

要启动整个堆栈:

docker-compose up --build -d

如果不熟悉Docker,请阅读下面的内容以了解发生了什么。第一次启动时,容器将重新启动多次。一旦一切开始,您应该能够在浏览器中打开http://127.0.0.1。如果安装在另一台计算机上,请参阅下面的如何编辑配置。

制作(使用作曲家)

使用文本编辑器,编辑 .env 文件(也可以使用环境变量覆盖这些文件):

# General configuration
nano .env

准备好后,使用以下命令启动堆栈:

# Run the stack
docker-compose -f docker-compose.yml up -d --build

或者,您可以从DockerHub中提取图像,而不是重新生成(仅适用于未更改Docker设置的情况):

# Pull the images and run the stack
docker-compose -f docker-compose.yml pull
docker-compose -f docker-compose.yml up -d

如果不熟悉Docker,请阅读下面的内容以了解发生了什么。第一次启动时,容器将重新启动多次。一旦一切都开始了,您应该能够在浏览器中打开http://your廑http廑主机或https://your廑https廑主机。

升级

如果在某个时候要更新spcgeonode设置(只有在没有进行修改的情况下,此操作才有效,如果进行了修改,则需要合并它们):

# Get the update setup
git pull

升级堆栈

docker-compose -f docker-compose.yml up -d --build

开发与生产

开发设置与生产设置的区别:

  • django源代码装载在主机上,uwsgi进行实时重新加载(以便实时重新加载对python代码的编辑)

  • django static和media文件夹、geoserver的data文件夹和certificates文件夹安装在主机上(只是为了方便地查看发生了什么)

  • django debug设置为true

  • Postgres的端口5432已公开(允许使用pgadmin进行调试)

  • nginx调试模式被激活(不确定这会改变什么)

  • Docker标记设置为dev而不是最新的

发行版

发布:

  • 签出SPCGeonode版本

  • 合并SPCGeonode

  • 用版本(格式)替换docker-compose.yml中的版本标记 x.x.x

  • 犯罪

  • 创建git标记(格式 spc/x.x.x

  • 用标签推动spcgonode发布

这将触发在Docker Hub上的自动生成。

如果需要手动发布图像(例如dockerhub build fail):

docker login
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml push

FAQ

Docker Primer-怎么看发生了什么?

如果不熟悉Docker,这里有一些有用的命令:

  • docker ps :列出所有容器及其状态

  • docker-compose logs -f :显示所有容器中的实时stdout

  • docker-compose logs -f django :显示特定容器中的实时stdout(替换 django 通过 geoserverpostgres 等)

  • docker-compose down -v :将堆栈下移,包括卷,允许您从头重新启动 这将删除所有数据!啊!

在启动过程中,很多容器会崩溃并重启,这正常吗?

这是正常的启动过程。由于设置的性质,容器是非常相互依赖的。从头启动大约需要5-10分钟,在此期间所有容器可能会重新启动很多次。

简而言之,django将重新启动,直到postgres启动,以便它可以迁移数据库。geoserver将重新启动,直到django配置了oauth,以便能够获得oauth2配置。django将重新启动,直到geoserver正在运行,以便它可以重新初始化主密码。

备份

备份 使用 [RClone] (https://rclone.org/docs/)。RCORE是一种灵活的文件同步工具,支持所有共享云提供程序、常规文件传输协议以及本地文件系统。它应该可以容纳几乎任何设置。

安装程序提供的唯一可用配置假定正在使用amazon s3,在这种情况下,您需要替换 rclone.backup.config 文件: YOUR_S3_ACCESS_KEY_HEREyour_s3_secret_key_hereyour_s3_region_here`和 `THE_NAME_OF_YOUR_BUCKET_HERE (观看 [this] (https://www.youtube.com/watch?v=blty2tqxqly)来学习如何获取这些密钥)。

也考虑启用 版本控制 在bucket上,这样如果在geonode中意外删除数据,数据就不会丢失。

如果要使用其他提供程序设置备份,请检查 [RClone文档] (https://rclone.org/docs/)。将任何支持rclone的提供程序添加到spcgeonode应该很容易。

如何从现有的标准Geonode安装迁移

本节列出了从地理节点2.4.1的apt-get安装(使用geoserver 2.7.4)迁移到新的spcgeonode 0.1安装的步骤。它只是一个指南,因为有些步骤可能需要根据您的安装进行一些调整。如果你不明白自己在做什么,就不要遵循这些步骤。

先决条件

  • 访问原始服务器

  • 安装的新服务器(如果不担心丢失所有数据,可以与第一台服务器相同)-理想情况下是Linux,但只要它运行Docker(64位),就应该没问题。

  • 用于复制数据的外部硬盘驱动器

在旧服务器上

# Move to the external hard drive
cd /path/to/your/external/drive
  1. 查找当前数据库密码(查找数据库密码,在我的示例中是xffaye4w)

    more /etc/geonode/local_settings.py
    
  2. 转储数据库内容(将多次提示您输入上面的密码)

    pg_dumpall --host=127.0.0.1 --username=geonode --file=pg_dumpall.custom
    
  3. 复制所有上载的文件

    cp -r /var/www/geonode/uploaded uploaded
    
  4. 复制地理服务器数据目录

    cp -r /usr/share/geoserver/data geodatadir
    

在新服务器上

按照上的先决条件和生产步骤设置SPCGeonodehttps://github.com/GeoNode/GeoNode/tree/master/scripts/spcgeonode最多(但不包括)运行堆栈。

然后运行这些命令:

# Prepare the stack (without running)
docker-compose -f docker-compose.yml pull --no-parallel
docker-compose -f docker-compose.yml up --no-start

# Start the database
docker-compose -f docker-compose.yml up -d postgres

# Initialize geoserver (to create the geodatadir)
docker-compose -f docker-compose.yml run --rm geoserver true

# Go to the external drive
cd /path/to/drive/

# Restore the dump (this can take a while if you have data in postgres)
cat pg_dumpall.custom | docker exec -i spcgeonode_postgres_1 psql -U postgres
# Rename the database to postgres
docker exec -i spcgeonode_postgres_1 dropdb -U postgres postgres
docker exec -i spcgeonode_postgres_1 psql -d template1 -U postgres -c "ALTER DATABASE geonode RENAME TO postgres;"

# Restore the django uploaded files
docker cp uploaded/. spcgeonode_django_1:/spcgeonode-media/

# Restore the workspaces and styles of the geoserver data directory
docker cp geodatadir/styles/. spcgeonode_geoserver_1:/spcgeonode-geodatadir/styles
docker cp geodatadir/workspaces/. spcgeonode_geoserver_1:/spcgeonode-geodatadir/workspaces
docker cp geodatadir/data/. spcgeonode_geoserver_1:/spcgeonode-geodatadir/data

# Back to SPCgeonode
cd /path/to/SPCgeonode

# Fix some inconsistency that prevents migrations (public.layers_layer shouldn’t have service_id column)
docker exec -i spcgeonode_postgres_1 psql -U postgres -c "ALTER TABLE public.layers_layer DROP COLUMN service_id;"

# Migrate with fake initial
docker-compose -f docker-compose.yml run --rm --entrypoint "python manage.py migrate --fake-initial" django

# Create the SQL diff to fix the schema # TODO : upstream some changes to django-extensions for this to work directly
docker-compose -f docker-compose.yml run --rm --entrypoint '/bin/sh -c "DJANGO_COLORS=nocolor python manage.py sqldiff -ae"' django >> fix.sql

# Manually fix the SQL command until it runs (you can also drop the tables that have no model)
nano fix.sql

# Apply the SQL diff (review the sql file first as this may delete some important tables)
cat fix.sql | docker exec -i spcgeonode_postgres_1 psql -U postgres

# Set all layers as approved
docker exec -i spcgeonode_postgres_1 psql -U postgres -c 'UPDATE base_resourcebase SET is_approved = TRUE;'

# This time start the stack
docker-compose -f docker-compose.yml up -d

最后一步是连接到geoserver管理,并将postgis存储主机、用户和密码更改为“postgres”。

在windows上,我有如下错误 standard_init_linux.go:190: exec user process caused "no such file or directory"

这可能是由于行尾。当签出文件时,git可以选择转换行尾以匹配平台,但这并不适用于它。 .sh 文件夹。

修复,使用 git config --global core.autocrlf false 再结账。