From 1125dbfb47538a90f77d89abf85079415cafcc05 Mon Sep 17 00:00:00 2001 From: Erico Mac Date: Tue, 6 Oct 2026 21:03:40 -0300 Subject: [PATCH] compose: rastro-node v4.8 (Rastro Vista) --- docker-compose.yaml | 31 ++++++++++++++++--------------- docker-compose.yml | 31 ++++++++++++++++--------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 5546b81..29709c8 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -89,7 +89,7 @@ services: - '5000' ingestor: # DRENAGEM do ONE (passagens + fotos). Valores de cadência da produção antiga. - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped # Só ORDEM de partida, sem `condition: service_healthy`: a espera de verdade é # dentro do container (`wait-for-db schema rabbitmq`). Com a condição aqui, o @@ -128,7 +128,7 @@ services: MINIO_BUCKET: rastro-photos command: 'sh -c "wait-for-db schema rabbitmq && pnpm --filter @rastro/ingestor start"' migrate: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: 'no' depends_on: - db @@ -141,7 +141,7 @@ services: DB_CONNECTION_LIMIT: '5' command: 'sh -c "wait-for-db && pnpm --filter @rastro/db migrate && pnpm --filter @rastro/db postgis && pnpm --filter @rastro/db timescale && pnpm --filter @rastro/db intel && pnpm --filter @rastro/db seed:access && pnpm --filter @rastro/db analyze && pnpm --filter @rastro/db restore-users"' processor: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped depends_on: - db @@ -168,7 +168,7 @@ services: command: 'sh -c "wait-for-db schema rabbitmq && pnpm --filter @rastro/processor start"' dfe-worker: # Cadeia MDF-e → CT-e → NF-e (SEFAZ; Teradata para transporte além de D+1) + rota OSRM. - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped depends_on: - db @@ -226,7 +226,7 @@ services: TERADATA_USER: '${TERADATA_USER}' TERADATA_PASSWORD: '${TERADATA_PASSWORD}' backend: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped depends_on: - db @@ -261,7 +261,7 @@ services: DFE_CERT_PFX_BASE64: '${DFE_CERT_PFX_BASE64}' DFE_CERT_PASSPHRASE: '${DFE_CERT_PASSPHRASE}' DFE_TLS_REJECT_UNAUTHORIZED: 'false' - # Rastro Campo (PWA volante). O registro de passagem (610500) nasce DESLIGADO e + # Rastro Vista (PWA volante). O registro de passagem (610500) nasce DESLIGADO e # em HOMOLOGAÇÃO (tpAmb 2): ligar CAMPO_PASSAGEM_ENABLED só depois de ver cStat # 135/136 em homologação; produção = SEFAZ_EVENTO_TP_AMB=1. CAMPO_PUBLIC_URL: 'https://${CAMPO_DOMAIN}' @@ -296,7 +296,7 @@ services: - traefik.http.routers.rastroapi.priority=1000 - traefik.http.routers.rastroapi.service=rastroapi - traefik.http.services.rastroapi.loadbalancer.server.port=39010 - # /api no domínio do Rastro Campo: roteador SEPARADO — se CAMPO_DOMAIN estiver + # /api no domínio do Rastro Vista: roteador SEPARADO — se CAMPO_DOMAIN estiver # vazio, só ele fica inválido; o /api do web/admin continua de pé. - 'traefik.http.routers.rastroapicampo.rule=Host(`${CAMPO_DOMAIN}`) && PathPrefix(`/api`)' - traefik.http.routers.rastroapicampo.entryPoints=https @@ -305,7 +305,7 @@ services: - traefik.http.routers.rastroapicampo.priority=1000 - traefik.http.routers.rastroapicampo.service=rastroapi web: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped environment: DATABASE_URL: 'postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=public' @@ -340,7 +340,7 @@ services: - traefik.http.routers.rastroweb.service=rastroweb - traefik.http.services.rastroweb.loadbalancer.server.port=39000 admin: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped environment: DATABASE_URL: 'postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=public' @@ -369,12 +369,13 @@ services: - traefik.http.routers.rastroadmin.priority=10 - traefik.http.routers.rastroadmin.service=rastroadmin - traefik.http.services.rastroadmin.loadbalancer.server.port=39020 - # Rastro Campo — PWA da fiscalização volante. O endereço sai da variável - # CAMPO_DOMAIN: basta defini-la e apontar o DNS, SEM configurar domínio na tela do - # Coolify (como o /api do backend já faz). HTTPS é obrigatório — sem ele o - # navegador não libera a câmera. + # Rastro Vista — PWA da fiscalização volante (endereço: rastrovista.). + # O identificador interno segue `campo` (serviço, rotas /api/campo, permissões + # campo.*): renomear por dentro exigiria migrar permissões já gravadas no banco, + # e ninguém além de nós vê esses nomes. HTTPS é obrigatório — sem certificado + # válido o navegador não libera a câmera. campo: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped environment: DATABASE_URL: 'postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=public' @@ -406,7 +407,7 @@ services: - traefik.http.routers.rastrocampo.priority=10 - traefik.http.routers.rastrocampo.service=rastrocampo - traefik.http.services.rastrocampo.loadbalancer.server.port=39030 - # OCR de placas do Rastro Campo (CPU, modelos embutidos na imagem). Só rede interna. + # OCR de placas do Rastro Vista (CPU, modelos embutidos na imagem). Só rede interna. alpr: image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-alpr:v1' restart: unless-stopped diff --git a/docker-compose.yml b/docker-compose.yml index 5546b81..29709c8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -89,7 +89,7 @@ services: - '5000' ingestor: # DRENAGEM do ONE (passagens + fotos). Valores de cadência da produção antiga. - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped # Só ORDEM de partida, sem `condition: service_healthy`: a espera de verdade é # dentro do container (`wait-for-db schema rabbitmq`). Com a condição aqui, o @@ -128,7 +128,7 @@ services: MINIO_BUCKET: rastro-photos command: 'sh -c "wait-for-db schema rabbitmq && pnpm --filter @rastro/ingestor start"' migrate: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: 'no' depends_on: - db @@ -141,7 +141,7 @@ services: DB_CONNECTION_LIMIT: '5' command: 'sh -c "wait-for-db && pnpm --filter @rastro/db migrate && pnpm --filter @rastro/db postgis && pnpm --filter @rastro/db timescale && pnpm --filter @rastro/db intel && pnpm --filter @rastro/db seed:access && pnpm --filter @rastro/db analyze && pnpm --filter @rastro/db restore-users"' processor: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped depends_on: - db @@ -168,7 +168,7 @@ services: command: 'sh -c "wait-for-db schema rabbitmq && pnpm --filter @rastro/processor start"' dfe-worker: # Cadeia MDF-e → CT-e → NF-e (SEFAZ; Teradata para transporte além de D+1) + rota OSRM. - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped depends_on: - db @@ -226,7 +226,7 @@ services: TERADATA_USER: '${TERADATA_USER}' TERADATA_PASSWORD: '${TERADATA_PASSWORD}' backend: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped depends_on: - db @@ -261,7 +261,7 @@ services: DFE_CERT_PFX_BASE64: '${DFE_CERT_PFX_BASE64}' DFE_CERT_PASSPHRASE: '${DFE_CERT_PASSPHRASE}' DFE_TLS_REJECT_UNAUTHORIZED: 'false' - # Rastro Campo (PWA volante). O registro de passagem (610500) nasce DESLIGADO e + # Rastro Vista (PWA volante). O registro de passagem (610500) nasce DESLIGADO e # em HOMOLOGAÇÃO (tpAmb 2): ligar CAMPO_PASSAGEM_ENABLED só depois de ver cStat # 135/136 em homologação; produção = SEFAZ_EVENTO_TP_AMB=1. CAMPO_PUBLIC_URL: 'https://${CAMPO_DOMAIN}' @@ -296,7 +296,7 @@ services: - traefik.http.routers.rastroapi.priority=1000 - traefik.http.routers.rastroapi.service=rastroapi - traefik.http.services.rastroapi.loadbalancer.server.port=39010 - # /api no domínio do Rastro Campo: roteador SEPARADO — se CAMPO_DOMAIN estiver + # /api no domínio do Rastro Vista: roteador SEPARADO — se CAMPO_DOMAIN estiver # vazio, só ele fica inválido; o /api do web/admin continua de pé. - 'traefik.http.routers.rastroapicampo.rule=Host(`${CAMPO_DOMAIN}`) && PathPrefix(`/api`)' - traefik.http.routers.rastroapicampo.entryPoints=https @@ -305,7 +305,7 @@ services: - traefik.http.routers.rastroapicampo.priority=1000 - traefik.http.routers.rastroapicampo.service=rastroapi web: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped environment: DATABASE_URL: 'postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=public' @@ -340,7 +340,7 @@ services: - traefik.http.routers.rastroweb.service=rastroweb - traefik.http.services.rastroweb.loadbalancer.server.port=39000 admin: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped environment: DATABASE_URL: 'postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=public' @@ -369,12 +369,13 @@ services: - traefik.http.routers.rastroadmin.priority=10 - traefik.http.routers.rastroadmin.service=rastroadmin - traefik.http.services.rastroadmin.loadbalancer.server.port=39020 - # Rastro Campo — PWA da fiscalização volante. O endereço sai da variável - # CAMPO_DOMAIN: basta defini-la e apontar o DNS, SEM configurar domínio na tela do - # Coolify (como o /api do backend já faz). HTTPS é obrigatório — sem ele o - # navegador não libera a câmera. + # Rastro Vista — PWA da fiscalização volante (endereço: rastrovista.). + # O identificador interno segue `campo` (serviço, rotas /api/campo, permissões + # campo.*): renomear por dentro exigiria migrar permissões já gravadas no banco, + # e ninguém além de nós vê esses nomes. HTTPS é obrigatório — sem certificado + # válido o navegador não libera a câmera. campo: - image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.7' + image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-node:v4.8' restart: unless-stopped environment: DATABASE_URL: 'postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=public' @@ -406,7 +407,7 @@ services: - traefik.http.routers.rastrocampo.priority=10 - traefik.http.routers.rastrocampo.service=rastrocampo - traefik.http.services.rastrocampo.loadbalancer.server.port=39030 - # OCR de placas do Rastro Campo (CPU, modelos embutidos na imagem). Só rede interna. + # OCR de placas do Rastro Vista (CPU, modelos embutidos na imagem). Só rede interna. alpr: image: 'gitea.externo.utic.app.br/ericoalmeida/rastro-alpr:v1' restart: unless-stopped