Como o Netlify não suporta backends Node.js/Express tradicionais, a melhor solução é:
- Frontend → Netlify (gratuito)
- Backend → Render, Railway, Vercel ou Fly.io (gratuito com limitações)
- Banco de Dados → Usar o SQLite em produção OU migrar para PostgreSQL
- Criar arquivo
render.yamlna raiz do projeto:
services:
- type: web
name: conectatea-backend
env: node
region: oregon
plan: free
buildCommand: cd backend && npm install
startCommand: cd backend && node server.js
envVars:
- key: NODE_ENV
value: production
- key: JWT_SECRET
generateValue: true
- key: EMAIL_HOST
value: smtp.gmail.com
- key: EMAIL_PORT
value: 587
- key: EMAIL_USER
sync: false
- key: EMAIL_PASSWORD
sync: false- Adicionar ao
backend/package.json:
{
"scripts": {
"start": "node server.js"
},
"engines": {
"node": ">=18.0.0"
}
}-
Acesse render.com
-
Crie uma conta (pode usar GitHub)
-
Clique em "New +" → "Web Service"
-
Conecte seu repositório GitHub
-
Configure:
- Name: conectatea-backend
- Root Directory: backend
- Environment: Node
- Build Command:
npm install - Start Command:
node server.js - Plan: Free
-
Adicione as variáveis de ambiente:
EMAIL_USER: seu-email@gmail.comEMAIL_PASSWORD: sua-senha-de-appJWT_SECRET: (auto-gerado)
-
Clique em "Create Web Service"
-
Aguarde o deploy (5-10 minutos)
-
Copie a URL do backend (ex:
https://conectatea-backend.onrender.com)
Criar arquivo netlify.toml na raiz:
[build]
publish = "."
command = "echo 'No build required'"
[[redirects]]
from = "/*"
to = "/index.html"
status = 200Editar TODOS os arquivos JS para apontar para o backend no Render:
Arquivos a modificar:
auth.jsperfil.jschat.jsespecialista-dashboard.jsforum.jsesqueci-senha.js
Mudar de:
const API_URL = 'http://localhost:3000/api';Para:
const API_URL = 'https://conectatea-backend.onrender.com/api';Opção A: Via Interface Web
- Acesse netlify.com
- Faça login (pode usar GitHub)
- Clique em "Add new site" → "Import an existing project"
- Conecte seu repositório GitHub
- Configure:
- Branch: main
- Build command: (deixe vazio)
- Publish directory:
.(raiz)
- Clique em "Deploy site"
Opção B: Via Netlify CLI
# Instalar Netlify CLI
npm install -g netlify-cli
# Login
netlify login
# Deploy
netlify deploy --prodO Vercel suporta serverless functions, mas requer reescrever todo o backend.
Cada rota vira uma função separada em /api/:
Exemplo: /api/auth/login.js
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const db = require('../../backend/config/database-sqlite');
module.exports = async (req, res) => {
if (req.method !== 'POST') {
return res.status(405).json({ mensagem: 'Método não permitido' });
}
const { email, senha } = req.body;
// ... resto da lógica de login
};Estrutura necessária:
/api
/auth
login.js
cadastrar.js
esqueci-senha.js
redefinir-senha.js
/usuarios
perfil.js
atualizar.js
/chat
mensagens.js
/especialistas
dashboard.js
/forum
posts.js
Prós:
- Zero configuração
- Funciona out-of-the-box
Contras:
⚠️ Dados são perdidos a cada redeploy no Render Free- Não suporta múltiplas conexões simultâneas
- Arquivo
.dbnão persiste em ambientes efêmeros
Solução: Usar volume persistente (Render Paid) ou migrar para PostgreSQL
- Criar PostgreSQL Database (Free tier: 90 dias)
- Copiar a
DATABASE_URL - Instalar
pgno backend:
cd backend
npm install pg- Modificar
backend/config/database.js:
const { Pool } = require('pg');
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false
}
});
module.exports = pool;- Converter queries SQLite para PostgreSQL:
AUTOINCREMENT→SERIALdatetime('now')→NOW()CURRENT_TIMESTAMPjá funciona
Atualizar backend/server.js:
const allowedOrigins = [
'http://localhost:5500',
'https://conectatea.netlify.app', // Sua URL do Netlify
'https://conectatea-backend.onrender.com'
];
app.use(cors({
origin: function (origin, callback) {
if (!origin || allowedOrigins.includes(origin)) {
callback(null, true);
} else {
callback(new Error('Not allowed by CORS'));
}
},
credentials: true
}));-
Ativar "Verificação em 2 etapas" na conta Google
-
Gerar "Senha de app":
- Acesse: https://myaccount.google.com/apppasswords
- Selecione "Outro" → "ConectaTEA"
- Copie a senha gerada
-
Adicionar no Render:
EMAIL_USER: matheuslucindo904@gmail.comEMAIL_PASSWORD: (senha de app de 16 dígitos)
npm install @sendgrid/mailconst sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
async function enviarEmailOTP(email, codigo, tipo, nome) {
const msg = {
to: email,
from: 'noreply@conectatea.com',
subject: '🔐 Código de Recuperação - ConectaTEA',
html: `<h1>Seu código: ${codigo}</h1>`
};
await sgMail.send(msg);
}- Criar conta no Render
- Conectar repositório GitHub
- Configurar variáveis de ambiente
- Deploy do serviço
- Testar endpoints na URL gerada
- Verificar logs de erro
- Atualizar
API_URLem todos os arquivos JS - Criar conta no Netlify
- Conectar repositório
- Deploy do site
- Testar funcionalidades
- Configurar domínio customizado (opcional)
- Gerar senha de app do Gmail
- Adicionar credenciais no Render
- Testar envio de OTP
- Decidir: SQLite ou PostgreSQL
- Se PostgreSQL: criar database no Render
- Migrar schema
- Testar conexão
⚠️ O serviço "dorme" após 15 minutos de inatividade- Primeira requisição pode demorar 30-60 segundos (cold start)
- 750 horas/mês de uso
- Banco SQLite é perdido a cada redeploy
- 100GB de banda/mês
- 300 minutos de build/mês
- Domínio customizado gratuito
Criar um cron job que pinga o backend a cada 10 minutos:
// Usar cron-job.org ou uptimerobot.com
// GET https://conectatea-backend.onrender.com/api/health# Backend
cd backend
node server.js
# Frontend (com Live Server no VS Code)
# Ou Python:
python -m http.server 5500
# Ou Node:
npx serve -l 5500Abra: http://localhost:5500
Após deploy:
- Backend: https://conectatea-backend.onrender.com
- Frontend: https://conectatea.netlify.app
- Documentação API: https://conectatea-backend.onrender.com/api/health
- Verifique os logs no dashboard
- Confirme que
package.jsonexiste - Verifique variáveis de ambiente
- Teste localmente primeiro
- Adicione URL do Netlify no
allowedOrigins - Verifique se frontend usa HTTPS (não HTTP)
- Confirme credenciais: true
- Teste credenciais localmente
- Verifique senha de app (16 dígitos)
- Veja logs do Render
- Tente SendGrid como alternativa
- Migre para PostgreSQL (Render Database)
- Ou use plano pago com volumes persistentes
Execute o checklist acima e seu ConectaTEA estará online em ~30 minutos!
Ordem recomendada:
- Deploy do backend no Render (10 min)
- Atualizar API_URL no código (5 min)
- Deploy do frontend no Netlify (5 min)
- Testar todas as funcionalidades (10 min)
Desenvolvido com ❤️ para ConectaTEA