diff --git a/.env.example b/.env.example index 48ed0f7..c90337b 100644 --- a/.env.example +++ b/.env.example @@ -1,11 +1,6 @@ # ============================================ # OPENSHEETS - Variáveis de Ambiente # ============================================ -# -# Setup: cp .env.example .env -# Docs: README.md -# -# ============================================ # === Database === # PostgreSQL local (Docker): use host "db" @@ -33,7 +28,7 @@ DB_PORT=5432 # === Email (Opcional) === # Provider: Resend (https://resend.com) RESEND_API_KEY= -EMAIL_FROM=noreply@example.com +RESEND_FROM_EMAIL=noreply@example.com # === OAuth (Opcional) === # Google: https://console.cloud.google.com/apis/credentials diff --git a/DEPLOY_COOLIFY.md b/DEPLOY_COOLIFY.md deleted file mode 100644 index 5c0aab8..0000000 --- a/DEPLOY_COOLIFY.md +++ /dev/null @@ -1,270 +0,0 @@ -# Deploy do OpenSheets no Coolify - -Este guia mostra como fazer deploy do OpenSheets no Coolify usando Docker. - -## 🚀 Resumo Rápido - -**Duas formas principais:** - -### 1. Com imagem do Docker Hub (MAIS RÁPIDO ⚡) -- Publicar imagem no Docker Hub primeiro -- Deploy em segundos (só faz pull) -- Ideal para produção e CI/CD -- **Ver guia:** [DOCKER_HUB.md](./DOCKER_HUB.md) - -### 2. Build direto no Coolify (MAIS SIMPLES) -- Usar `docker-compose.yml` original -- Coolify faz build completo (2-5 min) -- Ideal para começar rápido - ---- - -## Qual opção escolher? - -| Opção | Quando usar | Deploy | Complexidade | -|-------|-------------|--------|--------------| -| **Opção 1: Imagem Docker Hub** | Deploy rápido, CI/CD, produção | ⚡ Segundos | ⭐ Fácil | -| **Opção 2: Build no Coolify** | Começar rápido, teste | 🐢 2-5 min | ⭐ Fácil | -| **Opção 3: PostgreSQL separado** | Backups automáticos, melhor gestão | 🐢 2-5 min | ⭐⭐ Médio | - -**Recomendado para produção: Opção 1 (Docker Hub)** ✅ - ---- - -## Opção 1: Deploy com Docker Hub (Recomendado para Produção) - -**Vantagens:** -- ✅ Deploy em **segundos** (vs minutos) -- ✅ Mesma imagem em múltiplos ambientes -- ✅ CI/CD automático via GitHub Actions -- ✅ Rollback fácil (trocar tag) - -### Passo 0: Publicar Imagem no Docker Hub - -**Siga o guia completo:** [DOCKER_HUB.md](./DOCKER_HUB.md) - -Resumo rápido: -1. Configurar secrets no GitHub (DOCKER_USERNAME e DOCKER_PASSWORD) -2. Push para main ou criar tag → GitHub Actions publica automaticamente -3. Verificar imagem em https://hub.docker.com/ - -### Passo 1: Criar Aplicação no Coolify - -1. No Coolify: **Projects** → **+ New Resource** → **Docker Compose Empty** -2. Configure: - - **Name**: `opensheets` - - **Source**: Conecte ao seu repositório Git - - **Branch**: `main` - - **Docker Compose Location**: `docker-compose.prod.yml` - -### Passo 2: Configurar Variáveis de Ambiente - -```bash -# Configuração da imagem do Docker Hub -DOCKER_USERNAME=seu-usuario-dockerhub -IMAGE_TAG=latest - -# PostgreSQL -POSTGRES_USER=opensheets -POSTGRES_PASSWORD=SENHA_FORTE_AQUI -POSTGRES_DB=opensheets_db -DATABASE_URL=postgresql://opensheets:SENHA_FORTE_AQUI@db:5432/opensheets_db - -# Better Auth (OBRIGATÓRIO) -BETTER_AUTH_SECRET=GERAR_COM_OPENSSL -BETTER_AUTH_URL=https://seu-dominio.com - -# Opcionais: EMAIL, OAUTH, AI (ver abaixo) -``` - -### Passo 3: Deploy - -1. Clique em **Deploy** -2. **Coolify vai fazer PULL da imagem** (segundos) ⚡ -3. PostgreSQL sobe primeiro -4. App executa migrations e inicia - ---- - -## Opção 2: Deploy com Build no Coolify (Mais Simples) - -**Use se:** Quer começar rápido sem configurar Docker Hub - -### Passo 1: Criar Aplicação no Coolify - -1. **Projects** → **+ New Resource** → **Docker Compose Empty** -2. Configure: - - **Name**: `opensheets` - - **Source**: Conecte ao repositório - - **Branch**: `main` - - **Docker Compose Location**: `docker-compose.yml` (ou deixe vazio) - -### Passo 2: Variáveis de Ambiente - -```bash -# PostgreSQL -POSTGRES_USER=opensheets -POSTGRES_PASSWORD=SENHA_FORTE_AQUI -POSTGRES_DB=opensheets_db -DATABASE_URL=postgresql://opensheets:MESMA_SENHA_ACIMA@db:5432/opensheets_db - -# Better Auth -BETTER_AUTH_SECRET=GERAR_COM_OPENSSL -BETTER_AUTH_URL=https://seu-dominio.com -``` - -**Gerar secrets:** -```bash -openssl rand -base64 32 # Para POSTGRES_PASSWORD -openssl rand -base64 32 # Para BETTER_AUTH_SECRET -``` - -**⚠️ IMPORTANTE:** A senha em `POSTGRES_PASSWORD` e `DATABASE_URL` deve ser igual! - -### Passo 3: Deploy - -1. Clique em **Deploy** -2. Coolify faz **build completo** (2-5 min) 🐢 -3. PostgreSQL e app sobem juntos - ---- - -## Opção 3: PostgreSQL Separado - -**Vantagens:** -- ✅ Backups automáticos do Coolify -- ✅ Monitoring independente -- ✅ Melhor para produção - -
-Ver instruções detalhadas - -### Passo 1: Criar PostgreSQL - -1. **Databases** → **+ New Database** → **PostgreSQL 18** -2. Configure nome, usuário, senha -3. Copie a **Internal Connection String** - -### Passo 2: Criar Aplicação - -1. **Docker Compose Empty** → apontar para `docker-compose.coolify.yml` -2. Configurar variáveis (DATABASE_URL aponta para PostgreSQL separado) - -
- ---- - -## Variáveis de Ambiente Opcionais - -```bash -# Email (Resend) -RESEND_API_KEY=re_... -EMAIL_FROM=noreply@seu-dominio.com - -# OAuth Google -GOOGLE_CLIENT_ID=... -GOOGLE_CLIENT_SECRET=... - -# OAuth GitHub -GITHUB_CLIENT_ID=... -GITHUB_CLIENT_SECRET=... - -# AI Providers -ANTHROPIC_API_KEY=sk-ant-... -OPENAI_API_KEY=sk-... -GOOGLE_GENERATIVE_AI_API_KEY=... -OPENROUTER_API_KEY=... -``` - ---- - -## Configurar Domínio - -1. No Coolify: **Domains** -2. Adicione seu domínio -3. SSL automático via Let's Encrypt - ---- - -## Verificação de Deploy - -1. **Health Check**: `https://seu-dominio.com/api/health` - ```json - {"status":"ok","timestamp":"...","service":"opensheets-app"} - ``` - -2. **Logs**: No Coolify → Logs - -3. **Database**: Verificar se migrations rodaram - ---- - -## Comparação das Opções - -| | Docker Hub | Build no Coolify | PostgreSQL Separado | -|---|---|---|---| -| **Tempo de deploy** | ⚡ Segundos | 🐢 2-5 min | 🐢 2-5 min | -| **Complexidade** | Médio (setup inicial) | Fácil | Médio | -| **CI/CD** | ✅ Automático | ❌ Manual | ✅ Possível | -| **Rollback** | ✅ Fácil (trocar tag) | ❌ Rebuild | ✅ Fácil | -| **Backups DB** | ❌ Manual | ❌ Manual | ✅ Automático | -| **Ideal para** | Produção | Desenvolvimento/Teste | Produção crítica | - ---- - -## Atualizações - -### Com Docker Hub (Opção 1): -```bash -# Fazer alterações -git add . -git commit -m "feat: nova funcionalidade" -git push origin main -# → GitHub Actions publica nova imagem automaticamente - -# No Coolify: Redeploy (faz pull da nova imagem) -``` - -### Com Build no Coolify (Opção 2): -```bash -git push origin main -# No Coolify: Redeploy (faz build novamente) -``` - ---- - -## Troubleshooting - -### Deploy demora muito -**Causa:** Fazendo build completo -**Solução:** Use Opção 1 (Docker Hub) - -### Erro de conexão com banco -**Causa:** DATABASE_URL incorreta -**Solução:** Verificar host (`db` para compose local, ou nome do serviço no Coolify) - -### Migrations não executam -**Solução:** Executar manualmente no terminal do container: -```bash -pnpm db:push -``` - ---- - -## Recursos - -- [Documentação Coolify](https://coolify.io/docs) -- [Guia Docker Hub](./DOCKER_HUB.md) -- [Next.js Deployment](https://nextjs.org/docs/deployment) -- [Drizzle Migrations](https://orm.drizzle.team/docs/migrations) - ---- - -## Próximos Passos - -1. ✅ Configurar domínio personalizado -2. ✅ Configurar OAuth (Google, GitHub) -3. ✅ Configurar email (Resend) -4. ✅ Configurar AI providers -5. ✅ Configurar backups (se PostgreSQL separado) -6. ✅ Configurar monitoring diff --git a/DEPLOY_README.md b/DEPLOY_README.md deleted file mode 100644 index b0b6ab4..0000000 --- a/DEPLOY_README.md +++ /dev/null @@ -1,130 +0,0 @@ -# Guias de Deploy do OpenSheets - -Escolha o guia apropriado para seu caso: - -## 📚 Guias Disponíveis - -### 1. [DEPLOY_COOLIFY.md](./DEPLOY_COOLIFY.md) -**Deploy no Coolify usando Docker** - -**Use para:** Deploy em produção no Coolify - -**Opções disponíveis:** -- ⚡ Com imagem do Docker Hub (deploy rápido) -- 🐢 Com build direto no Coolify (mais simples) -- 🔐 Com PostgreSQL separado (melhor gestão) - ---- - -### 2. [DOCKER_HUB.md](./DOCKER_HUB.md) -**Publicação de imagens no Docker Hub** - -**Use para:** -- Configurar CI/CD com GitHub Actions -- Publicar imagens automaticamente -- Deploy ultra-rápido (segundos vs minutos) - -**Inclui:** -- Workflow GitHub Actions pronto -- Publicação automática e manual -- Gestão de versões e tags - ---- - -## 🚀 Fluxo Recomendado para Produção - -``` -1. Configurar Docker Hub - └─> Seguir: DOCKER_HUB.md - ├─ Criar access token no Docker Hub - ├─ Configurar secrets no GitHub - └─ Push código → imagem publicada automaticamente - -2. Deploy no Coolify - └─> Seguir: DEPLOY_COOLIFY.md → Opção 1 - ├─ Usar docker-compose.prod.yml - ├─ Configurar variáveis de ambiente - └─ Deploy em segundos ⚡ -``` - ---- - -## ⚡ Quick Start (Mais Rápido) - -**Não quer configurar Docker Hub agora?** - -``` -└─> Seguir: DEPLOY_COOLIFY.md → Opção 2 - ├─ Usar docker-compose.yml original - ├─ Configurar variáveis básicas - └─ Deploy em 2-5 minutos 🐢 -``` - ---- - -## 📁 Arquivos de Configuração - -| Arquivo | Uso | -|---------|-----| -| `docker-compose.yml` | Desenvolvimento local + Deploy simples no Coolify | -| `docker-compose.prod.yml` | Produção com imagem do Docker Hub | -| `docker-compose.coolify.yml` | Deploy no Coolify com PostgreSQL separado | -| `.env.production.example` | Template de variáveis de ambiente | -| `.github/workflows/docker-publish.yml` | CI/CD automático para Docker Hub | - ---- - -## 🔧 Variáveis de Ambiente - -Ver template completo: [.env.production.example](./.env.production.example) - -### Mínimo necessário: -```bash -# PostgreSQL -POSTGRES_PASSWORD=... -DATABASE_URL=postgresql://opensheets:senha@db:5432/opensheets_db - -# Better Auth -BETTER_AUTH_SECRET=... -BETTER_AUTH_URL=https://seu-dominio.com -``` - -### Gerar secrets: -```bash -openssl rand -base64 32 -``` - ---- - -## 🆘 Troubleshooting - -| Problema | Solução | -|----------|---------| -| Deploy muito lento | Use Docker Hub (DOCKER_HUB.md) | -| Erro de conexão com banco | Verificar DATABASE_URL | -| Imagem não encontrada | Configurar DOCKER_USERNAME no Coolify | -| Migrations não executam | Executar manualmente: `pnpm db:push` | - ---- - -## 📖 Mais Recursos - -- [Documentação Coolify](https://coolify.io/docs) -- [Docker Hub](https://hub.docker.com/) -- [GitHub Actions](https://docs.github.com/en/actions) -- [Next.js Deployment](https://nextjs.org/docs/deployment) - ---- - -## 🎯 Resumo - -**Para produção (recomendado):** -1. DOCKER_HUB.md → Configurar CI/CD -2. DEPLOY_COOLIFY.md → Opção 1 (Docker Hub) - -**Para começar rápido:** -- DEPLOY_COOLIFY.md → Opção 2 (Build direto) - -**Dúvidas?** -- Abra uma issue no GitHub -- Consulte os guias detalhados acima diff --git a/DOCKER_HUB.md b/DOCKER_HUB.md deleted file mode 100644 index 4cef4a2..0000000 --- a/DOCKER_HUB.md +++ /dev/null @@ -1,303 +0,0 @@ -# Publicação no Docker Hub - -Este guia mostra como publicar a imagem do OpenSheets no Docker Hub e usar no Coolify. - -## 🚀 Resumo Rápido - -1. **Configurar secrets no GitHub** (DOCKER_USERNAME e DOCKER_PASSWORD) -2. **Push para main ou criar tag** → GitHub Actions publica automaticamente -3. **No Coolify:** usar `docker-compose.prod.yml` apontando para sua imagem do Docker Hub - ---- - -## Opção 1: Publicação Automática (GitHub Actions) - -### Passo 1: Criar Access Token no Docker Hub - -1. Acesse [Docker Hub](https://hub.docker.com/) -2. Faça login na sua conta -3. Vá em **Account Settings** → **Security** → **New Access Token** -4. Configure: - - **Description**: `GitHub Actions - OpenSheets` - - **Access permissions**: `Read & Write` -5. Clique em **Generate** e **copie o token** (você não verá novamente!) - -### Passo 2: Configurar Secrets no GitHub - -1. Vá no seu repositório GitHub -2. **Settings** → **Secrets and variables** → **Actions** -3. Clique em **New repository secret** -4. Adicione 2 secrets: - -**Secret 1:** -- **Name**: `DOCKER_USERNAME` -- **Value**: seu username do Docker Hub (ex: `felipecoutinho`) - -**Secret 2:** -- **Name**: `DOCKER_PASSWORD` -- **Value**: o access token copiado acima - -### Passo 3: Publicar a Imagem - -O workflow `.github/workflows/docker-publish.yml` já está configurado e vai publicar automaticamente quando você: - -#### Opção A: Push para main (cria tag `latest`) -```bash -git add . -git commit -m "feat: nova versão" -git push origin main -``` - -Isso vai gerar as tags: -- `seu-usuario/opensheets:latest` -- `seu-usuario/opensheets:main` -- `seu-usuario/opensheets:main-abc123` (hash do commit) - -#### Opção B: Criar release com tag semântica (recomendado) -```bash -# Criar tag de versão -git tag v1.0.0 -git push origin v1.0.0 -``` - -Isso vai gerar as tags: -- `seu-usuario/opensheets:latest` -- `seu-usuario/opensheets:1.0.0` -- `seu-usuario/opensheets:1.0` -- `seu-usuario/opensheets:1` - -### Passo 4: Verificar Publicação - -1. Acesse [Docker Hub](https://hub.docker.com/) -2. Vá em **Repositories** -3. Você verá `seu-usuario/opensheets` com as tags publicadas - -Ou verifique pelo terminal: -```bash -docker pull seu-usuario/opensheets:latest -``` - ---- - -## Opção 2: Publicação Manual - -Se preferir publicar manualmente sem GitHub Actions: - -### Passo 1: Login no Docker Hub -```bash -docker login -# Digite seu username e password/token -``` - -### Passo 2: Build da Imagem -```bash -# Build com tag do seu usuário -docker build -t seu-usuario/opensheets:latest . - -# Opcional: criar tags adicionais -docker tag seu-usuario/opensheets:latest seu-usuario/opensheets:v1.0.0 -``` - -### Passo 3: Push para o Docker Hub -```bash -# Enviar a imagem -docker push seu-usuario/opensheets:latest - -# Se criou tags adicionais -docker push seu-usuario/opensheets:v1.0.0 -``` - -### Passo 4: Verificar -```bash -docker pull seu-usuario/opensheets:latest -``` - ---- - -## Usando no Coolify - -### Opção A: Docker Compose Production (Recomendado) - -1. **No Coolify:** - - Projects → + New Resource → **Docker Compose Empty** - - Conecte ao repositório - - **Docker Compose Location**: `docker-compose.prod.yml` - -2. **Configure variáveis de ambiente:** - ```bash - # Configuração da imagem do Docker Hub - DOCKER_USERNAME=seu-usuario - IMAGE_TAG=latest - - # PostgreSQL - POSTGRES_USER=opensheets - POSTGRES_PASSWORD=SENHA_FORTE_AQUI - POSTGRES_DB=opensheets_db - DATABASE_URL=postgresql://opensheets:SENHA_FORTE_AQUI@db:5432/opensheets_db - - # Better Auth - BETTER_AUTH_SECRET=GERAR_COM_OPENSSL - BETTER_AUTH_URL=https://seu-dominio.com - ``` - -3. **Deploy** - - Clique em Deploy - - O Coolify vai fazer **pull da imagem** do Docker Hub (não build!) - - Muito mais rápido! ⚡ - -### Opção B: Editar docker-compose.prod.yml antes - -Você pode editar o arquivo e fixar sua imagem: - -```yaml -app: - image: felipecoutinho/opensheets:latest # Seu usuário aqui - # ... resto da configuração -``` - -Depois fazer commit e push. No Coolify vai usar direto a imagem configurada. - ---- - -## Vantagens de Usar Imagem do Docker Hub - -✅ **Deploy mais rápido** - Apenas pull da imagem (segundos) vs build completo (minutos) -✅ **Mesma imagem em múltiplos ambientes** - Staging, produção, testes -✅ **Rollback fácil** - Trocar tag da imagem para versão anterior -✅ **CI/CD automatizado** - Push no GitHub → build automático → disponível no hub -✅ **Multi-arch** - Suporte para AMD64 e ARM64 (servidores diferentes) - ---- - -## Gestão de Versões - -### Estratégia Recomendada - -```bash -# Desenvolvimento contínuo -main branch → seu-usuario/opensheets:latest - -# Releases estáveis -v1.0.0 → seu-usuario/opensheets:1.0.0 -v1.1.0 → seu-usuario/opensheets:1.1.0 -v2.0.0 → seu-usuario/opensheets:2.0.0 -``` - -### Exemplo de Workflow Completo - -```bash -# 1. Desenvolver feature -git checkout -b feature/nova-funcionalidade -# ... fazer alterações ... -git add . -git commit -m "feat: adiciona nova funcionalidade" - -# 2. Merge para main -git checkout main -git merge feature/nova-funcionalidade -git push origin main -# → GitHub Actions publica seu-usuario/opensheets:latest - -# 3. Criar release quando estável -git tag v1.1.0 -git push origin v1.1.0 -# → GitHub Actions publica: -# - seu-usuario/opensheets:1.1.0 -# - seu-usuario/opensheets:1.1 -# - seu-usuario/opensheets:1 -# - seu-usuario/opensheets:latest -``` - -### No Coolify: Controle de Versões - -```bash -# Usar sempre a última versão (auto-update) -IMAGE_TAG=latest - -# Fixar versão específica (produção estável) -IMAGE_TAG=1.0.0 - -# Usar versão minor mais recente -IMAGE_TAG=1.1 -``` - ---- - -## Troubleshooting - -### Erro: "unauthorized: authentication required" - -**Causa:** Secrets não configurados ou token inválido - -**Solução:** -1. Verifique se DOCKER_USERNAME e DOCKER_PASSWORD estão nos secrets do GitHub -2. Gere um novo access token no Docker Hub -3. Atualize o secret DOCKER_PASSWORD - -### Erro: "denied: requested access to the resource is denied" - -**Causa:** Username incorreto ou permissões insuficientes - -**Solução:** -1. Verifique se DOCKER_USERNAME está correto (lowercase) -2. Certifique-se que o access token tem permissão "Read & Write" - -### Build demora muito no GitHub Actions - -**Causa:** Cache não está funcionando - -**Solução:** -- O workflow já usa cache (buildx cache) -- Espere o primeiro build (demora mais) -- Builds seguintes serão mais rápidos - -### Coolify não encontra a imagem - -**Causa:** Variável DOCKER_USERNAME não configurada ou imagem não existe - -**Solução:** -1. Verifique se a imagem existe no Docker Hub -2. Configure DOCKER_USERNAME no Coolify -3. Tente fazer pull manual: `docker pull seu-usuario/opensheets:latest` - ---- - -## Limpeza de Imagens Antigas - -No Docker Hub (free tier tem limite de 1 repositório privado): - -1. Vá em **Repositories** → `opensheets` → **Tags** -2. Delete tags antigas que não usa mais -3. Mantenha: `latest`, versões estáveis importantes - -Ou use Docker Hub CLI: -```bash -# Instalar hub-tool -brew install docker/hub-tool/hub-tool # macOS - -# Listar tags -hub-tool tag ls seu-usuario/opensheets - -# Deletar tag -hub-tool tag rm seu-usuario/opensheets:old-tag -``` - ---- - -## Recursos - -- [Docker Hub](https://hub.docker.com/) -- [GitHub Actions - Docker](https://docs.github.com/en/actions/publishing-packages/publishing-docker-images) -- [Docker Build Push Action](https://github.com/docker/build-push-action) -- [Semantic Versioning](https://semver.org/) - ---- - -## Próximos Passos - -Depois de configurar: - -1. ✅ Push código para GitHub → imagem publicada automaticamente -2. ✅ No Coolify, usar `docker-compose.prod.yml` -3. ✅ Deploy super rápido (apenas pull da imagem) -4. ✅ Criar releases com tags quando tiver versões estáveis diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml deleted file mode 100644 index 04f6328..0000000 --- a/docker-compose.prod.yml +++ /dev/null @@ -1,131 +0,0 @@ -# Docker Compose para Produção (com imagem do Docker Hub) -# Uso: docker compose -f docker-compose.prod.yml up -d - -name: opensheets - -services: - # ============================================ - # Serviço: PostgreSQL (Banco de dados) - # ============================================ - db: - image: postgres:18-alpine - container_name: opensheets_postgres - restart: unless-stopped - - environment: - POSTGRES_USER: ${POSTGRES_USER:-opensheets} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-opensheets_dev_password} - POSTGRES_DB: ${POSTGRES_DB:-opensheets_db} - POSTGRES_INITDB_ARGS: "-E UTF8 --locale=C" - - ports: - - "${DB_PORT:-5432}:5432" - - volumes: - - postgres_data:/var/lib/postgresql/data - - ./scripts/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro - - healthcheck: - test: - [ - "CMD-SHELL", - "pg_isready -U ${POSTGRES_USER:-opensheets} -d ${POSTGRES_DB:-opensheets_db}", - ] - interval: 10s - timeout: 5s - retries: 5 - start_period: 10s - - networks: - - opensheets_network - - # ============================================ - # Serviço: Aplicação Next.js (imagem do Docker Hub) - # ============================================ - app: - # IMPORTANTE: Substitua 'seu-usuario' pelo seu username do Docker Hub - # Exemplo: felipecoutinho/opensheets:latest - image: ${DOCKER_USERNAME:-seu-usuario}/opensheets:${IMAGE_TAG:-latest} - - container_name: opensheets_app - restart: unless-stopped - - ports: - - "${APP_PORT:-3000}:3000" - - environment: - NODE_ENV: production - - # Database URL - DATABASE_URL: ${DATABASE_URL} - - # Better Auth (OBRIGATÓRIO) - BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET} - BETTER_AUTH_URL: ${BETTER_AUTH_URL:-http://localhost:3000} - - # Email (opcional) - RESEND_API_KEY: ${RESEND_API_KEY:-} - EMAIL_FROM: ${EMAIL_FROM:-} - - # OAuth (opcional) - GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-} - GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-} - GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID:-} - GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET:-} - - # AI Providers (opcional) - ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-} - OPENAI_API_KEY: ${OPENAI_API_KEY:-} - GOOGLE_GENERATIVE_AI_API_KEY: ${GOOGLE_GENERATIVE_AI_API_KEY:-} - OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-} - - depends_on: - db: - condition: service_healthy - - networks: - - opensheets_network - - # Script de inicialização: roda migrations antes de iniciar - entrypoint: ["/bin/sh", "-c"] - command: - - | - echo "🚀 Aguardando banco de dados..." - sleep 5 - - echo "📦 Rodando migrations..." - pnpm db:push || echo "⚠️ Migrations falharam ou já estão atualizadas" - - echo "✅ Iniciando aplicação Next.js..." - node server.js - - healthcheck: - test: - [ - "CMD", - "wget", - "--quiet", - "--tries=1", - "--spider", - "http://localhost:3000/api/health", - ] - interval: 30s - timeout: 10s - retries: 3 - start_period: 40s - -# ============================================ -# Volumes -# ============================================ -volumes: - postgres_data: - name: opensheets_postgres_data - driver: local - -# ============================================ -# Networks -# ============================================ -networks: - opensheets_network: - name: opensheets_network - driver: bridge