Bem-vindo ao Guia de Setup

ℹ️
Para quem e este guia?
Este guia foi criado para pessoas sem experiencia previa com Google Cloud Platform. Siga cada passo na ordem exata.

O que voce vai configurar

☁️ Google Cloud

Projeto, APIs, Service Accounts e permissoes

🗄️ Banco de Dados

Firestore em modo Native com indices

📦 Armazenamento

4 buckets para uploads, processados, logs e backups

⚡ Cloud Functions

11 funcoes serverless para processamento

🌐 Frontend

Dashboard web no Firebase Hosting

🔐 Seguranca

7 secrets no Secret Manager para credenciais

🏢 SAP Integration

Configuracao opcional para SAP HANA/ECC

Tempo estimado: 2-3 horas

Siga cada etapa com atencao. Ao final, voce tera o sistema completo funcionando em producao.

📋 Etapa 1: Pre-requisitos

O que voce precisa ter

Item Descricao Status
Conta Google Gmail ou Google Workspace Obrigatorio
Cartao de Credito Para ativar GCP (nao sera cobrado no free trial) Obrigatorio
Node.js 20+ Runtime para as Cloud Functions Obrigatorio
Git Para clonar o repositorio Obrigatorio
Chaves de API Sintegra, Serasa, SendGrid (solicitar ao gestor) Obrigatorio

Instalar Node.js

Windows
1

Baixar instalador

Acesse nodejs.org e baixe a versao LTS (20.x)

2

Executar instalador

Execute o arquivo .msi e siga as instrucoes. Marque a opcao "Automatically install necessary tools"

macOS
brew install node@20
Linux (Ubuntu/Debian)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs

Verificar instalacao

node --version npm --version

Deve mostrar versao 20.x.x para Node e 10.x.x para npm

Instalar Google Cloud CLI

Windows

Baixe o instalador em cloud.google.com/sdk/docs/install

Execute o GoogleCloudSDKInstaller.exe e marque todas as opcoes.

macOS
brew install --cask google-cloud-sdk
Linux
curl https://sdk.cloud.google.com | bash exec -l $SHELL

Instalar Firebase CLI

npm install -g firebase-tools
🔴
IMPORTANTE: Windows - CMD vs PowerShell
No Windows existem dois terminais diferentes que funcionam de formas distintas:

CMD (Prompt de Comando) Terminal classico do Windows. Comandos com $variavel NAO funcionam.
PowerShell Terminal moderno. Comandos com $variavel funcionam.
Git Bash Terminal Linux no Windows (instalado com Git). Todos os comandos Linux funcionam.
Recomendacao: Use o Git Bash ou PowerShell para seguir este guia.

Como abrir o PowerShell: Pressione Windows + X e clique em "Windows PowerShell" ou "Terminal".
Checklist da Etapa 1
  • Node.js 20+ instalado
  • Git instalado
  • Google Cloud CLI instalado
  • Firebase CLI instalado

☁️ Etapa 2: Criar Projeto no Google Cloud

2.1 Acessar o Console GCP

1

Abrir o Console

Acesse console.cloud.google.com e faca login com sua conta Google.

2.2 Criar novo projeto

2

Clicar em "Novo Projeto"

No topo da pagina, clique no seletor de projetos e depois em "NOVO PROJETO"

3

Configurar o projeto

Nome do Projeto tbg-app-robotia-gcnt-cad-forne
ID do Projeto tbg-app-robotia-gcnt-cad-forne (sera gerado automaticamente)
Organizacao Selecione sua organizacao ou deixe "No organization"
⚠️
ANOTE ESTAS INFORMACOES!
Voce vai precisar do Project ID e do Project Number mais tarde. O Project Number pode ser encontrado em IAM & Admin > Settings.

2.3 Configurar Billing

4

Vincular conta de faturamento

Va em Billing > Link a billing account e vincule sua conta. O Google oferece $300 de credito gratis por 90 dias.

2.4 Configurar gcloud CLI

# Login no GCP gcloud auth login # Configurar projeto padrao gcloud config set project tbg-app-robotia-gcnt-cad-forne # Configurar regiao padrao gcloud config set compute/region southamerica-east1 # Verificar configuracao gcloud config list
Checklist da Etapa 2
  • Projeto criado no GCP
  • Billing configurado
  • gcloud CLI configurado

🔌 Etapa 3: Habilitar APIs Necessarias

O projeto TBG Fornecedores utiliza 15 APIs do Google Cloud. Execute o comando abaixo para habilitar todas de uma vez:

⚠️
IMPORTANTE - Usuarios Windows!
Se voce esta usando Windows (CMD ou PowerShell), use o comando da aba "Windows" abaixo. O caractere \ nao funciona no Windows!

Linux / Mac / Git Bash:

gcloud services enable \ cloudfunctions.googleapis.com \ cloudbuild.googleapis.com \ cloudtasks.googleapis.com \ cloudscheduler.googleapis.com \ firestore.googleapis.com \ storage.googleapis.com \ secretmanager.googleapis.com \ logging.googleapis.com \ monitoring.googleapis.com \ pubsub.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com \ artifactregistry.googleapis.com \ firebase.googleapis.com \ firebasehosting.googleapis.com

Windows (CMD ou PowerShell) - Copie em UMA LINHA:

gcloud services enable cloudfunctions.googleapis.com cloudbuild.googleapis.com cloudtasks.googleapis.com cloudscheduler.googleapis.com firestore.googleapis.com storage.googleapis.com secretmanager.googleapis.com logging.googleapis.com monitoring.googleapis.com pubsub.googleapis.com eventarc.googleapis.com run.googleapis.com artifactregistry.googleapis.com firebase.googleapis.com firebasehosting.googleapis.com
Aguarde!
Este comando pode demorar 2-5 minutos. Voce vera mensagens de sucesso para cada API.

Verificar APIs habilitadas

gcloud services list --enabled
Checklist da Etapa 3
  • Todas as 15 APIs habilitadas

👤 Etapa 4: Criar Service Account

A Service Account e como um "usuario robo" que permite que as Cloud Functions acessem outros servicos do GCP.

4.1 Criar a Service Account

Linux / Mac / Git Bash:

gcloud iam service-accounts create tbg-app-robotia-gcnt-cad-forne \ --display-name="TBG Fornecedor Service Account" \ --description="Conta de servico para as Cloud Functions do TBG Fornecedores"

Windows (CMD/PowerShell) - Uma linha:

gcloud iam service-accounts create tbg-app-robotia-gcnt-cad-forne --display-name="TBG Fornecedor Service Account" --description="Conta de servico para as Cloud Functions do TBG Fornecedores"

4.2 Conceder permissoes

Execute cada comando abaixo. No Windows, use os comandos da secao Windows!

Linux / Mac / Git Bash:

# Permissao para Cloud Functions gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne \ --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" \ --role="roles/cloudfunctions.invoker" # Permissao para Firestore gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne \ --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" \ --role="roles/datastore.user" # Permissao para Cloud Storage gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne \ --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin" # Permissao para Cloud Tasks gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne \ --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" \ --role="roles/cloudtasks.enqueuer" # Permissao para Secret Manager gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne \ --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor" # Permissao para Logging gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne \ --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" \ --role="roles/logging.logWriter" # Permissao para Pub/Sub gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne \ --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" \ --role="roles/pubsub.publisher" # Permissao para Cloud Run gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne \ --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" \ --role="roles/run.invoker"

Windows (CMD/PowerShell) - Execute cada linha separadamente:

gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/cloudfunctions.invoker" gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/datastore.user" gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/storage.objectAdmin" gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/cloudtasks.enqueuer" gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/logging.logWriter" gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/pubsub.publisher" gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/run.invoker"
Checklist da Etapa 4
  • Service Account criada
  • 8 roles de permissao concedidas

🗄️ Etapa 5: Configurar Firestore

O Firestore e o banco de dados NoSQL que armazena os dados dos fornecedores.

5.1 Criar o banco de dados

# Criar Firestore em modo Native gcloud firestore databases create --location=southamerica-east1
⚠️
IMPORTANTE!
A localizacao do Firestore NAO pode ser alterada depois! Escolha com cuidado. Para o Brasil, recomendamos southamerica-east1 ou southamerica-east1.

5.2 Estrutura de dados

O sistema usa a seguinte estrutura no Firestore:

Colecao Descricao
fornecedores Dados dos fornecedores (CNPJ, razao social, status, etc)
processing_logs Logs de processamento
system-config Configuracoes do sistema (SAP, etc)
Checklist da Etapa 5
  • Firestore criado em modo Native

📦 Etapa 6: Criar Buckets do Cloud Storage

O sistema utiliza 4 buckets para diferentes propositos:

Bucket Proposito
tbg-app-robotia-gcnt-cad-forne-uploads Planilhas enviadas pelo usuario
tbg-app-robotia-gcnt-cad-forne-processed Arquivos processados
tbg-app-robotia-gcnt-cad-forne-rpa-logs Logs do RPA (Power Automate)
tbg-app-robotia-gcnt-cad-forne-backups Backups do sistema

6.1 Criar os buckets

