# SETUP — Plataforma ONG
## VPS Hostgator | PHP 8.2 | MySQL 8.0 | Nginx
## Subdomínio: http://ong.ybycomunicacao.com.br

---

## 1. Pré-requisitos na VPS

Verificar extensões PHP necessárias:

```bash
php -m | grep -E "gd|intl|mbstring|xml|zip|pdo_mysql|opcache|fileinfo"
```

Se faltar alguma (exemplo no Ubuntu/Debian):

```bash
sudo apt install php8.2-gd php8.2-intl php8.2-mbstring php8.2-xml php8.2-zip php8.2-mysql
sudo systemctl restart php8.2-fpm
```

---

## 2. Upload dos arquivos

Faça upload de todo o projeto para a VPS (exceto `/vendor`):

```bash
# Via rsync (recomendado)
rsync -avz --exclude=vendor --exclude=.env \
  ./ usuario@servidor:/var/www/ong-plataforma/

# Via Git (alternativa)
ssh usuario@servidor
cd /var/www/ong-plataforma
git clone https://github.com/seu-repo/ong-plataforma.git .
```

---

## 3. Instalar dependências

```bash
cd /var/www/ong-plataforma
composer install --no-dev --optimize-autoloader
```

---

## 4. Configurar ambiente

```bash
cp .env.example .env
nano .env   # edite as variáveis abaixo
```

Variáveis obrigatórias:

```env
APP_URL=http://ong.ybycomunicacao.com.br
APP_KEY=          # será gerado no próximo passo

DB_HOST=127.0.0.1
DB_DATABASE=ybycom79_ong
DB_USERNAME=ybycom79_ong_admin
DB_PASSWORD=0nGadmin2026
```

Gerar chave da aplicação:

```bash
php artisan key:generate
```

---

## 5. Banco de dados

Criar banco no MySQL:

```sql
-- Banco já criado pela Hostgator — apenas confirme o charset:
ALTER DATABASE ybycom79_ong
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;
```

Executar migrations e seeders:

```bash
php artisan migrate
php artisan db:seed
```

---

## 6. Permissões de pastas

```bash
sudo chown -R www-data:www-data /var/www/ong-plataforma
sudo chmod -R 755 /var/www/ong-plataforma
sudo chmod -R 775 /var/www/ong-plataforma/storage
sudo chmod -R 775 /var/www/ong-plataforma/bootstrap/cache
```

---

## 7. Link do storage público

```bash
php artisan storage:link
```

---

## 8. Configurar Nginx

Arquivo: `/etc/nginx/sites-available/ong.ybycomunicacao.com.br`

```nginx
server {
    listen 80;
    server_name ong.ybycomunicacao.com.br;
    root /var/www/ong-plataforma/public;
    index index.php;

    # Headers de segurança
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";
    add_header Referrer-Policy "strict-origin-when-cross-origin";

    # Roteamento Laravel
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # PHP-FPM
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    # Cache de assets estáticos (1 ano)
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|webp)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        access_log off;
    }

    # Service Worker (sem cache — precisa sempre atualizar)
    location = /sw.js {
        add_header Cache-Control "no-store, no-cache, must-revalidate";
        expires 0;
    }

    # Manifest PWA (cache curto)
    location = /manifest.json {
        add_header Cache-Control "public, max-age=3600";
    }

    # Bloquear arquivos ocultos
    location ~ /\.(?!well-known).* {
        deny all;
    }

    # Limite de upload (fotos de beneficiários)
    client_max_body_size 10M;
}
```

Ativar o site:

```bash
sudo ln -s /etc/nginx/sites-available/ong.ybycomunicacao.com.br \
           /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```

---

## 9. Otimizar para produção

```bash
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan permission:cache-reset
```

---

## 10. PHP — Configurações recomendadas

Editar `/etc/php/8.2/fpm/php.ini`:

```ini
; Memória
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 10M
post_max_size = 12M

; OPcache (performance)
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 2
opcache.save_comments = 1

; Timezone
date.timezone = America/Sao_Paulo
```

Reiniciar PHP-FPM:

```bash
sudo systemctl restart php8.2-fpm
```

---

## 11. MySQL — Configurações recomendadas

Editar `/etc/mysql/mysql.conf.d/mysqld.cnf`:

```ini
[mysqld]
innodb_buffer_pool_size = 512M   # ajuste para ~70% da RAM disponível
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 2
query_cache_type = 0
max_connections = 100
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
```

```bash
sudo systemctl restart mysql
```

---

## 12. Rotação de logs

Criar `/etc/logrotate.d/ong-plataforma`:

```
/var/www/ong-plataforma/storage/logs/*.log {
    daily
    missingok
    rotate 14
    compress
    notifempty
    create 0640 www-data www-data
    sharedscripts
}
```

---

## 13. Credenciais de acesso após setup

| Perfil      | E-mail                                      | Senha     |
|-------------|---------------------------------------------|-----------|
| super_admin | super@yby.dev                               | senha@123 |
| admin       | admin@institutoitapoa.org.br                | senha@123 |
| gestor      | maria.gestora@institutoitapoa.org.br        | senha@123 |
| tecnico     | ana.tecnica@institutoitapoa.org.br          | senha@123 |
| educador    | joao.educador@institutoitapoa.org.br        | senha@123 |

> **Altere todas as senhas imediatamente após o primeiro login em produção.**

---

## 14. Tailwind CSS sem Node (produção)

O projeto usa Tailwind via CDN para simplificar o deploy.
Para gerar um CSS otimizado sem Node:

```bash
# Baixar o Tailwind CLI standalone (binário único, sem Node)
curl -sLO https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-linux-x64
chmod +x tailwindcss-linux-x64
mv tailwindcss-linux-x64 /usr/local/bin/tailwindcss

# Gerar CSS otimizado para produção
tailwindcss -i resources/css/app.css -o public/css/app.css --minify
```

Após gerar, troque o link CDN no `layouts/app.blade.php` pelo arquivo local:
```html
<!-- de: -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- para: -->
<link rel="stylesheet" href="{{ asset('css/app.css') }}">
```

---

*Plataforma ONG — Yby Comunicação e Marketing*
*PHP 8.2 + Laravel 11 + MySQL 8.0 | VPS Hostgator*
