# Guía de Despliegue en Producción: Servidor Debian + PostgreSQL 13 (Loha Inventario)

Esta guía documenta el procedimiento oficial paso a paso para desplegar y poner en marcha el sistema **Loha** en el servidor Debian de producción o staging.

---

## 1. Características y Requisitos del Servidor

* **Sistema Operativo:** Debian 11 (Bullseye) o Debian 12 (Bookworm).
* **Servidor Web:** Nginx.
* **PHP:** PHP 8.3 o 8.2 con extensiones FPM (`php-fpm`, `php-pgsql`, `php-bcmath`, `php-mbstring`, `php-xml`, `php-curl`, `php-zip`).
* **Base de Datos:** PostgreSQL 13.
* **Node.js en Servidor:** **NO REQUERIDO**. Toda la interfaz opera con Livewire + Tailwind CDN / Vanilla CSS.

---

## 2. Preparación de la Base de Datos en PostgreSQL 13

Conéctate como superusuario `postgres` en el servidor Debian:

```bash
sudo -u postgres psql
```

Ejecuta los siguientes comandos para crear la base de datos y otorgar permisos:

```sql
-- Crear base de datos
CREATE DATABASE db_brayham;

-- Crear usuario con contraseña segura (o usar el existente)
CREATE USER backup_procur WITH ENCRYPTED PASSWORD 'TuPasswordSeguro123$';

-- Otorgar privilegios completos
GRANT ALL PRIVILEGES ON DATABASE db_brayham TO backup_procur;
\c db_brayham
GRANT ALL ON SCHEMA public TO backup_procur;
ALTER SCHEMA public OWNER TO backup_procur;
\q
```

---

## 3. Despliegue del Código y Permisos

1. Ubica el proyecto en `/var/www/loha`:

```bash
sudo mkdir -p /var/www/loha
sudo chown -R $USER:www-data /var/www/loha
# Copiar o clonar repositorio en /var/www/loha
cd /var/www/loha
```

2. Configura el archivo `.env`:

```bash
cp .env.example .env
nano .env
```

Asegúrate de ajustar los parámetros de PostgreSQL 13:

```ini
APP_NAME=Loha
APP_ENV=production
APP_DEBUG=false
APP_URL=https://tu-dominio-o-ip.com

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=db_brayham
DB_USERNAME=backup_procur
DB_PASSWORD=TuPasswordSeguro123$

SESSION_DRIVER=database
QUEUE_CONNECTION=database
CACHE_STORE=database
```

3. Instala dependencias con Composer (solo PHP):

```bash
composer install --no-dev --optimize-autoloader
php artisan key:generate --force
```

4. Ajusta permisos para Nginx y PHP-FPM:

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

---

## 4. Ejecución de Migraciones y Datos Iniciales

Aplica las migraciones con sus restricciones para PostgreSQL 13 y orquesta la carga inicial del catálogo, depósitos y usuario administrador:

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

> [!TIP]
> Tras ejecutar el seeder, podrás iniciar sesión con las credenciales maestras:
> - **Usuario:** `admin@loha.com`
> - **Contraseña:** `admin123456`

---

## 5. Configuración de Nginx

Crea el archivo del sitio en `/etc/nginx/sites-available/loha`:

```nginx
server {
    listen 80;
    server_name tu-dominio-o-ip.com;
    root /var/www/loha/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;
    charset utf-8;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
```

Habilita el sitio y recarga Nginx:

```bash
sudo ln -s /etc/nginx/sites-available/loha /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```

---

## 6. Automatización de Cron Jobs y Respaldos

1. Configura el scheduler de Laravel en el crontab del usuario `www-data`:

```bash
sudo crontab -u www-data -e
```

Añade la siguiente línea:

```cron
* * * * * cd /var/www/loha && php artisan schedule:run >> /dev/null 2>&1
```

Esto ejecutará automáticamente:
- La sincronización de tasas de DolarApi dos veces al día (9:00 AM y 1:00 PM).
- El respaldo de base de datos diario a medianoche con depuración de copias mayores a 30 días.

2. Da permisos de ejecución al script bash de respaldo:

```bash
chmod +x /var/www/loha/scripts/backup_postgres.sh
```

---

## 7. Verificación del Despliegue

Ejecuta los siguientes comandos para certificar que todo opera correctamente:

```bash
# Sincronización manual de tasas de prueba
php artisan loha:rates:sync

# Prueba de respaldo de base de datos
php artisan loha:backup

# Optimización de caché de rutas y configuración
php artisan config:cache
php artisan route:cache
php artisan view:cache
```