# Criar os 4 buckets gsutil mb -p tbg-app-robotia-gcnt-cad-forne -c STANDARD -l southamerica-east1 gs://tbg-app-robotia-gcnt-cad-forne-uploads gsutil mb -p tbg-app-robotia-gcnt-cad-forne -c STANDARD -l southamerica-east1 gs://tbg-app-robotia-gcnt-cad-forne-processed gsutil mb -p tbg-app-robotia-gcnt-cad-forne -c STANDARD -l southamerica-east1 gs://tbg-app-robotia-gcnt-cad-forne-rpa-logs gsutil mb -p tbg-app-robotia-gcnt-cad-forne -c STANDARD -l southamerica-east1 gs://tbg-app-robotia-gcnt-cad-forne-backups # Verificar gsutil ls -p tbg-app-robotia-gcnt-cad-forne

6.2 Configurar CORS

Para permitir uploads do frontend, configure o CORS:

Linux / Mac / Git Bash:

# Criar arquivo cors.json cat > cors.json << 'EOF' [ { "origin": ["*"], "method": ["GET", "POST", "PUT", "DELETE", "HEAD"], "responseHeader": ["Content-Type", "Authorization"], "maxAgeSeconds": 3600 } ] EOF # Aplicar ao bucket de uploads gsutil cors set cors.json gs://tbg-app-robotia-gcnt-cad-forne-uploads

Windows (PowerShell):

# Criar arquivo cors.json @' [ { "origin": ["*"], "method": ["GET", "POST", "PUT", "DELETE", "HEAD"], "responseHeader": ["Content-Type", "Authorization"], "maxAgeSeconds": 3600 } ] '@ | Out-File -FilePath cors.json -Encoding UTF8 # Aplicar ao bucket de uploads gsutil cors set cors.json gs://tbg-app-robotia-gcnt-cad-forne-uploads

Windows (CMD) - Criar manualmente:

REM 1. Abra o Bloco de Notas e cole o conteudo JSON abaixo: REM [{"origin":["*"],"method":["GET","POST","PUT","DELETE","HEAD"],"responseHeader":["Content-Type","Authorization"],"maxAgeSeconds":3600}] REM 2. Salve como cors.json na pasta atual REM 3. Execute o comando abaixo: gsutil cors set cors.json gs://tbg-app-robotia-gcnt-cad-forne-uploads
💡
Conteudo do cors.json
Se preferir criar manualmente, salve este conteudo em um arquivo chamado cors.json:
[
  {
    "origin": ["*"],
    "method": ["GET", "POST", "PUT", "DELETE", "HEAD"],
    "responseHeader": ["Content-Type", "Authorization"],
    "maxAgeSeconds": 3600
  }
]
Checklist da Etapa 6
  • 4 buckets criados
  • CORS configurado no bucket de uploads

📋 Etapa 7: Configurar Cloud Tasks e Pub/Sub

O Cloud Tasks gerencia a fila de processamento assincrono dos fornecedores.

7.1 Criar a fila

Linux / Mac / Git Bash:

gcloud tasks queues create fornecedor-processing-queue \ --location=southamerica-east1 \ --max-dispatches-per-second=10 \ --max-concurrent-dispatches=100 \ --max-attempts=5 \ --min-backoff=10s \ --max-backoff=300s \ --max-retry-duration=86400s

Windows (CMD/PowerShell):

gcloud tasks queues create fornecedor-processing-queue --location=southamerica-east1 --max-dispatches-per-second=10 --max-concurrent-dispatches=100 --max-attempts=5 --min-backoff=10s --max-backoff=300s --max-retry-duration=86400s

7.2 Criar topico Pub/Sub

gcloud pubsub topics create fornecedor-criado

7.3 Criar subscription Pub/Sub

Linux / Mac / Git Bash:

gcloud pubsub subscriptions create fornecedor-criado-sub \ --topic=fornecedor-criado \ --ack-deadline=60 \ --message-retention-duration=7d \ --expiration-period=never

Windows (CMD/PowerShell):

gcloud pubsub subscriptions create fornecedor-criado-sub --topic=fornecedor-criado --ack-deadline=60 --message-retention-duration=7d --expiration-period=never

7.4 Verificar

# Verificar fila gcloud tasks queues describe fornecedor-processing-queue --location=southamerica-east1 # Verificar topico gcloud pubsub topics describe fornecedor-criado # Verificar subscription gcloud pubsub subscriptions describe fornecedor-criado-sub
Checklist da Etapa 7
  • Cloud Tasks queue criada
  • Pub/Sub topic criado
  • Pub/Sub subscription criada

🔐 Etapa 8: Configurar Secret Manager

O Secret Manager armazena senhas e chaves de API de forma segura.

🔴
ATENCAO!
Substitua os valores abaixo pelas chaves reais fornecidas pelo seu gestor. NUNCA commite credenciais no codigo!

8.1 Criar os secrets

Linux / Mac / Git Bash:

# Chave da API Sintegra echo -n "SUA_CHAVE_SINTEGRA_AQUI" | gcloud secrets create sintegra-api-key \ --data-file=- \ --replication-policy="automatic" # Chave da API Serasa echo -n "SUA_CHAVE_SERASA_AQUI" | gcloud secrets create serasa-api-key \ --data-file=- \ --replication-policy="automatic" # Chave do SendGrid (email) echo -n "SG.SUA_CHAVE_SENDGRID_AQUI" | gcloud secrets create sendgrid-api-key \ --data-file=- \ --replication-policy="automatic" # URL do Power Automate echo -n "SUA_URL_POWER_AUTOMATE_AQUI" | gcloud secrets create power-automate-webhook-url \ --data-file=- \ --replication-policy="automatic" # Chave de criptografia para backups (gerar automaticamente) openssl rand -base64 32 | gcloud secrets create backup-encryption-key \ --data-file=- \ --replication-policy="automatic" # Credenciais SAP HANA (solicitar ao time SAP) echo -n "SEU_USUARIO_SAP_HANA" | gcloud secrets create sap-hana-username \ --data-file=- \ --replication-policy="automatic" echo -n "SUA_SENHA_SAP_HANA" | gcloud secrets create sap-hana-password \ --data-file=- \ --replication-policy="automatic"

Windows (PowerShell) - Execute cada comando separadamente:

echo SUA_CHAVE_SINTEGRA_AQUI | gcloud secrets create sintegra-api-key --data-file=- --replication-policy="automatic" echo SUA_CHAVE_SERASA_AQUI | gcloud secrets create serasa-api-key --data-file=- --replication-policy="automatic" echo SG.SUA_CHAVE_SENDGRID_AQUI | gcloud secrets create sendgrid-api-key --data-file=- --replication-policy="automatic" echo SUA_URL_POWER_AUTOMATE_AQUI | gcloud secrets create power-automate-webhook-url --data-file=- --replication-policy="automatic" echo SEU_USUARIO_SAP_HANA | gcloud secrets create sap-hana-username --data-file=- --replication-policy="automatic" echo SUA_SENHA_SAP_HANA | gcloud secrets create sap-hana-password --data-file=- --replication-policy="automatic"
🔐
Como gerar a Backup Encryption Key
A chave de criptografia para backups deve ser uma string aleatoria de pelo menos 32 caracteres.

Linux / Mac / Git Bash:
openssl rand -base64 32
Windows (PowerShell):
$bytes = New-Object byte[] 32; [Security.Cryptography.RandomNumberGenerator]::Fill($bytes); [Convert]::ToBase64String($bytes)
Exemplo de chave gerada: K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=

IMPORTANTE: Guarde essa chave em um lugar seguro! Se perder, nao conseguira descriptografar os backups.
⚠️
Windows - Criar backup-encryption-key
Primeiro gere a chave usando o comando PowerShell acima, depois execute:
echo SUA_CHAVE_GERADA_AQUI | gcloud secrets create backup-encryption-key --data-file=- --replication-policy="automatic"
Substitua SUA_CHAVE_GERADA_AQUI pela chave que voce gerou.

8.2 Conceder acesso aos secrets - Service Account do Projeto

Linux / Mac / Git Bash:

for secret in sintegra-api-key serasa-api-key sendgrid-api-key power-automate-webhook-url backup-encryption-key sap-hana-username sap-hana-password; do gcloud secrets add-iam-policy-binding $secret \ --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor" done

Windows (CMD/PowerShell) - Execute cada linha:

gcloud secrets add-iam-policy-binding sintegra-api-key --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding serasa-api-key --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding sendgrid-api-key --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding power-automate-webhook-url --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding backup-encryption-key --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding sap-hana-username --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding sap-hana-password --member="serviceAccount:tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --role="roles/secretmanager.secretAccessor"

8.2.1 Conceder acesso aos secrets - Default Compute Service Account (IMPORTANTE!)

🚨
OBRIGATORIO para Cloud Functions Gen2!
As Cloud Functions Gen2 rodam usando a Default Compute Service Account do projeto. Sem essa permissao, funcoes que usam secrets (como consultar-sintegra, consultar-serasa e enviar-email) falharao no deploy com erro "Permission denied on secret".

Descobrir o Project Number:

# Descobrir o project number gcloud projects describe tbg-app-robotia-gcnt-cad-forne --format="value(projectNumber)" # Resultado esperado: 435631529497 (ou similar)

Opcao 1: Conceder acesso a TODOS os secrets (Recomendado)

Esta opcao e mais simples e garante que novas funcoes tambem terao acesso:

# Substitua PROJECT_NUMBER pelo numero do seu projeto (ex: 435631529497) gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor" # Exemplo com project number real: gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne \ --member="serviceAccount:435631529497-compute@developer.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor"

Windows (CMD/PowerShell):

gcloud projects add-iam-policy-binding tbg-app-robotia-gcnt-cad-forne --member="serviceAccount:435631529497-compute@developer.gserviceaccount.com" --role="roles/secretmanager.secretAccessor"

