# LogiDash — Deploy Ubuntu (logicahn.com)

## Arquitectura

| Sitio | Dominio | Qué sirve |
|-------|---------|-----------|
| Dashboard | `https://dash.logicahn.com` | Carpeta estática `dashboard/dist/` |
| App móvil (web) | `https://app.logicahn.com` | Carpeta estática `mobile/www/` |
| API Laravel | `https://api.logicahn.com` | `backend/laravel-api/public/` |
| MySQL | `ferby-dbserver` | BD `logica_combustible` |

---

## 1. Estructura en el servidor Ubuntu

```text
/var/www/logicahn/
├── api/                 ← código Laravel (laravel-api)
│   └── public/          ← document root de api.logicahn.com
├── uploads/             ← fotos de órdenes (escribible por PHP)
├── dash/                ← contenido de dashboard/dist/
└── app/                 ← contenido de mobile/www/
```

---

## 2. Deploy con GitHub (tu caso)

### Qué va en el `git push`

| Sí en GitHub | No en GitHub (gitignore) |
|--------------|-------------------------|
| Código fuente | `node_modules/`, `vendor/` |
| **`dashboard/dist/`** (build prod) | `backend/laravel-api/.env` |
| **`mobile/www/`** (build prod) | Fotos en `uploads/` |
| `deploy/`, nginx, `.env.example` | `mobile/platforms/`, `plugins/` |

Tras cambiar código frontend, vuelve a compilar y commitea `dist/` y `www/`:

```bash
deploy\build-all.bat
git add dashboard/dist mobile/www
git commit -m "build: producción"
git push
```

### Paso A — En tu PC (antes o después del push)

```bash
# Opción rápida Windows:
deploy\build-all.bat

# O manual:
cd dashboard && npm ci && npm run build:prod
cd ../mobile && npm ci && npm run build:prod
```

Builds verificados OK → carpetas:
- `dashboard/dist/`
- `mobile/www/`

### Paso B — En Ubuntu (git pull trae los builds)

```bash
cd /var/www/logicahn-src
git pull

# Copiar o enlazar estáticos al web root
rsync -a --delete dashboard/dist/ /var/www/logicahn/dash/
rsync -a --delete mobile/www/     /var/www/logicahn/app/
```

### Paso C — API en Ubuntu

```bash
cd /var/www/logicahn-src   # donde hiciste git clone
git pull

cd backend/laravel-api
composer install --no-dev --optimize-autoloader
# .env solo la primera vez (ver sección 3)
php artisan config:cache
php artisan route:cache
```

O usa el script: `bash deploy/server-deploy.sh /var/www/logicahn-src`

### Alternativa: compilar en el servidor

Si instalas Node 20 en Ubuntu, `server-deploy.sh` también corre `npm run build:prod` y copia a `/var/www/logicahn/dash/` y `app/`.

---

## 2b. Compilar antes de cada push con cambios en UI

```bash
deploy\build-all.bat
git add dashboard/dist mobile/www
git commit -m "build: producción"
git push
```

### Dashboard
```bash
cd dashboard
npm ci
npm run build:prod
```
**Salida:** `dashboard/dist/` → subir todo su contenido a `/var/www/logicahn/dash/`

### App móvil (PWA web en app.logicahn.com)
```bash
cd mobile
npm ci
npm run build:prod
```
**Salida:** `mobile/www/` → subir todo su contenido a `/var/www/logicahn/app/`

> Para **APK Android** (Cordova): `ionic cordova build android --configuration production`  
> El APK ya usará `https://api.logicahn.com/api` automáticamente.

### API (no hay “dist”, es PHP)
```bash
cd backend/laravel-api
composer install --no-dev --optimize-autoloader
php artisan config:cache
php artisan route:cache
```

Subir todo `laravel-api/` a `/var/www/logicahn/api/` (sin `node_modules`).

---

## 3. `.env` de Laravel en el servidor

Copiar en `/var/www/logicahn/api/.env` (no subir a git):

```env
APP_NAME=LogiDash
APP_ENV=production
APP_KEY=base64:...generar con php artisan key:generate...
APP_DEBUG=false
APP_URL=https://api.logicahn.com

DB_CONNECTION=mysql
DB_HOST=ferby-dbserver
DB_PORT=3306
DB_DATABASE=logica_combustible
DB_USERNAME=logica
DB_PASSWORD=TU_PASSWORD_AQUI

SESSION_DRIVER=file
CACHE_STORE=file
QUEUE_CONNECTION=sync

UPLOAD_PATH=/var/www/logicahn/uploads
CORS_ALLOWED_ORIGINS=https://dash.logicahn.com,https://app.logicahn.com
```

```bash
cd /var/www/logicahn/api
php artisan key:generate
php artisan config:cache
php artisan route:cache
```

Verifica el usuario MySQL exacto (`logica` vs `lógica`) en el panel del hosting.

---

## 4. Permisos

```bash
sudo mkdir -p /var/www/logicahn/uploads
sudo chown -R www-data:www-data /var/www/logicahn
sudo chmod -R 775 /var/www/logicahn/uploads
sudo chmod -R 775 /var/www/logicahn/api/storage
sudo chmod -R 775 /var/www/logicahn/api/bootstrap/cache
```

---

## 5. Nginx

Copiar los archivos de `deploy/nginx/` a `/etc/nginx/sites-available/` y activar:

```bash
sudo ln -s /etc/nginx/sites-available/logicahn-api.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/logicahn-dash.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/logicahn-app.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
```

### SSL (Let's Encrypt)
```bash
sudo certbot --nginx -d api.logicahn.com -d dash.logicahn.com -d app.logicahn.com
```

---

## 6. DNS

Crear registros **A** (o CNAME) apuntando al IP del Ubuntu:

- `api.logicahn.com`
- `dash.logicahn.com`
- `app.logicahn.com`

---

## 7. Probar

```bash
curl https://api.logicahn.com/api/health
```

En el navegador:
- `https://dash.logicahn.com` — login dashboard
- `https://app.logicahn.com` — login app móvil

---

## 8. Base de datos

Importar esquema/datos en `ferby-dbserver`:

```bash
mysql -h ferby-dbserver -u logica -p logica_combustible < database/dummydata.sql
```

(Solo si es instalación nueva; en producción con datos reales, no vaciar tablas.)

---

## 9. Actualizar después del primer deploy

```bash
# En PC: compilar
cd dashboard && npm run build:prod
cd ../mobile && npm run build:prod

# Subir dist/ y www/ al servidor (rsync, scp, FTP…)

# En servidor API si cambió PHP:
cd /var/www/logicahn/api
composer install --no-dev --optimize-autoloader
php artisan config:cache
php artisan route:cache
```

---

## Variables ya configuradas en el código

| Componente | Producción |
|------------|------------|
| Dashboard | `dashboard/.env.production` → `VITE_API_URL=https://api.logicahn.com/api` |
| Mobile web/APK | `environment.prod.ts` → mismo API al hacer `build:prod` |
| Laravel CORS | `CORS_ALLOWED_ORIGINS` en `.env` |

Si la API queda en otra URL, cambia `VITE_API_URL` en `dashboard/.env.production` antes del build y las URLs en `mobile/src/environments/app-mode.ts` → `prod`.
