Este tutorial mostra como configurar um script que atualiza automaticamente as camadas do GeoServer no GeoNode, utilizando um checksum para detectar alterações.

1. Instalar o checksumdir dentro do container do GeoServer

1.1 Entrar no container do GeoServer

docker exec -it geoserver4my_geonode bash

1.2 Instalar o checksumdir

pip install checksumdir

2. Gerar o checksum (código único) da pasta do GeoServer

O comando checksumdir cria um hash único com base no conteúdo de todos os arquivos da pasta especificada. Isso significa que qualquer alteração em uma camada, SLD ou arquivo dentro do workspace do GeoNode fará o checksum mudar, permitindo que o script detecte automaticamente essas modificações e atualize as camadas no GeoNode.

2.1 Executar o comando:

checksumdir /geoserver_data/data/workspaces/geonode

Anote o código gerado, pois ele será usado na etapa seguinte.

3. Criar um arquivo para armazenar o checksum

3.1 Criar o arquivo:

sudo mkdir /opt/updatelayers
sudo chown geocursos /opt/updatelayers
sudo chgrp www-data /opt/updatelayers
cd /opt/updatelayers
touch layers_updated_md5

3.2 Inserir o código do checksum

nano layers_updated_md5

Cole o checksum gerado na etapa anterior e salve o arquivo.

4. Criar o script de execução automática

4.1 Criar o arquivo do script:

touch cron_updatelayers.sh

4.2 Adicionar o código no script:

geoserver="geoserver4my_geonode"
geonode="django4my_geonode"

md5=$(docker exec -i $geoserver checksumdir /geoserver_data/data/workspaces/geonode)

if [[ $md5 != $(cat /opt/updatelayers/layers_updated_md5) ]]; then
    echo "Atualizando camadas"
    echo $md5 > /opt/updatelayers/layers_updated_md5
    docker exec -i $geonode python3 manage.py updatelayers
fi

4.3 Agora você precisa tornar o arquivo executável:

chmod +x /opt/updatelayers/cron_updatelayers.sh

5. Configurar o cron para execução automática

5.1 Abrir o arquivo crontab:

sudo nano /etc/crontab

5.2 Adicionar a linha para executar o script a cada 5 minutos

Lembre-se de alterar o caminho do script conforme a sua configuração:

*/5 * * * * geocursos bash /opt/updatelayers/cron_updatelayers.sh

Pronto! Agora seu GeoServer irá verificar periodicamente alterações nas camadas e atualizar automaticamente no GeoNode quando houver mudanças.

Se você quiser conferir se o comando está sendo executando, basta executar:

sudo grep CRON /var/log/syslog

Por último, mas não menos importante, gostaria de agradecer ao Diego Varela por disponibilizar esse script.