Prezado leitor,
Neste post irei apresentar como instalar o GeoServer 3 juntamente com o PostgreSQL 18/PostGIS utilizando Docker em um servidor executando Ubuntu Linux 26.04.
Ao final deste tutorial você terá um ambiente pronto para desenvolvimento, testes ou treinamentos, contendo:
- PostgreSQL 18 + PostGIS 3.6
- GeoServer 3.0.0
- Nginx como proxy reverso
- Estrutura organizada para persistência dos dados
- Instalação totalmente baseada em containers Docker
Pré-requisitos:
- Ubuntu 26.04
- Acesso sudo
- Conexão com Internet
- Pelo menos 4 GB RAM (8 GB recomendado)
Sem enrolação, vamos aos passos:
1. Atualizar o Ubuntu
Antes de instalar qualquer software é recomendável atualizar os repositórios e aplicar as últimas atualizações do sistema operacional.
> sudo add-apt-repository universe > sudo apt update > sudo apt upgrade -y
2. Instalar apenas os pacotes necessários
Nesta etapa serão instaladas apenas as ferramentas utilizadas durante a instalação do Docker e administração básica do servidor.
> sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release \
software-properties-common \
vim \
unzip \
wget \
htop \
net-tools \
jq
3. Adicionar os repositórios do Docker
O Docker mantém seu próprio repositório oficial. Nesta etapa iremos adicionar sua chave GPG e registrar o repositório oficial no Ubuntu.
> sudo mkdir -p /etc/apt/keyrings > curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg > sudo chmod a+r /etc/apt/keyrings/docker.gpg > echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" \ | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4. Instalar Docker
Agora instalaremos o Docker Engine, Docker Buildx e o Docker Compose Plugin.
> sudo apt update
> sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
5. Habilitar Docker
Habilite o serviço do Docker para que ele seja iniciado automaticamente sempre que o servidor for reiniciado.
> sudo systemctl enable docker > sudo systemctl start docker
6. Ajustar timezone e sincronizar horário
Manter o timezone correto facilita a análise de logs e evita problemas de horário entre GeoServer, PostgreSQL e sistema operacional.
> sudo timedatectl set-timezone America/Sao_Paulo > timedatectl
7. Estrutura
A estrutura abaixo será utilizada para organizar os arquivos do projeto e facilitar futuras manutenções.

