# 🚀 Guía de Despliegue de Producción — Backend (`arsistema_erp_back`)

Esta guía detalla los pasos para desplegar el backend Laravel 11 en un servidor de producción utilizando **Docker Containers** o un servidor **Ubuntu/Debian con Nginx y PHP-FPM**.

---

## 🛠️ Opción A: Despliegue con Docker & Docker Compose (Recomendado)

### 1. Requisitos Previos
- Docker Engine $\ge 24.0$
- Docker Compose v2 $\ge 2.20$

### 2. Estructura de Contenedores
El archivo `docker-compose.yml` incluye:
- **`app`**: Servidor PHP 8.4-FPM con extensiones optimizadas y script de migración automática al arrancar.
- **`web`**: Servidor Nginx exponiendo el puerto 8000/80.
- **`db`**: Servidor MySQL 8.4 con volumen persistente.
- **`redis`**: Servidor Redis 7 para caché y sesiones.

### 3. Pasos para Levantar los Contenedores
```bash
# 1. Clonar el repositorio y entrar a la carpeta
cd /mnt/98F8B311F8B2EC9E/other_projects/arsistema_erp_back

# 2. Configurar variables de entorno de producción
cp .env.example .env

# 3. Editar variables en .env (DB_HOST=db, DB_DATABASE=erp_db, DB_USERNAME=erp_user, DB_PASSWORD=...)
nano .env

# 4. Construir y levantar servicios en segundo plano
docker compose up -d --build

# 5. Verificar que las migraciones se hayan ejecutado
docker compose logs app
```

---

## 💻 Opción B: Despliegue Tradicional (Servidor Linux Nginx + PHP 8.4-FPM)

### 1. Requisitos del Servidor
- Ubuntu 22.04 LTS / 24.04 LTS
- PHP 8.4 FPM (`php8.4-cli`, `php8.4-fpm`, `php8.4-mysql`, `php8.4-mbstring`, `php8.4-xml`, `php8.4-bcmath`, `php8.4-curl`, `php8.4-intl`, `php8.4-zip`)
- Nginx Web Server
- MySQL 8.0+ / MariaDB 10.6+

### 2. Pasos de Instalación

```bash
# 1. Navegar al directorio del proyecto
cd /mnt/98F8B311F8B2EC9E/other_projects/arsistema_erp_back

# 2. Dar permisos de ejecución al script de despliegue
chmod +x deploy.sh

# 3. Ejecutar el despliegue y las migraciones automáticas
./deploy.sh
```

### 3. Configuración de Nginx para Laravel SPA (`/etc/nginx/sites-available/arsistema-erp-back`)

```nginx
server {
    listen 80;
    server_name api.arsistema.com; # O la IP / subdominio de tu servidor

    root /mnt/98F8B311F8B2EC9E/other_projects/arsistema_erp_back/public;
    index index.php index.html;

    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.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

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

---

## 🗄️ Ejecutar Migraciones de Forma Manual

Si deseas ejecutar o revertir migraciones de base de datos manualmente en producción:

```bash
# Con Docker:
docker compose exec app php artisan migrate --force

# Con datos iniciales de prueba / semillas:
docker compose exec app php artisan db:seed --force

# Servidor Tradicional:
php artisan migrate --force
```