Opcao 2: Conceder acesso apenas aos secrets especificos

Use esta opcao se preferir controle mais granular:

Linux / Mac / Git Bash:
# Substitua PROJECT_NUMBER pelo numero do seu projeto PROJECT_NUMBER="435631529497" for secret in sintegra-api-key serasa-api-key sendgrid-api-key power-automate-webhook-url backup-encryption-key sap-hana-username sap-hana-password; do gcloud secrets add-iam-policy-binding $secret \ --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor" done
Windows (CMD/PowerShell) - Execute cada linha:
gcloud secrets add-iam-policy-binding sintegra-api-key --member="serviceAccount:435631529497-compute@developer.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding serasa-api-key --member="serviceAccount:435631529497-compute@developer.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding sendgrid-api-key --member="serviceAccount:435631529497-compute@developer.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding power-automate-webhook-url --member="serviceAccount:435631529497-compute@developer.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding backup-encryption-key --member="serviceAccount:435631529497-compute@developer.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding sap-hana-username --member="serviceAccount:435631529497-compute@developer.gserviceaccount.com" --role="roles/secretmanager.secretAccessor" gcloud secrets add-iam-policy-binding sap-hana-password --member="serviceAccount:435631529497-compute@developer.gserviceaccount.com" --role="roles/secretmanager.secretAccessor"
💡
Dica: Como identificar qual Service Account usar?
Se o deploy falhar com erro de permissao, o erro mostrara qual service account precisa de acesso. Exemplo: Permission denied... for Revision service account 435631529497-compute@developer.gserviceaccount.com

8.3 Verificar

gcloud secrets list

8.4 Resumo dos Secrets

Secret Descricao Onde Obter
sintegra-api-key Chave da API Sintegra Solicitar ao gestor
serasa-api-key Chave da API Serasa Solicitar ao gestor
sendgrid-api-key Chave do SendGrid (email) Solicitar ao gestor
power-automate-webhook-url URL do webhook Power Automate Time SAP/RPA
backup-encryption-key Chave de criptografia Gerada automaticamente
sap-hana-username Usuario SAP HANA Time SAP Basis
sap-hana-password Senha SAP HANA Time SAP Basis
Checklist da Etapa 8
  • 7 secrets criados
  • Permissoes de acesso configuradas

📥 Etapa 9: Clonar o Repositorio

9.0 Instalar o Git (se ainda nao tiver)

ℹ️
Verificar se o Git ja esta instalado
Execute git --version no terminal. Se aparecer a versao, pule para a etapa 9.1.

Windows - Instalar Git:

1

Opcao A: Download direto (Recomendado)

  1. Acesse: https://git-scm.com/download/win
  2. O download iniciara automaticamente
  3. Execute o instalador e clique Next em todas as telas
  4. Reinicie o terminal (CMD ou PowerShell) apos instalar
2

Opcao B: Via winget (Windows 10/11)

winget install Git.Git

Linux (Ubuntu/Debian) - Instalar Git:

sudo apt update && sudo apt install git -y

Linux (Fedora/RHEL) - Instalar Git:

sudo dnf install git -y

Mac - Instalar Git:

# Via Homebrew brew install git # Ou via Xcode Command Line Tools xcode-select --install
💡
Dica Windows
Ao instalar o Git no Windows, ele inclui o Git Bash, um terminal Linux no Windows. Com ele, todos os comandos Linux deste guia funcionam diretamente!

9.1 Clonar o projeto

# Clonar o repositorio git clone https://github.com/glauco-oliveira/tbg-fornecedor.git # Entrar na pasta cd tbg-fornecedor

9.2 Configurar variaveis de ambiente

Linux / Mac / Git Bash:

# Copiar template cp .env.example .env.production # Editar o arquivo (use seu editor preferido) nano .env.production

Windows (CMD):

REM Copiar template copy .env.example .env.production REM Editar o arquivo (abre no Bloco de Notas) notepad .env.production

Windows (PowerShell):

# Copiar template Copy-Item .env.example .env.production # Editar o arquivo (abre no Bloco de Notas) notepad .env.production

9.3 Preencher variaveis principais

No arquivo .env.production, preencha as variaveis abaixo:

ℹ️
Sobre as API Keys
As chaves sensiveis (API keys, senhas) NAO devem ficar no .env em producao. Elas ja foram configuradas no Secret Manager na Etapa 8. O .env contem apenas URLs e configuracoes nao-sensiveis.
################################################################################ # GCP Configuration (OBRIGATORIO) ################################################################################ GCP_PROJECT=tbg-app-robotia-gcnt-cad-forne PROJECT_ID=tbg-app-robotia-gcnt-cad-forne GCLOUD_PROJECT=tbg-app-robotia-gcnt-cad-forne GCP_REGION=southamerica-east1 REGION=southamerica-east1 GCP_ZONE=southamerica-east1-a ENVIRONMENT=production NODE_ENV=production ################################################################################ # Firestore Database (OBRIGATORIO) ################################################################################ FIRESTORE_COLLECTION=fornecedores DATABASE_TIMEOUT=30000 ################################################################################ # Cloud Storage Buckets (OBRIGATORIO) ################################################################################ STORAGE_BUCKET=tbg-app-robotia-gcnt-cad-forne-uploads BUCKET_UPLOADS=tbg-app-robotia-gcnt-cad-forne-uploads BUCKET_PROCESSED=tbg-app-robotia-gcnt-cad-forne-processed BUCKET_RPA_LOGS=tbg-app-robotia-gcnt-cad-forne-rpa-logs BUCKET_BACKUPS=tbg-app-robotia-gcnt-cad-forne-backups STORAGE_TIMEOUT=60000 ################################################################################ # Cloud Tasks Queue (OBRIGATORIO) ################################################################################ CLOUD_TASKS_QUEUE=fornecedor-processing-queue CLOUD_TASKS_LOCATION=southamerica-east1 WORKER_PROCESSAMENTO_URL=https://southamerica-east1-tbg-app-robotia-gcnt-cad-forne.cloudfunctions.net/worker-processamento ################################################################################ # APIs URLs (OBRIGATORIO - as chaves estao no Secret Manager) ################################################################################ SINTEGRA_API_URL=https://api.sintegra.com/v1 SINTEGRA_TIMEOUT=30000 SINTEGRA_RETRY_ATTEMPTS=3 SERASA_API_URL=https://api.serasa.com.br/credito SERASA_TIMEOUT=45000 SERASA_RETRY_ATTEMPTS=3 POWER_AUTOMATE_TIMEOUT=60000 POWER_AUTOMATE_RETRY_ATTEMPTS=2 POWER_AUTOMATE_RETRY_DELAY=5000 ################################################################################ # Email Configuration (OBRIGATORIO) ################################################################################ SENDGRID_FROM_EMAIL=noreply@tbg.com.br FROM_EMAIL=noreply@tbg.com.br SENDGRID_ALERT_EMAIL=alerts@tbg.com.br ALERT_EMAIL=alerts@tbg.com.br EMAIL_ENABLE_NOTIFICATIONS=true ENABLE_EMAIL_NOTIFICATIONS=true ################################################################################ # Processing Configuration ################################################################################ MAX_RETRIES=3 RETRY_MAX_ATTEMPTS=5 PROCESSING_BATCH_SIZE=100 PROCESSING_TIMEOUT=540000 MAX_CNPJ_PER_UPLOAD=1000 PARALLEL_TASKS=10 ################################################################################ # Logging & Debug ################################################################################ LOG_LEVEL=info DEBUG=false ENABLE_CLOUD_LOGGING=true ENABLE_ERROR_REPORTING=true ################################################################################ # Feature Flags ################################################################################ ENABLE_CIRCUIT_BREAKER=true ENABLE_RATE_LIMITING=true ENABLE_ANALYTICS=true ENABLE_REALTIME_SYNC=true ENABLE_RPA_SIMULATION=false ################################################################################ # SAP HANA (apenas se usar integracao direta com SAP) ################################################################################ SAP_HANA_BASE_URL=https://sap-server.company.com:8000 SAP_HANA_CLIENT=800 SAP_HANA_SYSTEM_ID=PRD SAP_HANA_TIMEOUT=60000 SAP_HANA_RETRY_ATTEMPTS=3
⚠️
Variaveis que NAO devem estar no .env
As seguintes variaveis estao no Secret Manager (configuradas na Etapa 8):
  • SINTEGRA_API_KEY - Chave API Sintegra
  • SERASA_API_KEY - Chave API Serasa
  • SENDGRID_API_KEY - Chave API SendGrid
  • POWER_AUTOMATE_WEBHOOK_URL - URL do webhook
  • BACKUP_ENCRYPTION_KEY - Chave de criptografia
  • SAP_HANA_USERNAME / SAP_HANA_PASSWORD - Credenciais SAP

9.4 Validar configuracao

Use o script de validacao para verificar se todas as variaveis estao corretas:

Linux / Mac:

# Dar permissao ao script chmod +x scripts/validate-env.sh # Validar configuracao de producao ./scripts/validate-env.sh production

Windows (Git Bash):

# No Git Bash nao precisa do chmod ./scripts/validate-env.sh production

Windows (CMD ou PowerShell) - RECOMENDADO:

REM Usar o script nativo Windows (evita problemas de line endings) scripts\validate-env.cmd production
Recomendado para Windows
O projeto inclui scripts .cmd nativos para Windows que evitam problemas de line endings (CRLF vs LF) que ocorrem ao executar scripts bash no Windows.

