From 86ae2a10845d2d538d371fa8e0eb2126ff408d81 Mon Sep 17 00:00:00 2001 From: killer-cf Date: Wed, 26 Nov 2025 11:40:33 -0300 Subject: [PATCH] modify docker file --- apps/web/CONFIGURACAO_ENV.md | 29 ------ apps/web/Dockerfile | 45 +++++---- apps/web/GOOGLE_MAPS_SETUP.md | 174 ---------------------------------- 3 files changed, 25 insertions(+), 223 deletions(-) delete mode 100644 apps/web/CONFIGURACAO_ENV.md delete mode 100644 apps/web/GOOGLE_MAPS_SETUP.md diff --git a/apps/web/CONFIGURACAO_ENV.md b/apps/web/CONFIGURACAO_ENV.md deleted file mode 100644 index 91f3551..0000000 --- a/apps/web/CONFIGURACAO_ENV.md +++ /dev/null @@ -1,29 +0,0 @@ -# ⚙️ Configuração de Variáveis de Ambiente - -## 📁 Arquivo .env - -Crie um arquivo `.env` na pasta `apps/web/` com as seguintes variáveis: - -```env -# Google Maps API Key (opcional) -# Obtenha sua chave em: https://console.cloud.google.com/ -# Ative a "Geocoding API" para buscar coordenadas por endereço -# Deixe vazio para usar OpenStreetMap (gratuito, sem necessidade de chave) -VITE_GOOGLE_MAPS_API_KEY= - -# VAPID Public Key para Push Notifications (opcional) -VITE_VAPID_PUBLIC_KEY= -``` - -## 📖 Documentação Completa - -Para instruções detalhadas sobre como obter e configurar a Google Maps API Key, consulte: - -📄 **[GOOGLE_MAPS_SETUP.md](./GOOGLE_MAPS_SETUP.md)** - -## ⚠️ Importante - -- O arquivo `.env` não deve ser commitado no Git (já está no .gitignore) -- Variáveis de ambiente começam com `VITE_` para serem acessíveis no frontend -- Reinicie o servidor de desenvolvimento após alterar o arquivo `.env` - diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index e9875f3..32dc0ba 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -2,47 +2,52 @@ FROM oven/bun:1 AS base # Set the working directory inside the container -WORKDIR /usr/src/app +WORKDIR /app -# Create a non-root user for security -RUN addgroup --system --gid 1001 sveltekit -RUN adduser --system --uid 1001 sveltekit +# --- +FROM base AS prepare +# Replace with the major version installed in your repository. For example: +# RUN yarn global add turbo@^2 +RUN bun add -g turbo@^2 +COPY . . +# Add lockfile and package.json's of isolated subworkspace +# Generate a partial monorepo with a pruned lockfile for a target workspace. +# Assuming "web" is the name entered in the project's package.json: { name: "web" } +RUN turbo prune web --docker -# Copy package.json and bun.lock (if available) -COPY package.json bun.lock* ./ +# --- +FROM base AS builder -# Install dependencies (including dev dependencies for build) -# This will resolve workspace dependencies using the package.json files we just copied -RUN bun install --frozen-lockfile +# First install the dependencies (as they change less often) +COPY --from=prepare /app/out/json/ . +RUN bun install +# Build the project +COPY --from=prepare /app/out/full/ . # Copy the rest of the source code -COPY . . +COPY --from=prepare /app/out/full/ . -# Prepare SvelteKit and build the application -# Navigate to web app directory and build -WORKDIR /usr/src/app/apps/web -RUN bun run prepare -RUN bun run build +RUN bunx turbo build # Production stage FROM oven/bun:1-slim AS production # Set working directory -WORKDIR /usr/src/app +WORKDIR /app # Create non-root user RUN addgroup --system --gid 1001 sveltekit RUN adduser --system --uid 1001 sveltekit # Copy built application from base stage -COPY --from=base --chown=sveltekit:sveltekit /usr/src/app/build ./build -COPY --from=base --chown=sveltekit:sveltekit /usr/src/app/package.json ./package.json +COPY --from=builder --chown=sveltekit:sveltekit /app/apps/web/build ./build +COPY --from=builder --chown=sveltekit:sveltekit /app/apps/web/package.json ./package.json # Copy node_modules from root (Bun manages workspaces centrally) -COPY --from=base --chown=sveltekit:sveltekit /usr/src/app/node_modules ./node_modules +COPY --from=builder --chown=sveltekit:sveltekit /app/apps/web/node_modules ./node_modules # Copy any additional files needed for runtime -COPY --from=base --chown=sveltekit:sveltekit /usr/src/app/static ./static +COPY --from=builder --chown=sveltekit:sveltekit /app/apps/web/static ./static # Switch to non-root user USER sveltekit diff --git a/apps/web/GOOGLE_MAPS_SETUP.md b/apps/web/GOOGLE_MAPS_SETUP.md deleted file mode 100644 index 7ccfb87..0000000 --- a/apps/web/GOOGLE_MAPS_SETUP.md +++ /dev/null @@ -1,174 +0,0 @@ -# 📍 Configuração do Google Maps API para Busca de Coordenadas - -Este guia explica como configurar a API do Google Maps para obter coordenadas GPS de forma automática e precisa no sistema de Endereços de Marcação. - -## 🎯 Por que usar Google Maps? - -- ✅ **Maior Precisão**: Resultados mais exatos para endereços brasileiros -- ✅ **Melhor Cobertura**: Banco de dados mais completo e atualizado -- ✅ **Geocoding Avançado**: Entende melhor endereços incompletos ou parciais - -> **Nota**: O sistema funciona perfeitamente sem a API key do Google Maps, usando OpenStreetMap (gratuito). A configuração do Google Maps é opcional. - ---- - -## 📋 Passo a Passo - -### 1. Criar Projeto no Google Cloud Platform - -1. Acesse [Google Cloud Console](https://console.cloud.google.com/) -2. Clique em **"Criar Projeto"** ou selecione um projeto existente -3. Preencha o nome do projeto (ex: "SGSE-App") -4. Clique em **"Criar"** - -### 2. Ativar a Geocoding API - -1. No menu lateral, vá em **"APIs e Serviços"** > **"Biblioteca"** -2. Procure por **"Geocoding API"** -3. Clique no resultado e depois em **"Ativar"** -4. Aguarde alguns segundos para a ativação - -### 3. Criar Chave de API - -1. Ainda em **"APIs e Serviços"**, vá em **"Credenciais"** -2. Clique em **"Criar Credenciais"** > **"Chave de API"** -3. Copie a chave gerada (você precisará dela depois) - -### 4. Configurar Restrições de Segurança (Recomendado) - -Para proteger sua chave de API: - -1. Clique na chave criada para editá-la -2. Em **"Restrições de API"**: - - Selecione **"Restringir chave"** - - Escolha **"Geocoding API"** -3. Em **"Restrições de aplicativo"**: - - Para desenvolvimento local: escolha **"Referenciadores de sites HTTP"** - - Adicione: `http://localhost:*` e `http://127.0.0.1:*` - - Para produção: adicione o domínio do seu site -4. Clique em **"Salvar"** - -### 5. Configurar no Projeto - -1. No diretório `apps/web/`, copie o arquivo de exemplo: - ```bash - cp .env.example .env - ``` - -2. Abra o arquivo `.env` e adicione sua chave: - ```env - VITE_GOOGLE_MAPS_API_KEY=sua_chave_aqui - ``` - -3. Reinicie o servidor de desenvolvimento: - ```bash - npm run dev - ``` - -### 6. Verificar se está funcionando - -1. Acesse a página de **Endereços de Marcação** (`/ti/configuracoes-ponto/enderecos`) -2. Clique em **"Novo Endereço"** -3. Preencha um endereço e clique em **"Buscar GPS"** -4. Se configurado corretamente, verá a mensagem: *"Coordenadas encontradas via Google Maps!"* - ---- - -## 💰 Custos - -### Google Maps Geocoding API - -- **$5.00 por 1.000 requisições** (primeiros 40.000 são gratuitos por mês) -- **$0.005 por requisição** após os 40.000 gratuitos - -> 💡 Para a maioria dos casos de uso, os 40.000 gratuitos são suficientes! - -### OpenStreetMap (Fallback) - -- **100% Gratuito** e ilimitado -- Sem necessidade de configuração -- Precisão levemente menor, mas ainda muito boa - ---- - -## 🔄 Como funciona o sistema - -O sistema foi projetado para usar uma estratégia de **fallback inteligente**: - -1. **Primeiro**: Tenta buscar via Google Maps (se API key configurada) -2. **Se falhar ou não tiver API key**: Usa automaticamente OpenStreetMap -3. **Feedback**: Informa qual serviço foi usado na mensagem de sucesso - -Isso garante que o sistema sempre funcione, mesmo sem a API key do Google Maps. - ---- - -## 🔒 Segurança - -### ⚠️ Importante - -- **Nunca** commite o arquivo `.env` no Git (já está no .gitignore) -- **Nunca** compartilhe sua chave de API publicamente -- Configure **restrições de API** no Google Cloud Console -- Para produção, use variáveis de ambiente seguras no seu provedor de hospedagem - -### Configuração em Produção - -Para ambientes de produção (Vercel, Netlify, etc.): - -1. Acesse as configurações do projeto no seu provedor -2. Vá em **"Environment Variables"** ou **"Variáveis de Ambiente"** -3. Adicione: `VITE_GOOGLE_MAPS_API_KEY` com o valor da sua chave -4. Faça o deploy novamente - ---- - -## ❓ Solução de Problemas - -### A busca não está usando Google Maps - -- Verifique se a variável `VITE_GOOGLE_MAPS_API_KEY` está no arquivo `.env` -- Reinicie o servidor de desenvolvimento -- Verifique no console do navegador se há erros - -### Erro: "This API project is not authorized to use this API" - -- Verifique se a **Geocoding API** está ativada no projeto -- Aguarde alguns minutos após a ativação (pode levar até 5 minutos) - -### Erro: "API key not valid" - -- Verifique se copiou a chave corretamente -- Verifique se as restrições de API permitem o uso da Geocoding API -- Verifique se as restrições de aplicativo permitem seu domínio/endereço - -### Mensagem: "Coordenadas encontradas via OpenStreetMap" - -- Isso é normal se: - - Não há API key configurada - - A API key não é válida - - O Google Maps falhou na busca -- O sistema continua funcionando normalmente com OpenStreetMap - ---- - -## 📚 Recursos Úteis - -- [Google Cloud Console](https://console.cloud.google.com/) -- [Documentação Geocoding API](https://developers.google.com/maps/documentation/geocoding) -- [Preços Google Maps](https://developers.google.com/maps/billing-and-pricing/pricing) -- [OpenStreetMap Nominatim](https://nominatim.org/) - ---- - -## ✅ Resumo - -1. ✅ Crie projeto no Google Cloud -2. ✅ Ative Geocoding API -3. ✅ Crie chave de API -4. ✅ Configure restrições (recomendado) -5. ✅ Adicione `VITE_GOOGLE_MAPS_API_KEY` no `.env` -6. ✅ Reinicie o servidor - -**Pronto!** O sistema agora usará Google Maps para busca de coordenadas com maior precisão. -