# 🚀 Configuração de Deploy Automático - WayGest Gestão

## 📋 Visão Geral

Este documento descreve a configuração do deploy automático usando GitLab CI/CD com 3 branches principais e deploy via FTP.

## 🌳 Estrutura de Branches

### 1. **STAGE** (`stage`)
- **Propósito**: Mesclagem de branches de desenvolvimento
- **Deploy**: Apenas compilação e testes (sem deploy FTP)
- **URL**: https://stage.gestao.waygest.com.br
- **Comportamento**: Resolve conflitos antes de subir para homologação

### 2. **HOMOLOGAÇÃO** (`homologacao`)
- **Propósito**: Ambiente de testes e validação
- **Deploy**: Automático via FTP
- **URL**: https://homologacao.gestao.waygest.com.br
- **Pasta FTP**: `/homologacao.gestao.waygest.com.br`
- **Arquivo .env**: `.env.homologacao`

### 3. **MAIN** (`main`)
- **Propósito**: Ambiente de produção
- **Deploy**: Manual via FTP
- **URL**: https://gestao.waygest.com.br
- **Pasta FTP**: `/gestao.waygest.com.br`
- **Arquivo .env**: `.env` (produção)

## ⚙️ Configuração do GitLab CI/CD

### Variáveis de Ambiente Necessárias

Configure as seguintes variáveis no GitLab (Settings > CI/CD > Variables):

```bash
# Configurações FTP (valores reais apenas em GitLab CI/CD — variáveis mascaradas)
FTP_HOST=ftp.exemplo.waygest.com.br
FTP_PORT=21
FTP_USER=ftp_deploy
FTP_PASSWORD=<definir_em_gitlab_ci_variables>

# Configurações de Notificação (opcional)
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK
```

**Nota**: As credenciais de banco de dados são gerenciadas diretamente nos arquivos `.env` do projeto Laravel, não sendo necessárias variáveis adicionais no GitLab CI/CD.

### Pipeline Stages

1. **TEST**: Executa testes PHP e JavaScript
2. **BUILD**: Compila assets (CSS/JS)
3. **DEPLOY**: Deploy para o ambiente correspondente

## 📁 Arquivos de Configuração

### 1. Criar `.env.homologacao`

```bash
# Copie o template e configure
cp env.homologacao.example .env.homologacao
```

**Configurações principais para homologação:**
- `APP_ENV=homologacao`
- `APP_DEBUG=true`
- `APP_URL=https://homologacao.gestao.waygest.com.br`
- `DB_HOST=localhost`
- `DB_DATABASE=waygest_gestao_homologacao`
- `DB_USERNAME=waygest_gestao_homologacao`
- `DB_PASSWORD=<secret_homologacao>`
- `GESTAO_DOMAIN_BASE=homologacao.gestao.waygest.com.br`

### 2. Configurar `.env` (Produção)

```bash
# Copie o template e configure
cp env.production.example .env
```

**Configurações principais para produção:**
- `APP_ENV=production`
- `APP_DEBUG=false`
- `APP_URL=https://gestao.waygest.com.br`
- `DB_HOST=localhost`
- `DB_DATABASE=waygest_gestao`
- `DB_USERNAME=waygest_gestao`
- `DB_PASSWORD=<secret_producao>`
- `GESTAO_DOMAIN_BASE=gestao.waygest.com.br`

## 🔧 Configuração do Servidor FTP

### Estrutura de Pastas no Servidor

```
/
├── gestao.waygest.com.br/          # Produção
│   ├── app/
│   ├── public/
│   ├── storage/
│   └── ...
└── homologacao.gestao.waygest.com.br/  # Homologação
    ├── app/
    ├── public/
    ├── storage/
    └── ...
```

### Permissões Necessárias

```bash
# Dar permissões corretas
chmod -R 755 /gestao.waygest.com.br
chmod -R 755 /homologacao.gestao.waygest.com.br
chown -R www-data:www-data /gestao.waygest.com.br
chown -R www-data:www-data /homologacao.gestao.waygest.com.br
```

## 🚀 Fluxo de Deploy

### 1. Desenvolvimento → Stage

```bash
# Criar branch de feature
git checkout -b feature/nova-funcionalidade

# Fazer commits
git add .
git commit -m "feat: nova funcionalidade"

# Push para o repositório
git push origin feature/nova-funcionalidade

# Criar Merge Request para STAGE
# Após aprovação, merge para STAGE
```

### 2. Stage → Homologação

```bash
# Merge STAGE para HOMOLOGAÇÃO
git checkout homologacao
git merge stage
git push origin homologacao

# Deploy automático será executado
```

### 3. Homologação → Produção

```bash
# Após testes em homologação, merge para MAIN
git checkout main
git merge homologacao
git push origin main

# Deploy manual será executado (quando: manual)
```

## 📊 Monitoramento

### Logs de Deploy

- **GitLab CI/CD**: Pipeline logs no GitLab
- **Servidor**: Logs do Laravel em `storage/logs/`
- **FTP**: Logs de upload via lftp

### Notificações

- **Slack**: Notificações de deploy (se configurado)
- **Email**: Alertas de erro (se configurado)

## 🔍 Troubleshooting

### Problemas Comuns

#### 1. Erro de Conexão FTP
```bash
# Verificar credenciais
# Verificar se o servidor FTP está online
# Verificar firewall/portas
```

#### 2. Erro de Permissões
```bash
# Verificar permissões das pastas
chmod -R 755 /caminho/da/pasta
chown -R www-data:www-data /caminho/da/pasta
```

#### 3. Erro de .env
```bash
# Verificar se o arquivo .env correto está sendo usado
# Verificar se as variáveis estão configuradas
```

#### 4. Erro de Cache
```bash
# Limpar cache do Laravel
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
```

## 📝 Checklist de Deploy

### Antes do Deploy

- [ ] Testes passando localmente
- [ ] Branch atualizada com main
- [ ] Arquivo .env configurado corretamente
- [ ] Variáveis de ambiente configuradas no GitLab
- [ ] Servidor FTP acessível

### Durante o Deploy

- [ ] Pipeline executando sem erros
- [ ] Upload FTP concluído
- [ ] Arquivos copiados corretamente
- [ ] Permissões configuradas

### Após o Deploy

- [ ] Site acessível
- [ ] Funcionalidades testadas
- [ ] Logs verificados
- [ ] Notificações enviadas

## 🔐 Segurança

### Boas Práticas

1. **Nunca commitar senhas** no código
2. **Usar variáveis de ambiente** para credenciais
3. **Configurar HTTPS** em produção
4. **Manter backups** regulares
5. **Monitorar logs** de acesso

### Configurações de Segurança

```bash
# Produção
APP_DEBUG=false
SESSION_SECURE_COOKIE=true
SESSION_SAME_SITE=strict

# Homologação
APP_DEBUG=true
SESSION_SECURE_COOKIE=false
SESSION_SAME_SITE=lax
```

## 📞 Suporte

Para problemas ou dúvidas:

1. Verificar logs do GitLab CI/CD
2. Verificar logs do servidor
3. Verificar configurações de ambiente
4. Contatar administrador do sistema

---

**Versão**: 1.0  
**Data**: Janeiro 2025  
**Projeto**: WayGest Gestão - Sistema de Gerenciamento de Instalações
