# 11 — Deploy e Ambiente

## Ambientes

| Ambiente | URL | Servidor | Banco |
|----------|-----|----------|-------|
| **Produção** | `http://157.245.10.199` | DigitalOcean Ubuntu VPS | MySQL no mesmo VPS |
| **Desenvolvimento Local** | `http://localhost` ou `http://192.168.x.x` | XAMPP 8.x no Windows | MySQL local |

---

## Servidor de Produção (DigitalOcean)

### Especificações
- **IP:** `157.245.10.199`
- **OS:** Ubuntu (DigitalOcean Droplet)
- **Web Server:** Apache
- **PHP:** 8.x
- **Webroot do App:** `/var/www/html/Antigravity/`
- **URL Webapp API:** `http://157.245.10.199/webapp/api/`

### Estrutura no Servidor
```
/var/www/html/Antigravity/
├── webapp/
│   ├── api/
│   │   ├── credentials/
│   │   │   └── gcs-key.json    ← NÃO está no Git
│   │   └── ...
│   ├── Parametros/
│   │   ├── dev/parametros.php
│   │   └── bpoconsig/parametros.php
│   └── vendor/                 ← composer install (PHP deps)
└── mobile-app/                 ← código fonte do app
```

### Script de Atualização do Servidor
`atualizar.sh` — Faz pull do Git e reinicia serviços:

```bash
#!/bin/bash
cd /var/www/html/Antigravity
git pull origin main
cd webapp/
php composer.phar install --no-dev
sudo service apache2 restart
```

---

## Ambiente Local (Windows + XAMPP)

### Configuração XAMPP

1. **Webroot:** `C:\xampp_8\htdocs\Antigravity\`
2. **PHP:** `C:\xampp_8\php\php.exe`
3. **Apache:** Porta 80 (standard)
4. **MySQL:** Porta 3306

### Como Rodar Localmente

```bash
# 1. Iniciar XAMPP (Apache + MySQL)
# 2. Acessar phpMyAdmin: http://localhost/phpmyadmin
# 3. Importar bancos de dados:
#    - antigravity_test.sql (BD do cliente dev)
#    - setup_multitenant.sql (BD master)
# 4. Configurar webapp/Parametros/dev/parametros.php

# 5. Para o mobile app (dev com dispositivo físico na mesma rede):
# Editar mobile-app/config.js:
export const API_URL = "http://192.168.0.100/antigravity/webapp/api";  # IP da sua máquina

# 6. Iniciar Expo:
cd mobile-app
npx expo start
```

---

## Mobile App — Build e Distribuição

### Desenvolvimento (Expo Go)

```bash
cd mobile-app
npx expo start
# Escanear QR Code com Expo Go (iOS/Android)
```

### Tunneling (caso rede não alcance o servidor)

```bash
# Requer ngrok 3.x instalado com autenticação
npx expo start --tunnel
```

### Build para Produção (EAS Build)

```bash
# Instalar EAS CLI
npm install -g eas-cli

# Login no Expo
eas login

# Configurar eas.json (profiles: development, preview, production)
eas build:configure

# Build iOS (requer conta Apple Developer)
eas build --platform ios --profile production

# Build Android (APK ou AAB)
eas build --platform android --profile production
```

> ⚠️ Para push notifications em produção, o `projectId` do Expo deve estar configurado em `app.json` na chave `extra.eas.projectId`.

---

## Variáveis de Configuração por Ambiente

### Backend (PHP)
Não usa variáveis de ambiente globais. Cada cliente tem seu `parametros.php`.

| Configuração | Local | Impacto |
|-------------|-------|---------|
| BD conexão | `webapp/Parametros/{cliente}/parametros.php` | Por cliente |
| Master DB | `webapp/api/master_db_config.php` | Global |
| GCS Key | `webapp/api/credentials/gcs-key.json` | Global |
| GCS Bucket | `webapp/api/gcs_config.php` (const GCS_BUCKET_NAME) | Global |

### Frontend Mobile
| Configuração | Local | Impacto |
|-------------|-------|---------|
| API Base URL | `mobile-app/config.js` | Global |
| Expo projectId | `mobile-app/app.json` | Necessário para Push |

---

## Dependências PHP (Composer)

```json
// webapp/composer.json
{
  "require": {
    "google/cloud-storage": "^1.x"
  }
}
```

```bash
# Instalar/atualizar
cd webapp/
php composer.phar install
# ou em produção:
php composer.phar install --no-dev --optimize-autoloader
```

---

## Banco de Dados — Setup Inicial

### antigravity_master (uma vez por instalação)
```bash
mysql -u root -p < setup_multitenant.sql
```

O arquivo `setup_multitenant.sql` cria:
- Tabela `clientes`
- Tabela `usuarios_globais`
- Tabela `usuario_cliente`

### BD por Cliente
```bash
mysql -u root -p < antigravity_test.sql
# Renomear para antigravity_{codigo} conforme necessário
```

### Tabelas de Notificação (por cliente)
```bash
# Via browser (servidor rodando):
http://157.245.10.199/webapp/api/migrate_notifications_db.php
```

---

## Logs e Debug

| Arquivo | Conteúdo |
|---------|----------|
| `webapp/api/debug_tenant.log` | Cada request: cliente, BD, endpoint, método |
| `webapp/api/debug_actions.txt` | Ações do `project_actions.php` (POST + FILES) |
| `webapp/api/debug_errors.txt` | Erros PHP dos endpoints de ações |
| `webapp/error_log` | Erro geral do Apache/PHP |

---

## Segurança

| Aspecto | Situação atual | Recomendação |
|---------|---------------|-------------|
| Autenticação de API | Sem JWT; usa `user_id` + `cliente` em cada request | Implementar JWT ou sessões server-side |
| CORS | `Access-Control-Allow-Origin: *` | Restringir para o domínio do app em produção |
| SQL Injection | `mysqli_real_escape_string` e `intval` | Migrar para PDO com prepared statements |
| GCS Key | Arquivo no diretório `api/` | Mover para fora do webroot |
| Senhas | MD5 (legado) | Migrar para bcrypt/Argon2 |
| HTTPS | HTTP puro em produção | Configurar SSL/TLS (Let's Encrypt) |
| `debug_*.php` | Arquivos de debug expostos | Remover em produção |

---

## Checklist de Deploy para Novo Ambiente

```
[ ] Clonar repositório Git
[ ] Configurar vhost Apache apontando para o projeto
[ ] Instalar Composer e rodar composer install
[ ] Criar banco antigravity_master e importar setup_multitenant.sql
[ ] Criar banco do cliente e importar antigravity_test.sql
[ ] Criar webapp/Parametros/{cliente}/parametros.php
[ ] Copiar gcs-key.json para webapp/api/credentials/ (nunca no Git!)
[ ] Registrar cliente em clientes table do master
[ ] Criar usuário admin inicial
[ ] Rodar migrate_notifications_db.php para criar tabelas de notificação
[ ] Configurar mobile-app/config.js com nova URL da API
[ ] Testar login, dashboard e upload de arquivo
```