Windows (Git Bash) - Alternativa:

# Se preferir usar o script bash, execute no Git Bash ./scripts/validate-env.sh production
⚠️
Problemas com scripts .sh no Windows?
Se receber erro $'\r': command not found, use o script .cmd ou veja a secao de Troubleshooting para corrigir os line endings.
💡
Scripts Uteis
O projeto inclui varios scripts de automacao na pasta scripts/:
  • validate-env.sh / validate-env.cmd - Valida variaveis de ambiente
  • deploy-all-functions.sh - Deploy de todas as functions
  • setup-monitoring.sh - Configura alertas automaticamente
  • setup-sap-integration.sh - Configura integracao SAP

Windows: Use os arquivos .cmd quando disponiveis.

Checklist da Etapa 9
  • Repositorio clonado
  • Arquivo .env.production configurado
  • Validacao passou sem erros

⚡ Etapa 10: Deploy das Cloud Functions

⚠️
IMPORTANTE: Requisitos para deploy
O deploy das Cloud Functions requer passos especiais porque a biblioteca @tbg/shared usa referencia local (file:../../shared) que nao funciona no Cloud Build. Os scripts automatizam todo o processo necessario.

10.1 Compilar a biblioteca compartilhada

cd shared npm install npm run build cd ..

10.2 Executar o deploy

Opcao A: Windows (CMD/PowerShell) - RECOMENDADO:

REM Deploy de todas as funcoes (via Git Bash) "C:\Program Files\Git\bin\bash.exe" scripts/deploy-all-functions.sh production
ℹ️
Requisito: Git for Windows deve estar instalado em C:\Program Files\Git

Opcao B: Linux / Mac:

# Dar permissao ao script chmod +x scripts/deploy-all-functions.sh # Executar deploy ./scripts/deploy-all-functions.sh production

Opcao C: Windows (Git Bash diretamente):

Abra o Git Bash (clique direito na pasta > "Git Bash Here") e execute:

./scripts/deploy-all-functions.sh production
⚠️
Erro de line endings?
Se receber erro $'\r': command not found, execute primeiro:
"C:\Program Files\Git\bin\bash.exe" -c "sed -i 's/\r$//' scripts/deploy-all-functions.sh"

10.2.1 Deploy Manual de Uma Funcao (Alternativa)

Se os scripts automaticos falharem, siga estes passos manualmente para cada funcao:

ℹ️
Por que tantos passos?
O Cloud Build nao consegue resolver dependencias locais como file:../../shared. Por isso precisamos copiar a biblioteca shared para dentro de cada funcao antes do deploy.
REM ======================================== REM PASSO 1: Copiar shared library para a funcao REM ======================================== mkdir functions\worker-processamento\shared-lib mkdir functions\worker-processamento\shared-lib\dist xcopy /s /e shared\dist functions\worker-processamento\shared-lib\dist\ REM Criar package.json minimo echo {"name":"@tbg/shared","version":"2.0.0","main":"dist/index.js"} > functions\worker-processamento\shared-lib\package.json REM ======================================== REM PASSO 2: Atualizar package.json da funcao REM ======================================== REM Abra functions\worker-processamento\package.json REM Mude: "@tbg/shared": "file:../../shared" REM Para: "@tbg/shared": "file:./shared-lib" REM ======================================== REM PASSO 3: Instalar e compilar REM ======================================== cd functions\worker-processamento npm install npm run build cd ..\.. REM ======================================== REM PASSO 4: Deploy com variaveis de ambiente REM ======================================== gcloud functions deploy worker-processamento ^ --v2 ^ --runtime=nodejs20 ^ --region=southamerica-east1 ^ --entry-point=workerProcessamento ^ --trigger-http ^ --allow-unauthenticated ^ --timeout=540s ^ --memory=512MB ^ --source=functions\worker-processamento ^ --set-env-vars="GCP_PROJECT=tbg-app-robotia-gcnt-cad-forne,PROJECT_ID=tbg-app-robotia-gcnt-cad-forne,GCP_REGION=southamerica-east1,ENVIRONMENT=production,FIRESTORE_COLLECTION=fornecedores,STORAGE_BUCKET=tbg-app-robotia-gcnt-cad-forne-uploads,BUCKET_UPLOADS=tbg-app-robotia-gcnt-cad-forne-uploads,BUCKET_PROCESSED=tbg-app-robotia-gcnt-cad-forne-processed,BUCKET_BACKUPS=tbg-app-robotia-gcnt-cad-forne-backups,CLOUD_TASKS_QUEUE=fornecedor-processing-queue,CLOUD_TASKS_LOCATION=southamerica-east1,WORKER_PROCESSAMENTO_URL=https://southamerica-east1-tbg-app-robotia-gcnt-cad-forne.cloudfunctions.net/worker-processamento" REM ======================================== REM PASSO 5: Restaurar package.json original REM ======================================== REM Volte a referencia para file:../../shared REM Apague a pasta shared-lib
Este processo demora 20-40 minutos
O script vai compilar e fazer deploy de todas as 15 Cloud Functions automaticamente.

10.3 Funcoes que serao deployadas (15 total)

Funcao Trigger Descricao
worker-processamento HTTP (Cloud Tasks) Orquestrador principal
receber-documento Pub/Sub Recebe eventos do BigQuery
processar-planilha HTTP Processa uploads Excel/CSV
consultar-sintegra HTTP Consulta API Sintegra
consultar-serasa HTTP Consulta API Serasa
enviar-power-automate HTTP Envia para Power Automate
enviar-sap-hana HTTP Envia dados para SAP HANA
receber-callback HTTP Recebe callback do SAP
reprocessamento HTTP (Cloud Scheduler) Reprocessa erros diariamente
enviar-email HTTP Envia notificacoes por email
bulk-operations HTTP Operacoes em lote
backup-secrets HTTP Backup do Secret Manager
backup-firestore HTTP Backup do banco Firestore
restore-firestore HTTP Restaura backup do Firestore
setup-sap-config HTTP Configuracao do SAP

10.4 Verificar deploy

# Listar todas as Cloud Functions Gen2 gcloud functions list --regions=southamerica-east1 # Ou para ver apenas funcoes v2 (Gen2) gcloud functions list --v2 --regions=southamerica-east1
Checklist da Etapa 10
  • Shared library compilada
  • Todas as Cloud Functions deployadas

🌐 Etapa 11: Deploy do Frontend

11.1 Configurar Firebase

cd frontend # Login no Firebase firebase login # Inicializar projeto firebase init
💡
Perguntas do Firebase CLI
Durante o firebase login, o CLI fara algumas perguntas opcionais:
  • "Enable Gemini in Firebase features?" → Digite n (opcional, nao necessario)
  • "Allow Firebase to collect CLI usage and error reporting?" → Digite n (opcional)
Depois, o navegador abrira para voce fazer login com sua conta Google.

Passo a passo do firebase init:

Pergunta Resposta
"Are you ready to proceed?" Digite Y
"Which Firebase features do you want to set up?" Use ↑↓ para navegar e Espaco para selecionar:
◉ Firestore
◉ Hosting (static web apps)
◉ Storage
Depois pressione Enter
"Please select an option" (projeto) Selecione Use an existing projecttbg-app-robotia-gcnt-cad-forne
"What file for Firestore Rules?" Pressione Enter (aceitar padrao: firestore.rules)
"What file for Firestore indexes?" Pressione Enter (aceitar padrao: firestore.indexes.json)
"What do you want as public directory?" IMPORTANTE: Digite . (apenas um ponto) e pressione Enter.
NAO digite "public"! Os arquivos HTML/JS/CSS estao na raiz do diretorio frontend.
"Configure as single-page app?" Digite y
"Set up automatic builds with GitHub?" Digite n
"Overwrite index.html?" Digite n (NAO sobrescrever!)
"What file for Storage Rules?" Pressione Enter (aceitar padrao: storage.rules)
⚠️
IMPORTANTE!
Quando perguntar "Overwrite index.html?", responda n (Nao)! Sobrescrever vai apagar o frontend da aplicacao.
💡
Errou o diretorio publico?
Se voce digitou "public" ao inves de "." (ponto), nao se preocupe! Basta seguir estes passos:
  1. Pressione Ctrl+C para cancelar o firebase init
  2. Restaure o firebase.json original:
    git checkout frontend/firebase.json
  3. Delete a pasta "public" se foi criada:
    rmdir /s /q public
    (No Linux/Mac use: rm -rf public)
  4. Certifique-se de estar no diretorio frontend:
    cd frontend
  5. Execute o deploy:
    firebase deploy --only hosting
🚨
Erro: "could not find sites for project" ou "HTTP Error: 404"
Se aparecer este erro durante o firebase init ou firebase hosting:sites:create, o projeto GCP pode nao estar vinculado ao Firebase ou a API nao esta habilitada.

Passo 1 - Habilitar API do Firebase Hosting:
gcloud services enable firebasehosting.googleapis.com --project=tbg-app-robotia-gcnt-cad-forne
Passo 2 - Criar o site de hosting:
firebase hosting:sites:create tbg-app-robotia-gcnt-cad-forne
Se ainda der erro 404, vincule o projeto GCP ao Firebase:

Opcao A - Via CLI (Recomendado):

firebase projects:addfirebase tbg-app-robotia-gcnt-cad-forne

