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)