dsp-core¶
Este módulo é parte do DSP — veja a documentação completa em dsp-docs. As informações abaixo tratam apenas deste módulo.
Objetivo¶
O dsp-core é o hub de orquestração Docker Compose do DSP. Ele não contém código de aplicação/domínio — sua responsabilidade é preparar e subir a infraestrutura (bancos, GeoServers, gateway, jobs de migração e geo-file) e orquestrar o build dos demais módulos.
flowchart TD
core["dsp-core"]
be["dsp-backend"]
fe["dsp-frontend"]
job["dsp-job-data-migration"]
geoFile["dsp-job-geo-file-generation"]
storage["dsp-object-storage (SeaweedFS)"]
gs["2 GeoServers + 2 bancos Postgres/PostGIS"]
gw["dsp-gateway"]
core --> be
core --> fe
core --> job
core --> geoFile
core --> storage
core --> gs
core --> gw
Responsabilidades¶
- Configuração de exemplo do adotante.
- Conteúdo de exemplo da página About (
config/about/). - SQL de inicialização dos bancos.
- GeoServer Exhibition (mapa) e GeoServer Download (WFS de exportação).
- Gateway nginx (
dsp-gateway) como porta de entrada única da stack. - Object storage SeaweedFS (
dsp-object-storage, profileobject-storage) e job geo-file (dsp-job-geo-file-generation, mesmo profile) — obrigatórios no adotante real; a Demo Brasil não sobe esses serviços. - Job de migração (
dsp-job-migration, profilemigration). - Três scripts operacionais:
./config.sh,./setup.sh,./start.sh. - Clone automático dos repositórios irmãos quando ausentes (com preview da estrutura de pastas antes da confirmação). O script olha a pasta curta (
backende equivalentes) e, se o código não estiver lá, a pasta com o nome do repositório (dsp-*). Se as duas faltarem, o download cria a pastadsp-*../config.shtambém clona o job se faltar.
Pré-requisitos¶
| Requisito | Detalhe |
|---|---|
| Shell Bash | Os scripts (config.sh, setup.sh, start.sh) são bash puro. Nativo em Linux e macOS; no Windows requer WSL2 (não há suporte nativo via PowerShell/cmd). |
| Git | Clonar repositórios irmãos ausentes (automático via scripts ou manual); necessário apenas se os repos ainda não existirem |
| Docker 24+ com Compose v2 | Usado para subir bancos, GeoServer e os demais módulos |
| Python 3 | Usado pelo wizard ./config.sh |
Os três scripts¶
./config.sh¶
Wizard interativo que grava config/adopter/adopter-config.yaml e, na reaplicação, gera os arquivos operacionais (lista abaixo). Entrada: ./config.sh (sem argumentos).
config/installation/installation-config.json— hierarquia, telas, KPIs,map.initialView, painel de detalhe da AOI.config/map/mapLayersConfig.json— grupos e camadas WMS, SRIDs.config/downloads/downloadThemesConfig.json— temas da tela Downloads.config/about/about-config.json— índice da página About (quando habilitada); Markdown emconfig/about/.config/Job-Data-Migration/application/application.yaml— datasources e mapeamento ETL.config/Job-Geo-File-Generation/application/application.yaml— object storage (SeaweedFS); sem cron no YAML..env—DSP_SOURCE_*,DSP_OBJECT_STORAGE_*e demais chaves que o wizard preenche.
Esses artefatos operacionais não devem ser editados manualmente — são derivados e regenerados a cada reaplicação de ./config.sh. Ajuste sempre config/adopter/adopter-config.yaml (wizard ou editor) e depois reaplique.
Rodar sem argumentos (./config.sh). Antes do wizard, o script procura cada módulo na pasta curta (backend, frontend, job-data-migration, job-geo-file-generation) e, se o código não estiver lá, na pasta dsp-*. Se as duas faltarem, oferece clonar para a pasta com o nome do repositório.
O wizard não pergunta horário de job batch nem grava DSP_MIGRATION_CRON ou DSP_GEO_FILE_GENERATION_CRON. Reaplicar (opção 1) não altera crons no .env.
Primeira execução (sem adopter-config.yaml ainda): o script pergunta como configurar:
| Opção | Ação |
|---|---|
| 1 | Configuração guiada — wizard passo a passo |
| 2 | Configuração existente — coloque seu adopter-config.yaml no caminho indicado e reaplique depois (opção 1 do menu abaixo) |
Execuções seguintes (quando o YAML já existe):
| Opção | Ação |
|---|---|
| 1 | Reaplicar a configuração existente sem passar pelo wizard novamente |
| 2 | Editar a configuração existente (reabre o wizard já preenchido com os valores atuais) |
| 3 | Recomeçar do zero a partir do template (adopter-config.yaml.example), descartando o arquivo atual |
Duas formas de configurar
Você pode seguir o wizard passo a passo (recomendado — cada pergunta explica o campo e onde o valor é usado, mostrando o valor atual/padrão entre colchetes e mantendo-o se você só apertar Enter), ou editar diretamente o arquivo config/adopter/adopter-config.yaml num editor de texto, usando config/adopter/adopter-config.yaml.example como referência de estrutura. Depois de editar o adotante, rode ./config.sh e escolha 1 — Reaplicar para regenerar os JSON/YAML operacionais. Não edite installation-config.json, mapLayersConfig.json, downloadThemesConfig.json nem os application.yaml dos jobs à mão.
Rebuild após alterar a configuração
Os arquivos operacionais gerados em config/ são copiados para dentro das imagens Docker no build (select-runtime-config.sh + contexto dsp_config). Depois de ./config.sh, rode ./setup.sh ou ./start.sh para rebuildar os containers que consomem essa configuração (backend, GeoServers, job de migração).
O wizard é dividido em 6 etapas. Em cada uma, o operador responde perguntas guiadas (com explicação do campo e do impacto) até cobrir a configuração necessária e a personalização do adotante:
| Etapa | O que é configurado | Impacto |
|---|---|---|
| 1 — Banco de origem | URL JDBC da fonte, usuário/senha de leitura (DSP_SOURCE_DB_USER / DSP_SOURCE_DB_PASSWORD) |
Job de migração e .env |
| 2 — Tabelas, colunas e camadas | Para L1/L2/L3/AOI: tabela, PK (uma coluna; composta não suportada), parent_key (L2/L3), nome, geometria, SRID, created_at_column (obrigatório), updated_at_column (opcional), where_clause. Na AOI: territory_level_3_column, additional_columns. Camadas genéricas em etl.layers[] (ETL + mapa + downloads num único bloco) |
Plano ETL, mapLayersConfig.json e downloadThemesConfig.json. Camadas extras: Migração de camadas genéricas |
| 3 — Aplicação | Label do KPI de área de interesse (area_of_interest), formatos de data e data-hora |
Dashboard, listagens e detalhe |
| 4 — Interface | Labels da hierarquia, títulos das telas, campos do painel de detalhe da AOI, map.initialView (territorial_bbox / manual / planet), grupos e estilos das camadas fixas de mapa |
Frontend, seletor de camadas e estilos publicados no GeoServer |
| 5 — KPIs | Cores dos cards, unidade de área da AOI, quantidade e mapeamento dos KPIs de tema (0–4) | Bloco kpis no application.yaml, cards THEME_* e job kpi-job |
| 6 — About (opcional) | Habilitar página About, título do banner, abas (label + arquivo .md / .markdown; o wizard pode copiar de qualquer pasta para config/about/) |
about-config.json + conteúdo em config/about/ |
No terminal o wizard mostra 5 estágios numerados (1–5) mais o bloco About opcional ao final — na documentação, o About conta como 6ª etapa.
Object storage (SeaweedFS) não é perguntado no wizard. Credenciais e endpoint ficam em environment.object_storage no adopter-config.yaml (veja adopter-config.yaml.example); o ./config.sh copia isso para DSP_OBJECT_STORAGE_* no .env na reaplicação. A agenda do job geo-file (DSP_GEO_FILE_GENERATION_CRON) vem do ./setup.sh, não desta etapa.
O ./config.sh (opção 2 — editar) reabre esse mesmo wizard de 6 etapas com os valores atuais preenchidos.
Jobs gerados automaticamente¶
O wizard não pergunta quais jobs fixos ligar. O application.yaml gerado habilita sempre L1, L2, L3, área de interesse e kpi-job. A flag layer-jobs fica true quando há entradas em etl.layers[]; caso contrário, false.
A área exibida nos KPIs não vem da origem: o kpiCalculationJob calcula dsp.area_of_interest.area e grava temas em dsp.kpi_measure depois da migração. A etapa 5 define theme_count (0–4), a layer de cada tema, a unidade de área e as cores. Detalhe: Cálculo de KPIs.
SQL avançado em source_table (níveis fixos)¶
No wizard, source_table deve ser schema.tabela. Para subconsultas SQL (JOINs, aliases), edite diretamente o adopter-config.yaml com bloco YAML dobrado (>-), conforme o exemplo em adopter-config.yaml.example. Os nomes das colunas abaixo devem bater com os aliases do SELECT. Depois, ./config.sh → Reaplicar.
Camadas genéricas unificadas (etl.layers[])¶
Cada item alimenta três destinos a partir de uma única configuração:
Campo no adopter-config.yaml |
Onde é usado |
|---|---|
source_table, colunas de papel, where_clause, srid |
application.yaml → job de migração |
layer_name, display_name, group_key, active_default, color, fill_color |
mapLayersConfig.json → mapa e GeoServer |
(derivado de layer_name + display_name) |
downloadThemesConfig.json → tela Downloads (strategy: aoi_linked) |
A mesma source_table pode aparecer mais de uma vez se layer_name (e portanto a tabela destino dsp.<nome>) for distinto. Ao adicionar outra camada com a mesma origem no wizard, os campos de estrutura (PK, FK, geometria, datas, SRID) são reutilizados como padrão.
Para não migrar ou exibir uma camada, remova-a de etl.layers[] e reaplique — não use enabled: false no YAML do adotante.
Na etapa 6/6, o adotante pode recusar a página About; nesse caso ela permanece desabilitada. Se habilitar, o wizard valida extensão e existência dos arquivos Markdown e gera ids de aba (tab-1, tab-2, …) em about-config.json.
Contrato protegido
O arquivo gerado contém apenas os campos editáveis pelo adotante. Chaves de contrato internas do DSP (IDs de camada WMS, nomes de tabela alvo, códigos de KPI) permanecem fixas nos templates do core e não são expostas no wizard.
Página About (config/about/)¶
A pasta config/about/ traz o conteúdo de exemplo da página About do frontend: about-config.json.example (índice de exemplo) e os Markdown de demonstração (*.quickstart.md.example, copiados no modo Demonstração). O fluxo normal do wizard é informar um Markdown de qualquer pasta do computador, que é copiado para config/about/.
O YAML do adotante (config/adopter/adopter-config.yaml / .yaml.example) tem uma seção about com os campos:
| Campo | Função |
|---|---|
enabled |
Habilita/desabilita a página About customizada |
banner_title |
Título exibido no banner da página |
tabs |
Lista de {label, file} — no wizard, file pode ser de qualquer pasta (copiado para config/about/); na edição manual do YAML, só o nome do arquivo já presente em config/about/ (caminhos absolutos ou fora da pasta são recusados no apply) |
apply_config() gera config/about/about-config.json com ids automáticos (tab-1, tab-2, …) a partir da ordem das abas. O backend lê esses arquivos em /config/about/ dentro da imagem (copiados no build). Variáveis: DSP_ABOUT_CONFIG_FILE e DSP_ABOUT_CONTENT_DIR (.env.example).
./setup.sh¶
Prepara bancos, GeoServer e (no fluxo real) a primeira migração. Roda sem argumentos e apresenta um menu com três opções:
| Opção | Ação |
|---|---|
| 1 — Demonstração | Seed sintético do Brasil, sem fonte JDBC nem job de migração. Indicada para explorar a UI ou avaliar a stack. |
| 2 — Adotante real (ETL via JDBC) | Requer ./config.sh antes. Pergunta quando e como a migração deve rodar (submenu abaixo). Grava em dsp-db + dsp-geoserver-db. |
| 3 — Status / cleanup / sair | Status dos containers e URLs; opcionalmente remove recursos Docker do projeto. Não sobe nem migra. |
Submenu da opção 2 — plano de migração¶
1. Quando deve rodar a carga inicial?
| Escolha | Efeito |
|---|---|
| Run now | Primeira migração durante este ./setup.sh |
| Schedule for later | Bancos ficam vazios no setup; primeira carga em DSP_MIGRATION_SCHEDULED_AT |
2. Como a migração deve se comportar depois?
| Escolha | Run now | Schedule for later |
|---|---|---|
| One-time | once: migra no setup e desliga o container do job |
scheduled-once: espera a data/hora, migra uma vez, publica GeoServers e sai |
| Continuous (periodic re-sync) | continuous: migra no setup e mantém o container com supercronic em DSP_MIGRATION_CRON |
continuous + DSP_MIGRATION_SCHEDULED_AT: primeira carga na data escolhida, depois cron |
No modo Continuous, o script pergunta How often should the data be synchronized after the initial migration?: todo dia num horário; a cada N horas; ou a cada N minutos (1–59, útil para teste local). O horário de Schedule for later é reutilizado se a escolha for “todo dia”.
Em seguida (ainda no step 3 do setup, opção 2), pergunta o cron de pré-geração de arquivos de download — expressão Unix de 5 campos para DSP_GEO_FILE_GENERATION_CRON (padrão: valor atual do .env ou 0 2 * * *). Deve ficar numa janela depois da migração periódica, quando houver DSP_MIGRATION_CRON. O adotante não digita a expressão de migração manualmente; para pré-geração, informa o cron diretamente ou aceita o padrão com Enter.
Valores de migração e pré-geração são gravados no .env no fim do setup (step 9), junto com DSP_MIGRATION_*. Reexecutar ./setup.sh (adotante real) repete as perguntas, usando o .env como padrão.
Fuso da migração: DSP_MIGRATION_TZ no .env (veja .env.example). Pré-geração herda DSP_MIGRATION_TZ quando DSP_GEO_FILE_GENERATION_TZ está vazio.
| Combinação | DSP_MIGRATION_EXECUTION_MODE |
Container do job após o setup |
|---|---|---|
| Run now + One-time | once |
Desligado |
| Schedule + One-time | scheduled-once |
Ativo até a carga; depois sai |
| Run now + Continuous | continuous |
Ativo (supercronic) |
| Schedule + Continuous | continuous + DSP_MIGRATION_SCHEDULED_AT |
Ativo (espera, depois supercronic) |
Se config/Job-Data-Migration/application/application.yaml ainda for idêntico ao template (.example), o setup.sh interrompe com erro — rode ./config.sh ou edite o arquivo antes.
Bancos e publicação de camadas¶
Antes de migrar, o script espera a inicialização completa do PostgreSQL (pg_isready + schemas dsp e data_migration criados pelo SQL de init).
| Carga inicial | GeoServers no fim do setup |
|---|---|
| Run now (migração no setup) | populate_geoserver.sh publica camadas nos dois GeoServers (REST) |
| Schedule for later | GeoServers sobem sem camadas; publish_geoservers.sh no entrypoint do job roda após a primeira carga agendada com sucesso |
AOI e camadas genéricas só existem nos GeoServers depois que o job populou o geoserver-db.
./start.sh¶
Use depois do ./setup.sh. Não roda migração, seed, populate de GeoServer nem sobe bancos/jobs — apenas rebuilda e liga dsp-backend, dsp-frontend e dsp-gateway (com docker compose … --no-deps, para não religar a infra via depends_on).
| Passo do script | O que faz |
|---|---|
| 1 — Pré-requisitos | Docker; cria/valida .env |
| 2 — Repositórios | Procura backend e frontend na pasta curta (../backend, ../frontend) e depois em ../dsp-backend e ../dsp-frontend. Grava o caminho usado em DSP_BACKEND_PATH / DSP_FRONTEND_PATH. |
| 3 — Config em disco | Exige installation-config.json, mapLayersConfig.json e downloadThemesConfig.json (válidos; tipicamente gerados pelo ./config.sh ou quickstart na demo) |
| 4 — Infraestrutura | Só verifica se os containers esperados já estão rodando (falha com hint se não). Demo: dois bancos + dois GeoServers. Adotante real: o mesmo núcleo +, conforme o .env, job de migração, dsp-object-storage e job geo-file |
| 5 — URL do site | Mostra a URL pública do frontend (dsp_public_base_url + VITE_BASE_URL) |
| 6 — Aplicação | Build/up de backend, frontend e gateway |
| Ao final | Resumo da stack, URLs e dicas (incl. geo-file quando aplicável) |
Camadas no mapa e primeira carga de dados continuam sendo responsabilidade do ./setup.sh (ou do job agendado depois). Se você fez docker compose down sem -v, o ./start.sh não religa bancos nem GeoServers — siga o comando que o script imprime no erro ou rode ./setup.sh de novo.
Bancos e GeoServer¶
Só os bancos publicam porta no host. Os serviços HTTP ficam acessíveis apenas pelo gateway. Os dois jobs não expõem HTTP — sobem por profile do Compose.
| Serviço | Acesso | Papel |
|---|---|---|
| dsp-db | porta 20654 | Banco operacional — negócio + bbox/centroid. Metadados Spring Batch: schema data_migration (job de migração) e schema geo_file_generation (job geo-file) |
| GeoServer DB (dsp-geoserver-db) | porta 20656 | Geometria completa dsp.* |
Job de migração (dsp-job-migration) |
profile migration, sem porta HTTP |
ETL da origem JDBC para dsp-db e geoserver-db |
Object storage (dsp-object-storage) |
profile object-storage, porta host 8333 (opcional) |
SeaweedFS (weed mini) — API S3 do DSP. Obrigatório no adotante real |
Job geo-file (dsp-job-geo-file-generation) |
profile object-storage, sem porta HTTP |
Pré-gera CSV de download no SeaweedFS. Obrigatório no adotante real |
| GeoServer Exhibition | via gateway, /geoserver-exhibition/ |
WMS/WFS de mapa a partir do geoserver-db |
| GeoServer Download | via gateway, /geoserver-download/ |
WFS de downloads (consumido pelo backend) |
Fluxo dual-write¶
flowchart LR
src[(Fonte JDBC do adotante)] --> job[Job de migração]
job -->|"negócio + bbox/centroid"| dspdb[(dsp-db)]
job -->|"geometria completa"| exdb[(dsp-geoserver-db)]
exdb --> gsEx[GeoServer Exhibition WMS]
exdb --> gsDl[GeoServer Download WFS]
exdb --> geoFile[Job geo-file]
geoFile -->|CSV pré-gerado| s3[(dsp-object-storage SeaweedFS)]
dspdb --> be[Backend serve API]
be --> fe[Frontend consome API + WMS]
be -->|WFS downloads| gsDl
be -->|CSV S3-first| s3
Gateway (dsp-gateway)¶
Container nginx que é a porta de entrada única da stack. Frontend, backend e os dois GeoServers não
publicam porta no host — tudo entra por DSP_GATEWAY_HOST_PORT (default 8026).
A configuração fica em config/Gateway/nginx/default.conf.template, é copiada para a imagem no docker compose build (/etc/nginx/templates/) e processada por envsubst quando o container sobe, substituindo apenas as variáveis DSP_*. O volume dsp_gateway_cache guarda só o cache, não os templates.
| Rota externa | Destino interno |
|---|---|
/ |
redireciona para /dsp/ |
/dsp/ |
dsp-frontend:8080 |
/dsp-backend/ |
dsp-backend:8080 (acompanha DSP_BACKEND_CONTEXT_PATH) |
/geoserver-exhibition/ |
dsp-geoserver-exhibition:8080/geoserver/ |
/geoserver-download/ |
dsp-geoserver-download:8080/geoserver/ |
/gateway/health |
resposta local do nginx |
Os dois GeoServers respondem em /geoserver internamente, então cada um recebe um prefixo externo
próprio e um rewrite. Cada um também recebe PROXY_BASE_URL com a sua URL pública, para que os
links do GetCapabilities e da interface web saiam corretos.
Como o gateway resolve os upstreams em runtime pelo DNS do Docker, ele sobe mesmo com algum serviço
parado — responde 502 em vez de falhar no boot. Isso é o que permite usar o modo demo do
./setup.sh, que não sobe backend nem frontend.
Cache¶
O cache já está configurado, mas vem desligado. Ele cobre apenas os endpoints WMS/WFS
(/geoserver-exhibition/<workspace>/wms, /wfs e os equivalentes em /geoserver-download/), que não têm
sessão — a UI web e a REST do GeoServer ficam de fora para não quebrar o login do admin.
Para ligar, deixe DSP_GATEWAY_CACHE_BYPASS vazio no .env e recrie o container:
# .env
DSP_GATEWAY_CACHE_BYPASS=
DSP_GATEWAY_CACHE_TTL=10m
docker compose --env-file .env up -d --force-recreate dsp-gateway
O header X-Cache-Status (HIT, MISS, BYPASS) sai em toda resposta dos GeoServers e serve para
conferir o comportamento. Para limpar o cache, remova o volume dsp_gateway_cache.
URLs padrão¶
| Serviço | URL |
|---|---|
| Frontend | http://localhost:8026/dsp/ |
| Backend API | http://localhost:8026/dsp-backend |
| GeoServer Exhibition | http://localhost:8026/geoserver-exhibition/web/ |
| GeoServer Download | http://localhost:8026/geoserver-download/web/ |
| Health do gateway | http://localhost:8026/gateway/health |
Variáveis de ambiente relevantes (.env do core)¶
O .env é criado automaticamente na primeira execução de ./config.sh, ./setup.sh ou ./start.sh (a partir de .env.example). Não é necessário copiá-lo manualmente.
O ./config.sh grava JDBC, SRID e DSP_OBJECT_STORAGE_* (a partir de environment no adopter YAML) no .env. As agendas de migração e geo-file vêm do ./setup.sh (adotante real). Compreender as variáveis abaixo ajuda a personalizar a instalação e a solucionar problemas.
| Variável | Função |
|---|---|
DSP_SOURCE_JDBC_URL |
URL JDBC da fonte de dados do adotante (banco a migrar) |
DSP_SOURCE_DB_USER / DSP_SOURCE_DB_PASSWORD |
Credenciais da fonte JDBC |
DSP_MIGRATION_EXECUTION_MODE |
once: carga no setup e desliga o job. continuous: supercronic em DSP_MIGRATION_CRON. scheduled-once: uma carga em DSP_MIGRATION_SCHEDULED_AT |
DSP_MIGRATION_CRON |
Cron Unix de 5 campos gerado pelo setup (ex.: 0 */6 * * * ou */2 * * * *). Só continuous |
DSP_MIGRATION_SCHEDULED_AT |
Data/hora da primeira carga quando o setup escolhe Schedule for later |
DSP_MIGRATION_TZ |
Fuso IANA do relógio (.env.example) |
DSP_GEO_FILE_GENERATION_EXECUTION_MODE |
continuous (padrão): supercronic em DSP_GEO_FILE_GENERATION_CRON. once: uma execução via compose run |
DSP_GEO_FILE_GENERATION_CRON |
Cron Unix de 5 campos para o job geo-file (ex.: 0 2 * * *). Definido no ./setup.sh (adotante real), não no ./config.sh |
DSP_GEO_FILE_GENERATION_TZ |
Fuso da pré-geração; vazio herda DSP_MIGRATION_TZ |
| Credenciais dos 2 bancos do core | Usuário/senha de dsp-db e dsp-geoserver-db |
DSP_GEOSERVER_WFS_BASE_URL |
URL WFS do GeoServer Download na rede Docker (backend → download) |
DSP_PUBLIC_BASE_URL |
URL pública da stack (http://localhost:8026). Alimenta URLs WMS/WFS do ./config.sh e PROXY_BASE_URL dos GeoServers |
DSP_GATEWAY_HOST_PORT |
Porta HTTP do gateway (default 8026) |
DSP_GATEWAY_CACHE_BYPASS / DSP_GATEWAY_CACHE_TTL |
Liga/desliga o cache do nginx e define o TTL |
DSP_CORS_ALLOWED_ORIGINS |
Origens permitidas no CORS do backend |
DSP_ABOUT_CONFIG_FILE / DSP_ABOUT_CONTENT_DIR |
Índice About e pasta Markdown (default file:/config/about/…) |
DSP_OBJECT_STORAGE_ENDPOINT |
Quando definido, habilita o job geo-file (profile=geo-file) |
| Build args do frontend | VITE_BASE_URL, VITE_DSP_API_URL — definem base path e URL da API usadas no build da imagem |
DSP_OBJECT_STORAGE_* / DSP_OBJECT_STORAGE_HOST_PORT |
Endpoint interno do SeaweedFS (http://dsp-object-storage:8333), bucket, credenciais e porta no host para diagnóstico — derivados de environment.object_storage no reaplicar do ./config.sh (não perguntados no wizard). Demo Brasil deixa o endpoint vazio |
DSP_BACKEND_PATH / DSP_FRONTEND_PATH / DSP_JOB_MIGRATION_PATH / DSP_JOB_GEO_FILE_GENERATION_PATH |
Caminho do código de cada módulo no build. O script procura a pasta curta e depois a pasta dsp-*, e grava aqui a pasta usada. Se as duas faltarem, o download cria a pasta dsp-*. |
Veja também: Instalação completa, Bancos de dados.
Estrutura de configuração gerada¶
config/adopter/adopter-config.yaml é o arquivo central produzido pelo wizard ./config.sh. A partir dele são derivados os arquivos operacionais consumidos por backend (installationConfig.json, mapLayersConfig.json, downloadThemesConfig.json, about-config.json) e pelo job de migração (application.yaml), evitando que cada módulo precise ser configurado manualmente e de forma isolada.
O wizard ./config.sh produz um único adopter-config.yaml e, a partir dele, deriva todos os artefatos operacionais consumidos pelos demais módulos. O downloadThemesConfig.json entra nesse pipeline como catálogo de temas para a tela de Downloads e para o proxy WFS do backend. O about-config.json entra nesse pipeline como índice de conteúdo (banner + abas) da página About do frontend.
flowchart LR
configSh["./config.sh"]
configSh --> installJson["installation-config.json"]
configSh --> mapJson["mapLayersConfig.json"]
configSh --> downloadJson["downloadThemesConfig.json"]
configSh --> aboutJson["about-config.json"]
configSh --> appYaml["Job-Data-Migration application.yaml"]
configSh --> geoYaml["Job-Geo-File-Generation application.yaml"]
configSh --> dotenvStorage[".env DSP_OBJECT_STORAGE_* / DSP_SOURCE_*"]
installJson --> build["docker compose build<br/>contexto dsp_config"]
mapJson --> build
downloadJson --> build
aboutJson --> build
appYaml --> build
geoYaml --> build
dotenvStorage --> setupSh["./setup.sh grava crons no .env"]
build --> backendImg["dsp-backend /config"]
build --> geoserverImg["GeoServers /config"]
build --> jobImg["dsp-job-migration /config"]
./config.sh— ponto de entrada do adotante; wizard, reaplicação ou recriação doadopter-config.yamle geração dos JSON/YAML operacionais listados acima.select-runtime-config.sh— no build Docker, escolhe o arquivo ativo ou o.examplee copia para/configdentro da imagem.installation-config.json— labels, hierarquia, telas, KPIs escreens.home.detail.fields(DSP_INSTALLATION_CONFIG_FILE). Esse array não vai para oapplication.yamldo job.mapLayersConfig.json— grupos e camadas WMS; publicadas nos GeoServers pelopopulate_geoserver.sh.downloadThemesConfig.json— temas de download (AOI +etl.layers[]);formatsécsvegpkg;wfsBaseUrlem${DSP_PUBLIC_BASE_URL}/geoserver-download/dsp/wfs.about-config.json— índice About (enabled,bannerTitle,tabscom idstab-1,tab-2, …).application.yaml— plano ETL. Copiado para a imagem do job no build (com entrypoint e scripts de publicação GeoServer).config/Job-Geo-File-Generation/application/application.yaml— S3 do job de pré-geração (sem cron; agenda só no.envvia./setup.sh).- Imagens
dsp-backend, GeoServers,dsp-job-migration, bancos edsp-gateway— configs e SQL de init copiados no build viadsp_config; volumes guardam só dados (e cache do gateway). - Imagem
dsp-object-storage— SeaweedFS (weed mini) com credenciais ems3.jsonna imagem. Volumedsp_object_storage_dataguarda os objetos; tamanho e quantidade de volumes internos são calculados peloweed miniconforme o espaço livre no volume Docker.
Veja também: Fluxo de dados (runtime) e dsp-backend (variáveis de ambiente de downloads).