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 通过 geoserver , postgres 等)
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_HERE ,your_s3_secret_key_here,your_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
查找当前数据库密码(查找数据库密码,在我的示例中是xffaye4w)
more /etc/geonode/local_settings.py
转储数据库内容(将多次提示您输入上面的密码)
pg_dumpall --host=127.0.0.1 --username=geonode --file=pg_dumpall.custom
复制所有上载的文件
cp -r /var/www/geonode/uploaded uploaded
复制地理服务器数据目录
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 再结账。