Opcao B - Via Console:

  1. Acesse console.firebase.google.com
  2. Clique em "Adicionar projeto" (ou "Add project")
  3. Procure pelo projeto tbg-app-robotia-gcnt-cad-forne na lista
  4. ATENCAO: Verifique se o ID do projeto e exatamente tbg-app-robotia-gcnt-cad-forne
  5. Aceite os termos e clique em "Continuar"
  6. Google Analytics: pode selecionar "Nao habilitar" e continuar
  7. Aguarde a configuracao finalizar
⚠️ CUIDADO! Ao adicionar projeto via Console, verifique se o ID do projeto (nao o nome) e exatamente tbg-app-robotia-gcnt-cad-forne. Se o ID for diferente, voce criou um projeto novo ao inves de vincular o existente!
Passo 3 - Apos vincular, criar o site:
firebase hosting:sites:create tbg-app-robotia-gcnt-cad-forne
Passo 4 - Executar firebase init novamente:
firebase init

11.2 Configurar credenciais do Firebase

O projeto usa variáveis de ambiente para configurar as credenciais do Firebase. O arquivo js/firebase-config.js lê as configurações de js/config.js, que é gerado a partir do arquivo .env.

Passo 1 - Copiar o arquivo de exemplo:

Na pasta frontend, copie o arquivo .env.example para .env:

Windows (PowerShell):

cd frontend copy .env.example .env

Linux / Mac / Git Bash:

cd frontend cp .env.example .env

Passo 2 - Obter credenciais do Firebase:

Siga estes passos para obter as credenciais do seu app Firebase:

Etapa Ação
1 Acesse https://console.firebase.google.com
2 Clique no projeto tbg-app-robotia-gcnt-cad-forne
3 Clique no ícone de engrenagem ⚙️ (ao lado de "Visão geral do projeto")
4 Selecione "Configurações do projeto"
5 Role para baixo até a seção "Seus apps"
6 Se não houver app Web, clique no ícone </> para adicionar um app Web
7 No campo "Apelido do app", digite: TBG Fornecedores Web
8 Marque a opção "Configure também o Firebase Hosting para este app"
9 No dropdown que aparecer, selecione: tbg-app-robotia-gcnt-cad-forne
10 Clique em "Registrar app"
11 Na tela "Adicionar o SDK do Firebase", copie os valores do firebaseConfig
12 Clique em "Continuar no console"
⚠️
Telas do assistente Firebase (apenas clique em "Continuar"):

Apos registrar o app, o Firebase mostrara varias telas. Nao precisa fazer nada nelas, apenas clique em "Proximo" ou "Continuar":

  • "Adicionar o SDK do Firebase" - Escolha "Usar a tag script", ignore o codigo e clique em "Continuar no console"
  • "Instalar a CLI do Firebase" - Voce ja tem instalado, clique em "Proximo"
  • "Implantar no Firebase Hosting" - Ja configuramos isso, clique em "Continuar no console"
App criado com sucesso!

Apos concluir o assistente, voce vera a pagina do app com:

  • Apelido: TBG Fornecedores Web
  • ID do aplicativo: 1:XXXXXX:web:XXXXXX
  • Site do Firebase Hosting vinculado: tbg-app-robotia-gcnt-cad-forne
💡
Sobre o Firebase Hosting: Marcar essa opção associa o app Web ao Firebase Hosting. É opcional, gratuito e recomendado pois facilita ver métricas do site no console.
💡
Dica: Se o app Web já existir, clique nele para ver a configuração. Os valores serão exibidos na seção "Configuração do SDK".
Valores a copiar do firebaseConfig:

Na tela do SDK, você verá um código similar a este. Copie apenas os 3 valores destacados:

