# Despliegue en cPanel

## 1. Raiz del dominio

La opcion recomendada es apuntar el document root del dominio a:

```text
public_html/public
```

Si cPanel no permite cambiar el document root, sube todo el proyecto a `public_html/`.
El archivo `.htaccess` de la raiz ya redirige las peticiones hacia `public/`.

## 2. Permisos

Deja escribibles estas carpetas:

```text
writable/
writable/cache/
writable/logs/
writable/session/
writable/uploads/
```

En hosting compartido normalmente funciona con carpetas `755` y archivos `644`.
Evita `777` salvo que soporte lo pida expresamente.

Si descomprimes un ZIP y cPanel deja permisos `700` en carpetas o `600` en
archivos, corrige todo desde Terminal de cPanel:

```bash
cd ~/public_html
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod -R 755 writable
```

No es necesario cambiar carpeta por carpeta.

## 2.1. `.htaccess` en la raiz

Si el dominio apunta a `public_html/` y no directamente a `public_html/public/`,
el `.htaccess` de la raiz debe evitar reescribir de nuevo lo que ya esta dentro
de `public/`:

```apache
<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
```

Sin la linea `RewriteCond`, Apache puede entrar en un bucle tipo
`public/public/public/...` y terminar en error 500.

## 3. Archivo `.env` de produccion

El `.env` debe estar en la raiz del proyecto, al mismo nivel que `spark`, `app/`,
`public/` y `writable/`.

Ejemplo:

```dotenv
CI_ENVIRONMENT = production

app.baseURL = 'https://dume.vividgraphics.com.mx/'

database.default.hostname = localhost
database.default.database = nbmswszj_cotizaciones_dume
database.default.username = nbmswszj_cotizaciones_dume
database.default.password = 'CAMBIA_ESTA_CONTRASENA'
database.default.DBDriver = MySQLi
database.default.DBPrefix =
database.default.port = 3306
database.default.charset = utf8mb4
database.default.DBCollat = utf8mb4_general_ci

AUTH_ADMIN_EMAIL = admin@tmmedina.com
AUTH_ADMIN_PASSWORD = 'CAMBIA_ESTA_CONTRASENA'

BRANDING_PIN = 2468
```

Importante: si la contrasena de MySQL contiene simbolos como `$`, `{`, `}`, `,`,
`#` o espacios, ponla entre comillas simples.

## 4. Crear tablas y usuario administrador

Despues de subir archivos y configurar `.env`, ejecuta desde Terminal de cPanel:

```bash
cd ~/public_html
php spark migrate
php spark db:seed AdminSeeder
```

Si instalaste el proyecto en otra carpeta, entra a esa carpeta antes de ejecutar
los comandos.

El error local encontrado fue:

```text
Table 'dume_cotizaciones.users' doesn't exist
```

Eso se corrige ejecutando las migraciones en la base correcta.

## 5. Si sigue saliendo error 500

Revisa estos archivos en el servidor:

```text
writable/logs/
error_log
public/error_log
```

Si `writable/logs/` no genera archivos, el 500 esta ocurriendo antes de
CodeIgniter, normalmente por `.htaccess`, version de PHP, permisos o extension
PHP faltante.

Requisitos:

- PHP 8.2 o superior
- Extensiones `intl`, `gd`, `mbstring`, `mysqli`
- Composer dependencies subidas en `vendor/` o instaladas con `composer install --no-dev`
