Prezado leitor,

Se você está implantando o GeoNode na sua infraestrutura e deseja conectar um banco de dados já existente, este tutorial irá guiá-lo passo a passo para realizar a configuração corretamente.

1. Descobrir o endereço IP da Rede Docker

Para identificar a rede que está rodando o seu GeoNode, execute:

/opt/geonode_custom/my_geonode> docker network inspect my_geonode_default | grep Subnet

2. Descobrir o IP da máquina Linux

Para descobrir o endereço IP da máquina onde o Docker está rodando:

/opt/geonode_custom/my_geonode> ifconfig

3. Certificar que os containers Docker estejam inativos

docker-compose down

4. Desabilitar o banco de dados interno do GeoNode

Edite o arquivo docker-compose.yml e comente as linhas referentes ao PostGIS interno, para evitar conflitos com o banco externo:

# PostGIS database.
  #db:
  #  image: ${COMPOSE_PROJECT_NAME}/postgis:${POSTGRES_BASE_IMAGE_VERSION}
  #  build:
  #    context: ./docker/postgresql
  #    dockerfile: Dockerfile
  #    args:
  #      - BASE_IMAGE_VERSION=${POSTGRES_BASE_IMAGE_VERSION}
  #  command: postgres -c "max_connections=${POSTGRESQL_MAX_CONNECTIONS}"
  #  container_name: db4${COMPOSE_PROJECT_NAME}
  #  env_file:
  #    - .env
  #  volumes:
  #    - dbdata:/var/lib/postgresql/data
  #    - dbbackups:/pg_backups
  #  restart: unless-stopped
  #  healthcheck:
  #    test: "pg_isready -d postgres -U postgres"
  # uncomment to enable remote connections to postgres
  #ports:
  #  - "5432:5432"

  # dbdata:
  #    name: ${COMPOSE_PROJECT_NAME}-dbdata
  #  dbbackups:
  #    name: ${COMPOSE_PROJECT_NAME}-dbbackups

Você precisa desabilitar a dependência do Django ao banco para que não dê erro ao tentar subir o container novamente:

django:
#  depends_on:
#   - db

E também a dependência do GeoServer e Celery ao Django:

#  depends_on:
#   - django:
#      condition: service_healthy

5. Parâmetros necessários no banco de dados externo

Quanto ao banco de dados externo, espera-se que ele tenha os seguintes parâmetros:

  • Usuário com senha para conexão
  • Base de dados para as tabelas Django do GeoNode
  • Base de dados para os dados espaciais
  • Endereço IP do servidor de banco externo
  • Porta de acesso ao banco
  • Endereço IP da rede Docker

6. Preparar o banco de dados externo

O GeoNode precisa de duas bases de dados: uma para o Django (geonode) e outra para os dados espaciais (geonode_data). Veja:

-- Criar usuário com senha forte
CREATE USER geonode_user WITH PASSWORD 'geonode123';

-- Criar os bancos com ownership do usuário

CREATE DATABASE geonode OWNER geonode_user;
CREATE DATABASE geonode_data OWNER geonode_user;

-- ==============================
-- Configuração no banco geonode
-- ==============================
-- Abra o banco geonode e execute:

CREATE EXTENSION IF NOT EXISTS postgis;

GRANT ALL ON geometry_columns TO PUBLIC;
GRANT ALL ON spatial_ref_sys TO PUBLIC;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO geonode_user;

-- ==============================
-- Configuração no banco geonode_data
-- ==============================
-- Abra o banco geonode_data e execute:

CREATE EXTENSION IF NOT EXISTS postgis;

GRANT ALL ON geometry_columns TO PUBLIC;
GRANT ALL ON spatial_ref_sys TO PUBLIC;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO geonode_user;

7. Atualizar o arquivo .env com os dados do banco externo

Lembre-se de alterar o número do IP e a porta de acordo com a sua realidade (onde seu banco de dados está instalado), no meu caso o IP do meu banco é o 192.168.0.245.

# -------------------------------
# Backend
# -------------------------------
GEONODE_DATABASE=geonode
GEONODE_DATABASE_USER=geonode_user
GEONODE_DATABASE_PASSWORD=geonode123
GEONODE_GEODATABASE=geonode_data
GEONODE_GEODATABASE_USER=geonode_user
GEONODE_GEODATABASE_PASSWORD=geonode123
GEONODE_DATABASE_SCHEMA=public
GEONODE_GEODATABASE_SCHEMA=public
DATABASE_HOST=192.168.0.245
DATABASE_PORT=5432
DATABASE_URL=postgis://geonode_user:geonode123@192.168.0.245:5432/geonode
GEODATABASE_URL=postgis://geonode_user:geonode123@192.168.0.245:5432/geonode_data

8. Alterar o arquivo pg_hba.conf

Agora é necessário inserir no arquivo do PostgreSQL as permissões de acesso a máquina e a rede onde está rodando o docker, da seguinte forma:

# -------------------------------
# GeoNode connections
# -------------------------------

# Permite que a rede dos containers Docker do GeoNode acesse o PostgreSQL
host   geonode        geonode_user   172.18.0.0/16        md5
host   geonode_data   geonode_user   172.18.0.0/16        md5

# Permite que a VM Linux (192.168.186.137) e qualquer host da sub-rede 192.168.0.0/24 acessem o PostgreSQL
host   geonode        geonode_user   192.168.186.137/32   md5
host   geonode_data   geonode_user   192.168.186.137/32   md5
host   geonode        geonode_user   192.168.0.0/24       md5
host   geonode_data   geonode_user   192.168.0.0/24       md5

Observações:

  • 172.18.0.0/16 → rede Docker
  • 192.168.186.137/32 → IP da VM Linux

Após alterado o arquivo, você deve reiniciar o serviço do PostgreSQL. Se for no Linux, faça da seguinte forma:

sudo service postgresql restart

9. Reiniciar o docker

Para finalizar o processo, faça um novo build e depois suba o docker:

/opt/geonode_custom/my_geonode> docker-compose build 
/opt/geonode_custom/my_geonode> docker-compose up -d

Agora é só testar e ver se funcionou.

10. Ambiente

Para esse teste eu utilizei:

– Máquina com Windows 11 e PostgreSQL 16 (IP 192.168.0.245)
– Ubuntu 22.04 rodando no VMWare, dentro da máquina Windows (IP 192.168.186.137)