8. Criar a Estrutura
> mkdir -p /opt/geoserver3 > cd /opt/geoserver3 > mkdir -p data/postgres > mkdir -p data/geoserver > mkdir -p nginx/conf.d > mkdir -p nginx/logs > mkdir -p logs > mkdir -p backups
9. Criar o arquivo docker-compose.yaml
O arquivo docker-compose.yaml descreve toda a infraestrutura da aplicação e será responsável por criar automaticamente os containers do PostgreSQL/PostGIS, GeoServer e Nginx.
nano docker-compose.yaml
Copie todo o conteúdo abaixo para o arquivo.
services:
postgis:
image: postgis/postgis:18-3.6
container_name: postgis
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
TZ: ${TZ}
# Descomente as linhas abaixo apenas se desejar permitir acesso externo ao PostgreSQL.
#ports:
# - "5432:5432"
volumes:
- ./data/postgres:/var/lib/postgresql
healthcheck:
test:
[
"CMD-SHELL",
"pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB} -h localhost"
]
interval: 10s
timeout: 5s
retries: 10
start_period: 20s
networks:
- geoserver-network
geoserver:
image: docker.osgeo.org/geoserver:3.0.0
container_name: geoserver
restart: unless-stopped
depends_on:
postgis:
condition: service_healthy
ports:
- "8080"
environment:
TZ: ${TZ}
PROXY_BASE_URL: ${PUBLIC_GEOSERVER_URL}
INSTALL_EXTENSIONS: "true"
STABLE_EXTENSIONS: "excel,importer,image,web-resource,wps"
EXTRA_JAVA_OPTS: >-
-Xms2G
-Xmx4G
-Duser.timezone=${TZ}
-Dfile.encoding=UTF-8
-Djava.awt.headless=true
CORS_ENABLED: "true"
CORS_ALLOWED_ORIGINS: "*"
CORS_ALLOWED_METHODS: "GET,POST,PUT,DELETE,HEAD,OPTIONS"
CORS_ALLOWED_HEADERS: "Origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization"
CORS_ALLOW_CREDENTIALS: "false"
ROOT_WEBAPP_REDIRECT: "true"
volumes:
- ./data/geoserver:/opt/geoserver_data
healthcheck:
test:
[
"CMD-SHELL",
"curl --fail http://localhost:8080/geoserver/web/ || exit 1"
]
interval: 30s
timeout: 15s
retries: 10
start_period: 180s
networks:
- geoserver-network
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
depends_on:
geoserver:
condition: service_healthy
ports:
- "80:80"
# Descomente a linha abaixo após configurar HTTPS no Nginx.
#- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/logs:/var/log/nginx
networks:
- geoserver-network
networks:
geoserver-network:
driver: bridge
Observação: Um dos benefícios da imagem oficial do GeoServer é a possibilidade de instalar automaticamente as extensões durante a inicialização do container. Neste tutorial já deixamos configurados alguns dos plugins mais utilizados em projetos reais: Excel (exportação de dados), Importer (importação de arquivos), Image (suporte a imagens), Web Resource (recursos web) e WPS (Web Processing Service). Dessa forma, ao término da instalação, o ambiente já estará pronto para utilização, sem necessidade de instalar essas extensões manualmente.
Observação: Os nomes informados na variável STABLE_EXTENSIONS correspondem aos identificadores oficiais das extensões utilizadas pela imagem Docker do GeoServer. A lista completa de plugins disponíveis e seus respectivos nomes pode ser consultada na documentação oficial do Docker do GeoServer: Docker Container – Adding GeoServer Extensions. Para conhecer a finalidade de cada extensão, consulte também a documentação oficial de extensões do GeoServer: GeoServer Extensions Documentation.
E não esqueça de criar também o arquivo .env:
> nano .env
E inserir o seguinte conteúdo:
POSTGRES_DB=geoserver POSTGRES_USER=geoserver POSTGRES_PASSWORD=SUBSTITUA_POR_UMA_SENHA_FORTE PUBLIC_GEOSERVER_URL=http://SEU_IP/geoserver TZ=America/Sao_Paulo
Substitua SUBSTITUA_POR_UMA_SENHA_FORTE por uma senha segura e SEU_IP pelo endereço IP público do servidor antes de iniciar os containers.
A variável PUBLIC_GEOSERVER_URL deve apontar para o endereço utilizado pelos usuários para acessar o GeoServer. Durante os testes ela pode utilizar o IP do servidor. Em ambientes de produção recomenda-se utilizar um domínio com HTTPS.
Dica: Nunca publique este arquivo em repositórios Git públicos, pois ele contém a senha do banco de dados.
10. Criar o arquivo geoserver.conf
O Nginx será utilizado como proxy reverso, permitindo acessar o GeoServer através da porta 80 e facilitando futuras configurações de HTTPS.
> nano nginx/conf.d/geoserver.conf
E insira o seguinte conteúdo:
server {
listen 80;
server_name _;
client_max_body_size 2G;
location = / {
return 302 /geoserver/web/;
}
location /geoserver/ {
proxy_pass http://geoserver:8080/geoserver/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
proxy_request_buffering off;
proxy_buffering off;
}
}
11. Subir os containers
> docker compose up -d
Depois acesse no seu navegador http://SEU_IP/geoserver
12. Conclusão
Agora você possui um ambiente moderno baseado em containers, executando o GeoServer 3, PostgreSQL 18/PostGIS 3.6 e Nginx.
Essa estrutura pode ser utilizada para estudos, treinamentos, desenvolvimento e também servir como base para ambientes de produção de pequeno e médio porte.





















</figure>











































Você sabe transformar isso em uma solução acessível na web?
Gerar mapas
Não.
PostgreSQL + PostGIS
GeoServer
GeoNode
Na prática, isso significa que você será capaz de:































El contexto: hoja de ruta de QGIS 4.x y Qt6
Qué implica realmente el salto a QGIS 4.0
Adaptación del ecosistema y validación técnica
Estándares e interoperabilidad como elemento estabilizador
Caso práctico: validar el entorno tras la migración









O que você vai dominar:
Python do zero com foco técnico
Para quem é este curso?
Profissionais de GIS e Geoprocessamento
Vagas limitadas
Se você não pôde participar presencialmente ou deseja rever os conteúdos apresentados, todos os vídeos das palestras estão disponíveis gratuitamente no nosso canal do YouTube!
Continue acompanhando nossas redes sociais e site para ficar por dentro dos próximos encontros, oficinas e oportunidades de capacitação!