# Despliegue en cPanel / VPS

## 1. Estructura recomendada

- Repositorio / app Laravel:
  `/home/CPANEL_USER/apps/domain-seller`
- DocumentRoot del subdominio admin:
  `/home/CPANEL_USER/apps/domain-seller/public`
- DocumentRoot de cada dominio de venta:
  `/home/CPANEL_USER/apps/domain-seller/public`

No apuntes ningún dominio a la raíz del proyecto. Todos deben apuntar a `public/`.

## 2. Dominio del panel

Para el panel usa:

- `domain.tecwi.co` -> DocumentRoot `.../domain-seller/public`

La ruta de login será:

- `https://domain.tecwi.co/admin/login`

## 3. Variables de entorno

1. Copia `.env.production.example` a `.env`
2. Ajusta como mínimo:

- `APP_URL=https://domain.tecwi.co`
- `DB_*`
- `MAIL_*`
- `DOMAIN_SELLER_NOTIFICATION_EMAIL`
- `DOMAIN_SELLER_COMPANY_*`

Valores recomendados:

- `APP_ENV=production`
- `APP_DEBUG=false`
- `FILESYSTEM_DISK=public`
- `SESSION_DRIVER=database`
- `CACHE_STORE=database`
- `QUEUE_CONNECTION=database`

## 4. Primer despliegue por terminal

Desde Terminal de cPanel o por SSH:

```bash
cd /home/CPANEL_USER/apps/domain-seller
cp .env.production.example .env
nano .env
bash scripts/deploy-production.sh
```

El script hace esto:

- instala dependencias Composer sin `dev`
- genera `APP_KEY` si falta
- limpia cachés
- crea `public/storage`
- ejecuta `php artisan migrate --force`
- instala dependencias frontend
- ejecuta el build de Vite
- cachea config/rutas/vistas

## 5. Comandos manuales equivalentes

Si prefieres correrlos uno por uno:

```bash
composer install --no-dev --prefer-dist --optimize-autoloader
php artisan key:generate --force
php artisan optimize:clear
php artisan storage:link
php artisan migrate --force
yarn install
yarn build
php artisan optimize
```

Si no tienes `yarn`, usa:

```bash
npm ci --ignore-scripts
npm run build
```

## 6. Desarrollo local de assets

Para desarrollo:

```bash
yarn install
yarn dev
```

El script `yarn dev` ahora expone Vite en `0.0.0.0:5173`.

En producción no debes correr `yarn dev`. En producción solo necesitas `yarn build` y los archivos resultantes en `public/build`.

## 7. Organización de dominios para las landings

La app resuelve la landing por el `Host` de la petición.

Qué debes hacer:

1. Crear el dominio en el registrador y apuntarlo al IP del VPS.
2. En cPanel, crear el dominio o subdominio y hacer que su DocumentRoot sea el mismo `public/` del proyecto.
3. En el admin, crear el registro del dominio exactamente como quieres venderlo.

Ejemplos:

- `gigistore.es`
- `midominio.com`
- `startup.ai`

La app ya contempla `www`. Si guardas `gigistore.es`, también resolverá visitas que lleguen por `www.gigistore.es`.

## 8. DNS recomendado

Para cada dominio:

- registro `A` del dominio raíz -> IP pública del VPS
- registro `CNAME` de `www` -> dominio raíz

Para el admin:

- registro `A` o `CNAME` de `domain.tecwi.co` -> VPS

## 9. Qué dominios deben apuntar a la misma carpeta

Todos estos pueden compartir el mismo DocumentRoot:

- `domain.tecwi.co`
- `gigistore.es`
- `www.gigistore.es`
- cualquier otro dominio en venta

Todos deben apuntar al mismo `public/`. La app decide qué contenido mostrar según el host:

- si entras por `/admin`, ves el panel
- si entras por `/`, ves la landing del dominio correspondiente

## 10. Checklist final

- el dominio/subdominio apunta a `public/`
- `.env` está en modo producción
- `php artisan migrate --force` se ejecutó
- `public/storage` existe
- `public/build` existe después de `yarn build`
- `storage/` y `bootstrap/cache/` tienen permisos de escritura
- el admin responde en `https://domain.tecwi.co/admin/login`

