# Instalação na VPS – Loja Braga Jardinagem

Guia para quem vai instalar a loja. Tempo estimado: 30 a 60 minutos.

## O que a loja é
- Um app **Node.js** (Express) que serve o site e conversa com a **API de Orders do Mercado Pago**: Pix, cartão e boleto.
- Não usa banco de dados. Os pedidos ficam em `data/pedidos.json`, uma pasta criada sozinha.
- Roda na porta **3000**, atrás do Nginx com **HTTPS**, que é obrigatório para o Mercado Pago.

## O que você recebe do dono da loja
| Item | Como chega |
|---|---|
| `braga-mercadopago.zip` | Este pacote |
| Domínio/subdomínio da loja (ex.: `loja.bragajardinagem.com.br`) | Combinar com o dono. O DNS precisa de um registro **A** apontando para o IP da VPS |
| `MP_PUBLIC_KEY` e `MP_ACCESS_TOKEN` de produção | Por um canal seguro, nunca por grupo ou e-mail aberto. O dono pode digitar direto no servidor |
| `MP_WEBHOOK_SECRET` | Gerado no passo 6, no painel do Mercado Pago |

## 1. Requisitos
- Linux (Ubuntu 22.04 ou 24.04 de preferência), com acesso `sudo`.
- **Node.js 18 ou mais novo** (recomendado: 20 LTS). A loja usa o `fetch` nativo do Node.
- Nginx e Certbot.

```bash
# Node 20 (se ainda não tiver)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs nginx certbot python3-certbot-nginx unzip
node -v   # precisa mostrar v18 ou mais
```

## 2. Copiar e instalar
```bash
sudo mkdir -p /var/www && cd /var/www
sudo unzip ~/braga-mercadopago.zip      # cria /var/www/braga-mercadopago
sudo chown -R $USER:$USER braga-mercadopago
cd braga-mercadopago
npm install --omit=dev
```

## 3. Credenciais (.env)
```bash
cp .env.example .env
nano .env
chmod 600 .env
```
Preencha:
```
MP_PUBLIC_KEY=APP_USR-...          (Public Key de produção)
MP_ACCESS_TOKEN=APP_USR-...        (Access Token de produção – segredo)
MP_WEBHOOK_SECRET=                 (preencher no passo 6)
URL_PUBLICA=https://loja.bragajardinagem.com.br
PORT=3000
```
O `.env` nunca deve ir para Git, backup público ou mensagem.

## 4. Manter rodando com PM2
```bash
sudo npm install -g pm2
pm2 start server.js --name braga-loja
pm2 save
pm2 startup        # rode o comando que ele imprimir
curl -s http://127.0.0.1:3000/api/config   # deve responder {"publicKey":"APP_USR-..."}
```

## 5. Nginx + HTTPS
Crie `/etc/nginx/sites-available/braga-loja`:
```nginx
server {
    listen 80;
    server_name loja.bragajardinagem.com.br;

    client_max_body_size 1m;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```
```bash
sudo ln -s /etc/nginx/sites-available/braga-loja /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d loja.bragajardinagem.com.br     # gera o HTTPS e a renovação automática
```
Se houver firewall: `sudo ufw allow 'Nginx Full'`. A porta 3000 **não** precisa ficar aberta para fora.

## 6. Webhooks do Mercado Pago (aviso de Pix/boleto pagos)
1. No painel **Mercado Pago Developers > Suas integrações > (aplicação da Braga) > Webhooks > Configurar notificações**, no **modo produção**.
2. URL: `https://loja.bragajardinagem.com.br/api/webhooks`
3. Evento: **Order (Mercado Pago)**.
4. Salve e copie a **assinatura secreta** para `MP_WEBHOOK_SECRET` no `.env`.
5. `pm2 restart braga-loja`

O painel tem um botão para simular uma notificação. A resposta esperada é **200**.

## 7. Conferência final
- [ ] `https://loja.bragajardinagem.com.br` abre a loja com cadeado (HTTPS).
- [ ] No checkout, a etapa de pagamento **não** mostra o aviso "Demonstração". Se mostrar, o `/api/config` não está respondendo.
- [ ] Compra real de baixo valor no Pix (ex.: curso R$ 49,90). O QR code aparece e, depois de pago, a tela muda para "Pagamento aprovado".
- [ ] `pm2 logs braga-loja` mostra `Pedido BJ...: aprovado` quando o webhook chega.
- [ ] O pedido aparece em `data/pedidos.json`.

## Manutenção
| Tarefa | Comando |
|---|---|
| Ver logs | `pm2 logs braga-loja` |
| Reiniciar após mudar `.env` ou arquivos | `pm2 restart braga-loja` |
| Atualizar a loja | substituir os arquivos (mantendo `.env` e `data/`) e `npm install --omit=dev && pm2 restart braga-loja` |
| Backup dos pedidos | copiar `data/pedidos.json` regularmente |

## Mudar preços
Os preços ficam em **dois lugares** que devem ser iguais: `catalogo.js` (valor cobrado) e a lista `PRODUTOS` em `public/index.html` (valor exibido). Depois de mudar: `pm2 restart braga-loja`.

## Problemas comuns
| Sintoma | Causa provável |
|---|---|
| App não inicia: "Configure MP_ACCESS_TOKEN…" | `.env` ausente ou na pasta errada |
| Erro de pagamento "não aceitou" | Credenciais erradas, de teste misturada com produção, ou aplicação criada com API de Payments em vez de Orders |
| Webhook responde 401 | `MP_WEBHOOK_SECRET` diferente da assinatura do painel |
| Pix pago, mas a tela não muda | O servidor não alcança a API do Mercado Pago: libere saída HTTPS da VPS e veja `pm2 logs` |