const firebaseConfig = { apiKey: "AIzaSyXXXXX...", // ← COPIE ESTE (VITE_FIREBASE_API_KEY) authDomain: "...", // já configurado projectId: "...", // já configurado storageBucket: "...", // já configurado messagingSenderId: "123456789012", // ← COPIE ESTE (VITE_FIREBASE_MESSAGING_SENDER_ID) appId: "1:123456789012:web:abc..." // ← COPIE ESTE (VITE_FIREBASE_APP_ID) };

Passo 3 - Editar o arquivo .env:

Abra o arquivo frontend/.env no editor de sua preferencia (Notepad, VS Code, etc.).

O arquivo ja vem pre-configurado. Voce precisa preencher apenas as variaveis marcadas como OBRIGATORIO.

3.1 Variaveis OBRIGATORIAS do Firebase Console:
Variavel Onde Encontrar Exemplo
VITE_FIREBASE_API_KEY Firebase Console > Configuracoes > Seus apps > Web > apiKey AIzaSyB1234567890abcdefghijk
VITE_FIREBASE_MESSAGING_SENDER_ID Firebase Console > Configuracoes > Seus apps > Web > messagingSenderId 123456789012
VITE_FIREBASE_APP_ID Firebase Console > Configuracoes > Seus apps > Web > appId 1:123456789012:web:abc123def456
3.2 Variavel OBRIGATORIA do GCP Console:
Variavel Onde Encontrar Exemplo
VITE_GCP_PROJECT_NUMBER GCP Console > Dashboard > Card "Informacoes do projeto" > Numero do projeto 123456789012
# Ou via linha de comando: gcloud projects describe tbg-app-robotia-gcnt-cad-forne --format="value(projectNumber)"
3.3 Variaveis JA PREENCHIDAS (nao precisa alterar):

As seguintes variaveis ja estao configuradas corretamente no arquivo .env:

# Firebase (auto-configurados baseado no project ID) VITE_FIREBASE_AUTH_DOMAIN=tbg-app-robotia-gcnt-cad-forne.firebaseapp.com VITE_FIREBASE_PROJECT_ID=tbg-app-robotia-gcnt-cad-forne VITE_FIREBASE_STORAGE_BUCKET=tbg-app-robotia-gcnt-cad-forne.appspot.com VITE_FIREBASE_DATABASE_NAME=(default) # GCP VITE_GCP_PROJECT_ID=tbg-app-robotia-gcnt-cad-forne VITE_GCP_REGION=southamerica-east1 VITE_GCP_ZONE=southamerica-east1-a # Buckets (criados na Etapa 6) VITE_BUCKET_UPLOADS=tbg-app-robotia-gcnt-cad-forne-uploads VITE_BUCKET_PROCESSED=tbg-app-robotia-gcnt-cad-forne-processed VITE_BUCKET_RPA_LOGS=tbg-app-robotia-gcnt-cad-forne-rpa-logs VITE_BUCKET_BACKUPS=tbg-app-robotia-gcnt-cad-forne-backups # Cloud Functions URL VITE_CLOUD_FUNCTIONS_BASE_URL=https://southamerica-east1-tbg-app-robotia-gcnt-cad-forne.cloudfunctions.net
3.4 Variaveis OPCIONAIS (configure se tiver):
Variavel Servico Como Obter
VITE_SINTEGRA_API_KEY SintegraWS Contrate em sintegraws.com.br > Painel > API Key
VITE_SERASA_API_KEY Serasa Experian Contrate em serasaexperian.com.br > Portal do desenvolvedor
VITE_POWER_AUTOMATE_WEBHOOK_URL Microsoft Power Automate Crie um Flow com trigger HTTP > Copie a URL do POST
VITE_ALERT_EMAIL E-mail para alertas Seu e-mail de operacoes (ex: ops@suaempresa.com.br)
VITE_SLACK_WEBHOOK_URL Slack api.slack.com/messaging/webhooks
VITE_GA_TRACKING_ID Google Analytics analytics.google.com > Admin > Data Streams > Measurement ID
VITE_SENTRY_DSN Sentry (monitoramento) sentry.io > Project Settings > Client Keys (DSN)
VITE_LOOKER_DASHBOARD_URL Looker Studio URL do seu dashboard no Looker Studio
💡
Dica: As variaveis opcionais podem ser deixadas em branco. O sistema funcionara normalmente, apenas sem essas integracoes.
⚠️
IMPORTANTE: As 4 variaveis obrigatorias (API_KEY, MESSAGING_SENDER_ID, APP_ID e PROJECT_NUMBER) sao essenciais para o funcionamento do sistema. Sem elas, o Firebase nao sera inicializado corretamente.

Passo 4 - Gerar o arquivo config.js:

Execute o script para gerar o arquivo js/config.js a partir do .env:

cd frontend npm run build:config

Este comando irá:

  • Ler as variáveis do arquivo .env
  • Gerar o arquivo js/config.js com as configurações
  • O arquivo js/firebase-config.js usará automaticamente essas configurações
💡
Verificação: Após executar o comando, verifique se o arquivo js/config.js foi criado e contém suas configurações.

Passo 5 - Testar localmente (opcional):

Antes de fazer o deploy, você pode testar localmente:

cd frontend firebase serve --only hosting

Acesse http://localhost:5000 no navegador e verifique o console do desenvolvedor (F12) para ver se o Firebase foi inicializado corretamente.

Passo 6 - Criar arquivo .firebaseignore (IMPORTANTE!):

O arquivo .gitignore ignora o config.js para não commitar credenciais no Git. Porém, o Firebase Hosting usa o .gitignore como referência, o que faz com que o config.js não seja enviado no deploy.

Crie o arquivo .firebaseignore na pasta frontend:

# Firebase Hosting Ignore # Este arquivo define o que NAO enviar no deploy # Diferente do .gitignore, NAO ignoramos o config.js aqui firebase.json **/.* **/node_modules/** .env .env.* *.log package*.json build-config.js SETUP.md
⚠️
Por que isso e necessario?
  • O .gitignore ignora js/config.js (correto, para nao commitar credenciais)
  • O Firebase usa .gitignore por padrao se nao existir .firebaseignore
  • Sem o .firebaseignore, o config.js nao e enviado no deploy
  • O .firebaseignore substitui o .gitignore para o Firebase Hosting
💡
Verificacao: Apos criar o arquivo, o deploy deve mostrar 27 arquivos em vez de 26 (o config.js agora esta incluido).

11.3 Deploy

# Deploy do frontend (hosting) firebase deploy --only hosting # Deploy das regras de seguranca do Firestore firebase deploy --only firestore:rules # Deploy dos indices do Firestore (IMPORTANTE para performance!) firebase deploy --only firestore:indexes # Deploy das regras do Cloud Storage (ver configuracao abaixo primeiro!) firebase deploy --only storage
⚠️
Indices do Firestore
O projeto usa 4 indices compostos para otimizar queries. O deploy dos indices pode demorar 5-10 minutos. Sem eles, algumas queries vao falhar com erro "requires an index".

Configurar Firebase Storage (obrigatorio antes do deploy de storage rules)

Se ao executar firebase deploy --only storage aparecer o erro:

Error: Firebase Storage has not been set up on project...

Siga estes passos para configurar o Firebase Storage:

Etapa Acao
1 Acesse Firebase Console > Storage
2 Clique em "Get Started" ou "Comecar"
3 Selecione "Start in production mode" (Modo de producao)
4 Clique em "Next"
5 Selecione a localizacao: "southamerica-east1" (Sao Paulo)
6 Clique em "Done"
7 Execute novamente: firebase deploy --only storage
8 Quando perguntar "Grant the new role? (Y/n)", digite Y e pressione Enter
💡
Sobre a permissao IAM: O Firebase Storage precisa de uma role IAM para usar regras de seguranca integradas com autenticacao. Isso permite verificar se o usuario esta logado ao fazer upload/download de arquivos.
💡
Nota: O Firebase Storage e diferente dos Cloud Storage Buckets criados na Etapa 6. O Firebase Storage e usado para uploads via SDK do Firebase no frontend, enquanto os buckets GCP sao usados pelas Cloud Functions.

11.4 Indices do Firestore

O arquivo firestore.indexes.json define os seguintes indices:

Colecao Campos Uso
fornecedores status + criado_em Listar por status ordenado por data
fornecedores status + tentativas Identificar fornecedores com erros
fornecedores sap_atualizado + atualizado_em Listar pendentes de SAP
fornecedores origem + criado_em Filtrar por origem da importacao

11.5 Acessar o site

Apos o deploy, seu site estara disponivel em:

  • https://tbg-app-robotia-gcnt-cad-forne.web.app
  • https://tbg-app-robotia-gcnt-cad-forne.firebaseapp.com
Checklist da Etapa 11
  • Firebase CLI instalado e logado
  • firebase init executado com sucesso
  • .firebaserc com project ID correto
  • Arquivo .env criado a partir do .env.example
  • Credenciais Firebase obtidas do Console
  • npm run build:config executado
  • js/config.js gerado com sucesso
  • Frontend deployado (firebase deploy --only hosting)
  • Firestore rules e indexes deployados
  • Storage rules deployadas
  • Site acessivel em https://tbg-app-robotia-gcnt-cad-forne.web.app

🧪 Etapa 12: Testes e Validacao

12.1 Smoke Tests

# Verificar Firestore gcloud firestore databases list # Verificar Buckets gsutil ls -p tbg-app-robotia-gcnt-cad-forne # Verificar Cloud Tasks gcloud tasks queues list --location=southamerica-east1 # Verificar Secrets gcloud secrets list # Verificar Cloud Functions gcloud functions list --regions=southamerica-east1

12.2 Testar uma Cloud Function

Linux / Mac / Git Bash:

# Obter URL do worker WORKER_URL=$(gcloud functions describe worker-processamento \ --region=southamerica-east1 --v2 \ --format="value(serviceConfig.uri)") echo "URL: $WORKER_URL" # Testar (necessario token de autenticacao) TOKEN=$(gcloud auth print-identity-token) curl -X POST "$WORKER_URL/health" \ -H "Authorization: Bearer $TOKEN"

Windows (PowerShell):

# Obter URL do worker $WORKER_URL = gcloud functions describe worker-processamento --region=southamerica-east1 --v2 --format="value(serviceConfig.uri)" Write-Host "URL: $WORKER_URL" # Testar (necessario token de autenticacao) $TOKEN = gcloud auth print-identity-token Invoke-RestMethod -Method POST -Uri "$WORKER_URL/health" -Headers @{"Authorization"="Bearer $TOKEN"}

Windows (CMD) - Execute cada linha separadamente:

REM Obter URL do worker (copie a saida) gcloud functions describe worker-processamento --region=southamerica-east1 --v2 --format="value(serviceConfig.uri)" REM Obter token (copie a saida) gcloud auth print-identity-token REM Testar (substitua WORKER_URL e TOKEN pelos valores copiados) curl -X POST "WORKER_URL/health" -H "Authorization: Bearer TOKEN"

12.3 Testar o Frontend

  1. Acesse https://tbg-app-robotia-gcnt-cad-forne.web.app
  2. Faca login com sua conta Google
  3. Faca upload de uma planilha de teste
  4. Verifique se o processamento inicia

12.4 Verificar logs

Linux / Mac / Git Bash:

# Ver logs de uma funcao gcloud functions logs read worker-processamento \ --region=southamerica-east1 \ --limit=50

Windows (CMD/PowerShell):

gcloud functions logs read worker-processamento --region=southamerica-east1 --limit=50

12.5 Configurar Cloud Scheduler

Linux / Mac / Git Bash:

# Obter URL da funcao de reprocessamento REPROC_URL=$(gcloud functions describe reprocessamento \ --region=southamerica-east1 --v2 \ --format="value(serviceConfig.uri)") # Criar job de reprocessamento diario (2h da manha) gcloud scheduler jobs create http reprocessamento-diario \ --location=southamerica-east1 \ --schedule="0 2 * * *" \ --uri="$REPROC_URL" \ --http-method=POST \ --oidc-service-account-email="tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" \ --time-zone="America/Sao_Paulo"

Windows (PowerShell):

# Obter URL da funcao de reprocessamento $REPROC_URL = gcloud functions describe reprocessamento --region=southamerica-east1 --v2 --format="value(serviceConfig.uri)" # Criar job de reprocessamento diario (2h da manha) gcloud scheduler jobs create http reprocessamento-diario --location=southamerica-east1 --schedule="0 2 * * *" --uri="$REPROC_URL" --http-method=POST --oidc-service-account-email="tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --time-zone="America/Sao_Paulo"

Windows (CMD) - Duas etapas:

REM 1. Primeiro obtenha a URL (copie a saida) gcloud functions describe reprocessamento --region=southamerica-east1 --v2 --format="value(serviceConfig.uri)" REM 2. Substitua URL_COPIADA pelo valor copiado acima gcloud scheduler jobs create http reprocessamento-diario --location=southamerica-east1 --schedule="0 2 * * *" --uri="URL_COPIADA" --http-method=POST --oidc-service-account-email="tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com" --time-zone="America/Sao_Paulo"
🎉
PARABENS!
Se todos os testes passaram, seu sistema esta configurado e pronto para uso em producao!
Checklist Final
  • Smoke tests passaram
  • Frontend acessivel e funcional
  • Cloud Scheduler configurado

🏢 Configuracao SAP (Opcional)

ℹ️
Quando configurar?
Esta etapa so e necessaria se voce vai integrar com SAP HANA e/ou SAP ECC via Power Automate. Pule se estiver apenas testando o sistema.

Modos de Integracao SAP

Modo Descricao Quando Usar
ECC_ONLY Apenas SAP ECC via Power Automate Sistemas legados
HANA_ONLY Apenas SAP HANA via API Sistemas modernos S/4HANA
BOTH Ambos SAP ECC e HANA Migracao gradual

Configurar via Interface Web

1

Acessar a pagina de configuracao

Acesse: https://tbg-app-robotia-gcnt-cad-forne.web.app/sap-config.html

2

Selecionar modo de integracao

Escolha entre ECC_ONLY, HANA_ONLY ou BOTH

3

Preencher credenciais

Configure URLs e credenciais conforme o modo escolhido

Configurar via API (Alternativa)

Linux / Mac / Git Bash:

# Obter token de autenticacao TOKEN=$(gcloud auth print-identity-token) # Exemplo: Configurar modo BOTH curl -X POST https://southamerica-east1-tbg-app-robotia-gcnt-cad-forne.cloudfunctions.net/setup-sap-config \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "mode": "BOTH", "eccEnabled": true, "hanaEnabled": true, "ecc": { "powerAutomateUrl": "SUA_URL_POWER_AUTOMATE", "timeout": 60000 }, "hana": { "baseUrl": "https://seu-sap-hana.com", "client": "800", "systemId": "PRD", "timeout": 60000 }, "fallbackBehavior": "FAIL", "updatedBy": "setup-inicial" }'

Windows (PowerShell):

# Obter token de autenticacao $TOKEN = gcloud auth print-identity-token # Criar o corpo da requisicao $body = @{ mode = "BOTH" eccEnabled = $true hanaEnabled = $true ecc = @{ powerAutomateUrl = "SUA_URL_POWER_AUTOMATE" timeout = 60000 } hana = @{ baseUrl = "https://seu-sap-hana.com" client = "800" systemId = "PRD" timeout = 60000 } fallbackBehavior = "FAIL" updatedBy = "setup-inicial" } | ConvertTo-Json -Depth 3 # Enviar requisicao Invoke-RestMethod -Method POST -Uri "https://southamerica-east1-tbg-app-robotia-gcnt-cad-forne.cloudfunctions.net/setup-sap-config" -Headers @{"Authorization"="Bearer $TOKEN"; "Content-Type"="application/json"} -Body $body

Testar Integracao SAP

Linux / Mac / Git Bash:

# Verificar configuracao salva gcloud firestore documents get system-config/sap-integration \ --project=tbg-app-robotia-gcnt-cad-forne \ --format=json | jq # Processar fornecedor de teste curl -X POST https://southamerica-east1-tbg-app-robotia-gcnt-cad-forne.cloudfunctions.net/receber-documento \ -H "Content-Type: application/json" \ -d '{ "cnpj": "00000000000191", "razao_social": "Fornecedor Teste LTDA", "origem": "teste-sap" }'

Windows (CMD/PowerShell):

REM Verificar configuracao salva gcloud firestore documents get system-config/sap-integration --project=tbg-app-robotia-gcnt-cad-forne --format=json REM Processar fornecedor de teste curl -X POST https://southamerica-east1-tbg-app-robotia-gcnt-cad-forne.cloudfunctions.net/receber-documento -H "Content-Type: application/json" -d "{\"cnpj\": \"00000000000191\", \"razao_social\": \"Fornecedor Teste LTDA\", \"origem\": \"teste-sap\"}"
⚠️
IMPORTANTE
As credenciais SAP HANA devem estar configuradas no Secret Manager ANTES de testar. Verifique se os secrets sap-hana-username e sap-hana-password existem.

📊 Monitoramento e Alertas

ℹ️
Por que configurar alertas?
Alertas automaticos permitem que voce seja notificado quando algo da errado, antes que os usuarios percebam problemas.

Acessar Cloud Monitoring

Acesse: console.cloud.google.com/monitoring

Alertas Recomendados

Alerta Condicao Severidade
Taxa de Erro Alta Erro > 5% em 5 minutos CRITICO
Latencia Alta P95 > 30 segundos AVISO
Quota Firestore Uso > 80% AVISO
Backup Falhou Qualquer falha ALTO

Criar Alerta de Taxa de Erro

Linux / Mac / Git Bash:

# Criar canal de notificacao por email gcloud alpha monitoring channels create \ --display-name="Email Ops" \ --type=email \ --channel-labels=email_address=ops@suaempresa.com.br # Listar canais para obter o ID gcloud alpha monitoring channels list

Windows (CMD/PowerShell):

REM Criar canal de notificacao por email gcloud alpha monitoring channels create --display-name="Email Ops" --type=email --channel-labels=email_address=ops@suaempresa.com.br REM Listar canais para obter o ID gcloud alpha monitoring channels list

Ver Metricas das Cloud Functions

Linux / Mac / Git Bash:

# Ver erros nas ultimas 24h gcloud logging read \ "resource.type=cloud_function AND severity>=ERROR AND \ timestamp>=\"$(date -u -d '24 hours ago' '+%Y-%m-%dT%H:%M:%SZ')\"" \ --limit=50 \ --project=tbg-app-robotia-gcnt-cad-forne # Contar execucoes por funcao gcloud logging read \ "resource.type=cloud_function" \ --project=tbg-app-robotia-gcnt-cad-forne \ --format="value(resource.labels.function_name)" | \ sort | uniq -c

Windows (CMD) - Metodo simplificado:

REM Ver erros nas ultimas 24h (substitua DATA_24H_ATRAS pelo timestamp em formato ISO) REM Exemplo: 2024-01-15T10:30:00Z gcloud logging read "resource.type=cloud_function AND severity>=ERROR" --limit=50 --project=tbg-app-robotia-gcnt-cad-forne REM Listar todas as execucoes (os dados brutos) gcloud logging read "resource.type=cloud_function" --project=tbg-app-robotia-gcnt-cad-forne --format="value(resource.labels.function_name)" --limit=100

Windows (PowerShell) - Com timestamp dinamico:

# Ver erros nas ultimas 24h $timestamp = (Get-Date).AddHours(-24).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") gcloud logging read "resource.type=cloud_function AND severity>=ERROR AND timestamp>=`"$timestamp`"" --limit=50 --project=tbg-app-robotia-gcnt-cad-forne # Contar execucoes por funcao $logs = gcloud logging read "resource.type=cloud_function" --project=tbg-app-robotia-gcnt-cad-forne --format="value(resource.labels.function_name)" --limit=500 $logs | Group-Object | Select-Object Name, Count | Sort-Object Count -Descending

Dashboard Recomendado

Crie um dashboard no Cloud Monitoring com os seguintes widgets:

  • 📈 Execucoes de Cloud Functions por minuto
  • ❌ Taxa de erro por funcao
  • ⏱️ Latencia P50/P95/P99
  • 📊 Status de fornecedores no Firestore
  • 💾 Tamanho dos buckets
💡
Dica
Apos configurar alertas, faca um teste disparando um erro proposital para verificar se as notificacoes chegam.

💰 Alertas de Orcamento

🔴
MUITO IMPORTANTE!
Configure alertas de orcamento para evitar surpresas na fatura. O GCP pode gerar custos rapidamente se algo der errado.

Criar Alerta de Orcamento

1

Acessar Billing

Acesse: console.cloud.google.com/billing

2

Criar Budget

Clique em "Budgets & alerts" no menu lateral, depois em "CREATE BUDGET"

3

Configurar valores

Nome TBG Fornecedores - Alerta Mensal
Projetos tbg-app-robotia-gcnt-cad-forne
Orcamento R$ 500 (ajustar conforme necessidade)
Alertas em 50%, 80%, 100%

Via gcloud CLI

Linux / Mac / Git Bash:

# Obter ID da conta de billing BILLING_ACCOUNT=$(gcloud billing accounts list --format="value(name)" | head -1) # Criar budget de R$ 500/mes com alertas em 50%, 80% e 100% gcloud billing budgets create \ --billing-account=$BILLING_ACCOUNT \ --display-name="TBG Fornecedores - Alerta Mensal" \ --budget-amount=500BRL \ --threshold-rule=percent=0.5 \ --threshold-rule=percent=0.8 \ --threshold-rule=percent=1.0 \ --filter-projects="projects/tbg-app-robotia-gcnt-cad-forne"

Windows (PowerShell):

# Obter ID da conta de billing $BILLING_ACCOUNT = (gcloud billing accounts list --format="value(name)")[0] # Criar budget de R$ 500/mes com alertas em 50%, 80% e 100% gcloud billing budgets create --billing-account=$BILLING_ACCOUNT --display-name="TBG Fornecedores - Alerta Mensal" --budget-amount=500BRL --threshold-rule=percent=0.5 --threshold-rule=percent=0.8 --threshold-rule=percent=1.0 --filter-projects="projects/tbg-app-robotia-gcnt-cad-forne"

Windows (CMD) - Duas etapas:

REM 1. Primeiro obtenha o ID da conta de billing (copie o valor exibido) gcloud billing accounts list --format="value(name)" REM 2. Substitua BILLING_ACCOUNT_ID pelo valor copiado acima gcloud billing budgets create --billing-account=BILLING_ACCOUNT_ID --display-name="TBG Fornecedores - Alerta Mensal" --budget-amount=500BRL --threshold-rule=percent=0.5 --threshold-rule=percent=0.8 --threshold-rule=percent=1.0 --filter-projects="projects/tbg-app-robotia-gcnt-cad-forne"

Custos Estimados (Referencia)

Servico Custo Estimado/Mes Observacao
Cloud Functions ~R$ 50-150 Depende do volume de processamento
Firestore ~R$ 20-80 Reads/writes/storage
Cloud Storage ~R$ 10-30 Depende do volume de arquivos
Cloud Tasks ~R$ 5-15 Fila de processamento
Firebase Hosting Gratuito Free tier generoso
💡
Free Tier
O GCP oferece $300 de credito para novos usuarios. Alem disso, muitos servicos tem cotas gratuitas mensais (ex: 2 milhoes de invocacoes de Cloud Functions/mes).

🚀 CI/CD com GitHub Actions (Avancado)

ℹ️
Para quem e esta secao?
Esta secao e para configurar deployments automatizados apos o primeiro deploy manual. Se voce esta fazendo o primeiro deploy, pode pular esta secao.

Workflows Disponiveis

Workflow Trigger Descricao
ci.yml Push/PR Testes automatizados e validacao
deploy-staging.yml Manual Deploy para ambiente staging
deploy-production.yml Manual + Aprovacao Deploy para producao
e2e-tests.yml Scheduled/Manual Testes end-to-end

Configurar GitHub Secrets

Para que os workflows funcionem, configure os seguintes secrets no repositorio GitHub:

Va em: Repository Settings → Secrets and variables → Actions

Secret Valor
GCP_PROD_PROJECT_ID tbg-app-robotia-gcnt-cad-forne
GCP_STAGING_PROJECT_ID tbg-app-robotia-gcnt-cad-forne-staging (se existir)
GCP_PROD_SA_KEY JSON da Service Account key (para producao)

Criar Service Account Key para CI/CD

Linux / Mac / Git Bash:

# Criar key para a service account gcloud iam service-accounts keys create ~/sa-key.json \ --iam-account=tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com # Copiar o conteudo para o GitHub Secret cat ~/sa-key.json # IMPORTANTE: Apagar o arquivo depois de copiar! rm ~/sa-key.json

Windows (CMD/PowerShell):

REM Criar key para a service account (salva na pasta do usuario) gcloud iam service-accounts keys create %USERPROFILE%\sa-key.json --iam-account=tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com REM Exibir o conteudo para copiar para o GitHub Secret type %USERPROFILE%\sa-key.json REM IMPORTANTE: Apagar o arquivo depois de copiar! del %USERPROFILE%\sa-key.json

Windows (PowerShell) - Alternativa:

# Criar key para a service account gcloud iam service-accounts keys create $env:USERPROFILE\sa-key.json --iam-account=tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com # Copiar o conteudo para o GitHub Secret Get-Content $env:USERPROFILE\sa-key.json # IMPORTANTE: Apagar o arquivo depois de copiar! Remove-Item $env:USERPROFILE\sa-key.json
⚠️
SEGURANCA!
Nunca commite a Service Account key no repositorio. Ela deve ficar apenas nos GitHub Secrets. Apague o arquivo local imediatamente apos copiar para o GitHub.

Adicionar o JSON ao GitHub Secrets:

Apos executar o comando que exibe o JSON, siga estes passos:

Etapa Acao
1 Copie TODO o conteudo JSON exibido no terminal (de { ate })
2 Acesse seu repositorio no GitHub
3 Clique em Settings (aba superior)
4 No menu lateral, clique em Secrets and variablesActions
5 Clique no botao verde "New repository secret"
6 No campo Name, digite: GCP_PROD_SA_KEY
7 No campo Secret, cole o JSON completo que voce copiou
8 Clique em "Add secret"
9 Repita o processo para adicionar GCP_PROD_PROJECT_ID com valor tbg-app-robotia-gcnt-cad-forne
10 IMPORTANTE: Volte ao terminal e delete o arquivo JSON local!
💡
Exemplo do JSON: O conteudo que voce deve copiar tera este formato:
{
  "type": "service_account",
  "project_id": "tbg-app-robotia-gcnt-cad-forne",
  "private_key_id": "abc123...",
  "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
  "client_email": "tbg-app-robotia-gcnt-cad-forne@tbg-app-robotia-gcnt-cad-forne.iam.gserviceaccount.com",
  "client_id": "123456789",
  ...
}

Configurar GitHub Environment (Obrigatorio)

O workflow de producao requer um Environment configurado para o gate de aprovacao:

1

Acessar Environments

Va em: GitHub → Repository → Settings → Environments

2

Criar Environment

Clique em "New environment"

3

Configurar

  • Name: production
  • Required reviewers: Adicione voce ou outro aprovador (opcional mas recomendado)
  • Wait timer: Tempo de espera antes do deploy (opcional)
4

Salvar

Clique em "Configure environment" para salvar

Criar Tag/Versao para Deploy (OBRIGATORIO)

⚠️
IMPORTANTE: Voce DEVE criar a tag no GitHub ANTES de executar o workflow! Se a tag nao existir, o deploy falhara com erro "The process '/usr/bin/git' failed".

Siga estes passos para criar e enviar a tag:

1

Garantir que o codigo esta atualizado

Primeiro, certifique-se que seu codigo local esta sincronizado com o GitHub:

git pull origin main
2

Criar a tag localmente

Crie a tag com o formato v1.0.0 (sempre com "v" na frente):

git tag v1.0.0
3

Enviar a tag para o GitHub

Envie a tag para o repositorio remoto:

git push origin v1.0.0
4

Verificar se a tag foi criada

Acesse GitHub → Repository → Tags e confirme que a tag aparece na lista.

💡
Convencao de Versionamento:
Use o formato vMAJOR.MINOR.PATCH:
  • v1.0.0 - Primeira versao
  • v1.0.1 - Correcao de bug
  • v1.1.0 - Nova funcionalidade
  • v2.0.0 - Mudanca significativa

Disparar Deploy de Producao

1

Acessar Actions

Va em: GitHub → Repository → Actions

2

Selecionar Workflow

Clique em "Deploy to Production" no menu lateral

3

Iniciar Workflow

Clique em "Run workflow" e preencha:

  • Version/Tag: v1.0.0 (ou a tag que voce criou)
  • Confirmation: Digite exatamente DEPLOY TO PRODUCTION
4

Aprovar (se configurado)

Se voce configurou reviewers, aprove o deploy quando solicitado

5

Acompanhar

Acompanhe o progresso na aba Actions. O workflow ira:

  • Validar a confirmacao
  • Aguardar aprovacao (se configurado)
  • Build e testes
  • Deploy para southamerica-east1
  • Smoke tests
  • Criar GitHub Release
⚠️
Em caso de falha: O workflow exibira instrucoes de rollback. Identifique a ultima versao funcionando e execute o deploy novamente com essa versao.

🔧 Troubleshooting

Erro "Permission denied" ao fazer deploy

Causa: Falta de permissoes na sua conta ou service account.

Solucao:

gcloud auth login gcloud config get-value project
Erro "Billing account not configured"

Causa: O projeto nao tem conta de faturamento vinculada.

Solucao: Acesse console.cloud.google.com/billing e vincule uma conta.

Erro "API not enabled"

Causa: Uma API necessaria nao esta ativada.

Solucao:

gcloud services enable NOME_DA_API.googleapis.com
Cloud Functions nao aparecem apos deploy

Causa: O deploy pode ter falhado silenciosamente.

Solucao:

# Ver logs do Cloud Build gcloud builds list --limit=5 # Ver detalhes de um build gcloud builds describe BUILD_ID
Erro "CORS policy" no frontend

Causa: Configuracao de CORS incorreta no bucket.

Solucao:

gsutil cors set cors.json gs://tbg-app-robotia-gcnt-cad-forne-uploads
Erro "Secret not found"

Causa: O segredo nao foi criado ou a service account nao tem acesso.

Solucao:

# Verificar se o segredo existe gcloud secrets list # Verificar permissoes gcloud secrets get-iam-policy NOME_DO_SEGREDO
Frontend mostra pagina em branco

Causa: Erro no JavaScript ou configuracao do Firebase incorreta.

Solucao:

  1. Abra o Console do navegador (F12)
  2. Veja a aba "Console" para erros
  3. Verifique se as credenciais do Firebase estao corretas em js/firebase-config.js
Erro "$'\r': command not found" ao executar scripts bash no Windows

Causa: Os arquivos de script (.sh) estao com line endings do Windows (CRLF) em vez de Unix (LF). O bash nao reconhece o caractere \r (carriage return).

Sintomas:

scripts/validate-env.sh: line 2: $'\r': command not found scripts/validate-env.sh: line 58: syntax error near unexpected token `$'do\r''
Solucao Recomendada - Usar o script nativo Windows (.cmd):
scripts\validate-env.cmd production

O projeto inclui versoes .cmd dos scripts principais que funcionam nativamente no Windows sem problemas de line endings.

Solucoes Alternativas (se precisar usar o .sh):

Solucao 1 - Converter o arquivo (Git Bash):

# Converter um arquivo especifico sed -i 's/\r$//' scripts/validate-env.sh # Converter todos os scripts .sh find . -name "*.sh" -exec sed -i 's/\r$//' {} \;

Solucao 2 - Usar dos2unix (se disponivel):

# Instalar dos2unix (Git Bash com pacman ou baixar separadamente) dos2unix scripts/validate-env.sh

Solucao 3 - Configurar Git para nao converter line endings:

# Configurar Git globalmente git config --global core.autocrlf input # Ou apenas para este repositorio git config core.autocrlf input # Re-clonar ou fazer checkout dos arquivos git checkout -- scripts/

Solucao 4 - Usar o VS Code:

  1. Abra o arquivo no VS Code
  2. No canto inferior direito, clique em "CRLF"
  3. Selecione "LF"
  4. Salve o arquivo (Ctrl+S)
Nota: O projeto ja inclui um arquivo .gitattributes que forca line endings LF para arquivos .sh. Se voce clonou o repositorio recentemente, os arquivos ja devem estar com o formato correto.

Comandos uteis

# Ver todas as funcoes gcloud functions list --regions=southamerica-east1 # Ver logs de uma funcao gcloud functions logs read NOME_FUNCAO --region=southamerica-east1 --limit=100 # Ver status da fila gcloud tasks queues describe fornecedor-processing-queue --location=southamerica-east1 # Ver segredos gcloud secrets list # Ver buckets gsutil ls -p tbg-app-robotia-gcnt-cad-forne # Forccar execucao de job agendado gcloud scheduler jobs run reprocessamento-diario --location=southamerica-east1

Links uteis

📋 Checklist Final de Validacao

Antes de considerar o setup completo, verifique:

Infraestrutura GCP

  • Projeto criado no GCP
  • Billing configurado com alertas
  • Todas as 15 APIs habilitadas
  • Service Account com 8 roles

Dados e Armazenamento

  • Firestore criado em modo Native
  • 4 buckets criados
  • CORS configurado

Processamento

  • Cloud Tasks queue criada
  • Pub/Sub topic criado
  • Pub/Sub subscription criada
  • 7 secrets criados

Aplicacao

  • Todas as Cloud Functions deployadas
  • Frontend deployado
  • Cloud Scheduler configurado
  • Testes realizados com sucesso

TBG Fornecedores v2.0 | Guia de Setup GCP

Ultima atualizacao: Dezembro 2024

Engenharia TBG - Transportadora Brasileira Gasoduto