# MontaLoja - Sistema de Deploy Blue-Green

## 📋 Visão Geral

Este sistema implementa uma estratégia de **Blue-Green Deployment** com **Atomic Symlinks** para o MontaLoja SaaS. Ele permite:

- ✅ Deploy seguro sem downtime
- ✅ Teste da nova versão antes de ativar
- ✅ Rollback instantâneo em caso de problemas
- ✅ Backup automático do banco de dados
- ✅ Preservação de uploads e configurações entre versões

## 📁 Estrutura de Diretórios

Após a execução do primeiro deploy, a estrutura será:

\`\`\`
/home/socialar/montaloja.com/
├── current -> releases/release_20231207_123456   # Link simbólico para versão ativa
├── releases/                                      # Versões do código
│   ├── release_20231207_123456/
│   ├── release_20231206_101010/
│   └── ...
├── shared/                                        # Arquivos persistentes
│   ├── uploads/                                   # Imagens de produtos, heroes, logos
│   │   ├── products/
│   │   ├── heroes/
│   │   └── logos/
│   ├── storage/                                   # Cache, logs, sessions
│   │   ├── cache/
│   │   ├── logs/
│   │   └── sessions/
│   └── config.php                                 # Configuração do banco
├── backups/                                       # Backups do banco de dados
│   ├── db_backup_20231207_123456.sql.gz
│   └── db_critical_20231207_123456.sql.gz
└── deploy/                                        # Scripts de deploy
    ├── deploy.sh
    ├── rollback.sh
    └── README.md
\`\`\`

## 🚀 Como Usar

### Deploy de Nova Versão

\`\`\`bash
cd /home/socialar/montaloja.com/deploy
./deploy.sh
\`\`\`

O script irá:
1. Criar backup do banco de dados
2. Copiar código para nova pasta em /releases/
3. Criar symlinks para uploads e config
4. Verificar sintaxe PHP dos arquivos críticos
5. Pausar para você testar a nova versão
6. Após confirmação, ativar a nova versão

### Rollback (Reverter Versão)

#### Rollback Rápido (versão anterior)
\`\`\`bash
./rollback.sh --quick
\`\`\`

#### Rollback Interativo (escolher versão)
\`\`\`bash
./rollback.sh
\`\`\`

O menu permite:
1. Rollback rápido para versão anterior
2. Escolher uma versão específica
3. Restaurar backup do banco de dados
4. Listar todas as releases disponíveis

## 🔧 Configuração

### 1. Configurar Repositório Git (Opcional)

Edite o arquivo \`deploy.sh\` e preencha:

\`\`\`bash
GIT_REPO="git@github.com:seu-usuario/montaloja.git"
GIT_BRANCH="main"
\`\`\`

Se não configurar Git, o script copiará o código atual.

### 2. Configurar Apache/LiteSpeed para usar o link 'current'

#### Opção A - Alterar DocumentRoot no cPanel

1. Acesse cPanel > Domínios
2. Edite montaloja.com
3. Mude o DocumentRoot para: \`/home/socialar/montaloja.com/current\`

#### Opção B - Usar .htaccess (Recomendado para cPanel)

Crie/edite \`/home/socialar/montaloja.com/.htaccess\`:

\`\`\`apache
# Redireciona tudo para a pasta current
RewriteEngine On
RewriteBase /

# Se a requisição não for para current, redirecionar internamente
RewriteCond %{REQUEST_URI} !^/current/
RewriteCond %{REQUEST_URI} !^/deploy/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /current/$1 [L]

# Se for arquivo estático que existe em current, servir de lá
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/current%{REQUEST_URI} -f
RewriteRule ^(.*)$ /current/$1 [L]
\`\`\`

#### Opção C - Nginx (se aplicável)

\`\`\`nginx
server {
    listen 80;
    server_name montaloja.com www.montaloja.com;
    
    # Aponta para o symlink current
    root /home/socialar/montaloja.com/current;
    index index.php index.html;
    
    # Logs
    access_log /var/log/nginx/montaloja_access.log;
    error_log /var/log/nginx/montaloja_error.log;
    
    # Segurança - Bloquear acesso a arquivos sensíveis
    location ~ /\.(git|env|htaccess) {
        deny all;
    }
    
    location ~ ^/(deploy|releases|shared|backups)/ {
        deny all;
    }
    
    # PHP
    location ~ \.php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    # URLs amigáveis
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    # Cache para assets
    location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}
\`\`\`

## 🧪 Como Testar Antes de Ativar

Durante o deploy, o script pausa e mostra opções de teste:

### Opção 1: Subdomínio de Staging
1. No cPanel, crie um subdomínio: \`staging.montaloja.com\`
2. Aponte para a pasta da nova release mostrada no script
3. Teste acessando: \`https://staging.montaloja.com\`

### Opção 2: Link Temporário
\`\`\`bash
ln -s /home/socialar/montaloja.com/releases/release_XXXXX /home/socialar/montaloja.com/test
# Acesse: https://montaloja.com/test/
# Depois remova: rm /home/socialar/montaloja.com/test
\`\`\`

### Opção 3: Verificação via CLI
\`\`\`bash
# Verificar sintaxe PHP
php -l /home/socialar/montaloja.com/releases/release_XXXXX/pages/pedidos.php

# Testar conexão com banco
php -r "require '/home/socialar/montaloja.com/releases/release_XXXXX/includes/config.php'; echo 'DB OK';"
\`\`\`

## 📊 Checklist de Verificação

Antes de confirmar a ativação, verifique:

- [ ] Dashboard carrega sem erros
- [ ] Página de Pedidos funciona e lista pedidos
- [ ] Alterar status de pedido funciona
- [ ] Storefront (loja do cliente) abre
- [ ] Imagens de produtos aparecem
- [ ] Hero Banner exibe corretamente
- [ ] Login/Logout funcionam
- [ ] Carrinho de compras funciona

## 🔄 Fluxo do Deploy

\`\`\`
┌─────────────────┐
│  ./deploy.sh    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ Backup do Banco │ ──► /backups/db_backup_*.sql.gz
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  Criar Release  │ ──► /releases/release_20231207_123456/
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ Criar Symlinks  │ ──► uploads -> /shared/uploads
└────────┬────────┘      storage -> /shared/storage
         │               config.php -> /shared/config.php
         ▼
┌─────────────────┐
│ Verificar PHP   │ ──► Checa sintaxe dos arquivos críticos
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  MODO DE TESTE  │ ──► PAUSA - Você testa a nova versão
└────────┬────────┘
         │
         ▼ (após confirmação)
┌─────────────────┐
│ Atomic Swap     │ ──► current -> /releases/release_20231207_123456
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ Limpar Antigas  │ ──► Remove releases > 5 (mantém últimas 5)
└─────────────────┘
\`\`\`

## ⚠️ Importante: Uploads e Dados Persistentes

O sistema foi projetado para **NUNCA perder**:

- **Imagens de produtos** (\`/uploads/products/\`)
- **Banners Hero** (\`/uploads/heroes/\`)
- **Logos das lojas** (\`/uploads/logos/\`)
- **Configurações do banco** (\`config.php\`)

Esses arquivos ficam em \`/shared/\` e são **linkados** para cada nova release.

## 🆘 Em Caso de Emergência

### Site quebrou após deploy

\`\`\`bash
# Rollback imediato
cd /home/socialar/montaloja.com/deploy
./rollback.sh --quick
\`\`\`

### Banco de dados corrompido

\`\`\`bash
cd /home/socialar/montaloja.com/deploy
./rollback.sh
# Escolha opção 3: Restaurar backup do banco
\`\`\`

### Voltar para versão específica

\`\`\`bash
cd /home/socialar/montaloja.com/deploy
./rollback.sh
# Escolha opção 2: Escolher versão específica
\`\`\`

## 📝 Logs e Histórico

- Backups ficam em: \`/home/socialar/montaloja.com/backups/\`
- Últimas 5 releases são mantidas em: \`/home/socialar/montaloja.com/releases/\`
- Versão anterior é salva em: \`/home/socialar/montaloja.com/shared/.previous_release\`

## 🔐 Segurança

- Os scripts não expõem senhas em logs
- Backups são compactados com gzip
- Pastas \`/deploy/\`, \`/releases/\`, \`/shared/\`, \`/backups/\` devem ser protegidas no servidor web
- Use HTTPS em produção

---

**Autor:** DevOps Automation  
**Versão:** 1.0.0  
**Data:** Dezembro 2024
