Bem-vindo ao Guia de Setup
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
Baixar instalador
Acesse nodejs.org e baixe a versao LTS (20.x)
Executar instalador
Execute o arquivo .msi e siga as instrucoes. Marque a opcao "Automatically install necessary tools"
brew install node@20
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
Baixe o instalador em cloud.google.com/sdk/docs/install
Execute o GoogleCloudSDKInstaller.exe e marque todas as opcoes.
brew install --cask google-cloud-sdk
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
Instalar Firebase CLI
npm install -g firebase-tools
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. |
Como abrir o PowerShell: Pressione
Windows + X e clique em "Windows PowerShell" ou "Terminal".
- 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
Abrir o Console
Acesse console.cloud.google.com e faca login com sua conta Google.
2.2 Criar novo projeto
Clicar em "Novo Projeto"
No topo da pagina, clique no seletor de projetos e depois em "NOVO PROJETO"
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" |
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
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
- 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:
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
Este comando pode demorar 2-5 minutos. Voce vera mensagens de sucesso para cada API.
Verificar APIs habilitadas
gcloud services list --enabled
- 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"
- 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
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) |
- 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
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
}
]
- 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
- 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.
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"
A chave de criptografia para backups deve ser uma string aleatoria de pelo menos 32 caracteres.
Linux / Mac / Git Bash:
openssl rand -base64 32
$bytes = New-Object byte[] 32; [Security.Cryptography.RandomNumberGenerator]::Fill($bytes); [Convert]::ToBase64String($bytes)
K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=
IMPORTANTE: Guarde essa chave em um lugar seguro! Se perder, nao conseguira descriptografar os backups.
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"
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!)
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"
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 |
- 7 secrets criados
- Permissoes de acesso configuradas
📥 Etapa 9: Clonar o Repositorio
9.0 Instalar o Git (se ainda nao tiver)
Execute
git --version no terminal. Se aparecer a versao, pule para a etapa 9.1.
Windows - Instalar Git:
Opcao A: Download direto (Recomendado)
- Acesse: https://git-scm.com/download/win
- O download iniciara automaticamente
- Execute o instalador e clique Next em todas as telas
- Reinicie o terminal (CMD ou PowerShell) apos instalar
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
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:
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
As seguintes variaveis estao no Secret Manager (configuradas na Etapa 8):
SINTEGRA_API_KEY- Chave API SintegraSERASA_API_KEY- Chave API SerasaSENDGRID_API_KEY- Chave API SendGridPOWER_AUTOMATE_WEBHOOK_URL- URL do webhookBACKUP_ENCRYPTION_KEY- Chave de criptografiaSAP_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
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
Se receber erro
$'\r': command not found, use o script .cmd
ou veja a secao de Troubleshooting para corrigir os line endings.
O projeto inclui varios scripts de automacao na pasta
scripts/:
validate-env.sh/validate-env.cmd- Valida variaveis de ambientedeploy-all-functions.sh- Deploy de todas as functionssetup-monitoring.sh- Configura alertas automaticamentesetup-sap-integration.sh- Configura integracao SAP
Windows: Use os arquivos .cmd quando disponiveis.
- Repositorio clonado
- Arquivo .env.production configurado
- Validacao passou sem erros
⚡ Etapa 10: Deploy das Cloud Functions
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
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
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:
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
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
- 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
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)
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 project → tbg-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) |
Quando perguntar "Overwrite index.html?", responda
n (Nao)!
Sobrescrever vai apagar o frontend da aplicacao.
Se voce digitou "public" ao inves de "." (ponto), nao se preocupe! Basta seguir estes passos:
- Pressione
Ctrl+Cpara cancelar o firebase init - Restaure o firebase.json original:
git checkout frontend/firebase.json - Delete a pasta "public" se foi criada:
(No Linux/Mac use:
rmdir /s /q publicrm -rf public) - Certifique-se de estar no diretorio frontend:
cd frontend - Execute o deploy:
firebase deploy --only hosting
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
firebase hosting:sites:create tbg-app-robotia-gcnt-cad-forne
Opcao A - Via CLI (Recomendado):
firebase projects:addfirebase tbg-app-robotia-gcnt-cad-forne
Opcao B - Via Console:
- Acesse console.firebase.google.com
- Clique em "Adicionar projeto" (ou "Add project")
- Procure pelo projeto
tbg-app-robotia-gcnt-cad-fornena lista - ATENCAO: Verifique se o ID do projeto e exatamente
tbg-app-robotia-gcnt-cad-forne - Aceite os termos e clique em "Continuar"
- Google Analytics: pode selecionar "Nao habilitar" e continuar
- Aguarde a configuracao finalizar
tbg-app-robotia-gcnt-cad-forne.
Se o ID for diferente, voce criou um projeto novo ao inves de vincular o existente!
firebase hosting:sites:create tbg-app-robotia-gcnt-cad-forne
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" |
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"
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
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 |
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.jscom as configurações - O arquivo
js/firebase-config.jsusará automaticamente essas configurações
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
- O
.gitignoreignorajs/config.js(correto, para nao commitar credenciais) - O Firebase usa
.gitignorepor padrao se nao existir.firebaseignore - Sem o
.firebaseignore, oconfig.jsnao e enviado no deploy - O
.firebaseignoresubstitui o.gitignorepara o Firebase Hosting
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
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 |
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
- 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
- Acesse https://tbg-app-robotia-gcnt-cad-forne.web.app
- Faca login com sua conta Google
- Faca upload de uma planilha de teste
- 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"
Se todos os testes passaram, seu sistema esta configurado e pronto para uso em producao!
- Smoke tests passaram
- Frontend acessivel e funcional
- Cloud Scheduler configurado
🏢 Configuracao SAP (Opcional)
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
Acessar a pagina de configuracao
Acesse: https://tbg-app-robotia-gcnt-cad-forne.web.app/sap-config.html
Selecionar modo de integracao
Escolha entre ECC_ONLY, HANA_ONLY ou BOTH
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\"}"
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
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
Apos configurar alertas, faca um teste disparando um erro proposital para verificar se as notificacoes chegam.
💰 Alertas de Orcamento
Configure alertas de orcamento para evitar surpresas na fatura. O GCP pode gerar custos rapidamente se algo der errado.
Criar Alerta de Orcamento
Acessar Billing
Acesse: console.cloud.google.com/billing
Criar Budget
Clique em "Budgets & alerts" no menu lateral, depois em "CREATE BUDGET"
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 |
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)
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
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 variables → Actions |
| 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! |
{
"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:
Acessar Environments
Va em: GitHub → Repository → Settings → Environments
Criar Environment
Clique em "New environment"
Configurar
- Name:
production - Required reviewers: Adicione voce ou outro aprovador (opcional mas recomendado)
- Wait timer: Tempo de espera antes do deploy (opcional)
Salvar
Clique em "Configure environment" para salvar
Criar Tag/Versao para Deploy (OBRIGATORIO)
Siga estes passos para criar e enviar a tag:
Garantir que o codigo esta atualizado
Primeiro, certifique-se que seu codigo local esta sincronizado com o GitHub:
git pull origin main
Criar a tag localmente
Crie a tag com o formato v1.0.0 (sempre com "v" na frente):
git tag v1.0.0
Enviar a tag para o GitHub
Envie a tag para o repositorio remoto:
git push origin v1.0.0
Verificar se a tag foi criada
Acesse GitHub → Repository → Tags e confirme que a tag aparece na lista.
Use o formato
vMAJOR.MINOR.PATCH:
v1.0.0- Primeira versaov1.0.1- Correcao de bugv1.1.0- Nova funcionalidadev2.0.0- Mudanca significativa
Disparar Deploy de Producao
Acessar Actions
Va em: GitHub → Repository → Actions
Selecionar Workflow
Clique em "Deploy to Production" no menu lateral
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
Aprovar (se configurado)
Se voce configurou reviewers, aprove o deploy quando solicitado
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
🔧 Troubleshooting
Causa: Falta de permissoes na sua conta ou service account.
Solucao:
gcloud auth login
gcloud config get-value project
Causa: O projeto nao tem conta de faturamento vinculada.
Solucao: Acesse console.cloud.google.com/billing e vincule uma conta.
Causa: Uma API necessaria nao esta ativada.
Solucao:
gcloud services enable NOME_DA_API.googleapis.com
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
Causa: Configuracao de CORS incorreta no bucket.
Solucao:
gsutil cors set cors.json gs://tbg-app-robotia-gcnt-cad-forne-uploads
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
Causa: Erro no JavaScript ou configuracao do Firebase incorreta.
Solucao:
- Abra o Console do navegador (F12)
- Veja a aba "Console" para erros
- Verifique se as credenciais do Firebase estao corretas em
js/firebase-config.js
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''
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:
- Abra o arquivo no VS Code
- No canto inferior direito, clique em "CRLF"
- Selecione "LF"
- Salve o arquivo (Ctrl+S)
.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