# 🚀 INSTALACIÓN RÁPIDA EN VPS - RESUMEN EJECUTIVO

## 📋 Método de Instalación

### Paso 1: Subir el archivo al VPS

```bash
scp InstallAPIDocker.sh root@TU_IP_VPS:/root/
```

**⚠️ Si el VPS fue reformateado y obtienes error de verificación de host:**

```bash
# Windows PowerShell/Git Bash:
ssh-keygen -R TU_IP_VPS

# Ejemplo:
ssh-keygen -R 37.60.245.73

# Luego vuelve a ejecutar el scp
scp InstallAPIDocker.sh root@TU_IP_VPS:/root/
```

### Paso 2: Conectarse al VPS

```bash
ssh root@TU_IP_VPS
```

### Paso 3: Ejecutar el script

```bash
cd /root
chmod +x InstallAPIDocker.sh
sudo bash InstallAPIDocker.sh tu-dominio.com
```

### Paso 4: Responder preguntas

- **Puerto MySQL:** `3306` (o presiona Enter)
- **Subdominio:** `api` (o presiona Enter)
- **SSL:** `s` para sí, `n` para no

---

## 📦 ¿QUÉ ARCHIVOS NECESITO?

### Solo 1 archivo:

- **`InstallAPIDocker.sh`** (script de instalación)

### No necesitas llevar:

- ❌ Código de la aplicación (se clona automáticamente)
- ❌ Composer (se instala automáticamente)
- ❌ Docker (se instala automáticamente)
- ❌ Base de datos (se crea automáticamente)
- ❌ Certificados SSL (se generan automáticamente)

---

## 🎯 REQUISITOS MÍNIMOS DEL VPS

| Componente | Mínimo | Recomendado |
|------------|--------|-------------|
| RAM | 2 GB | 4 GB |
| CPU | 1 Core | 2 Cores |
| Disco | 20 GB | 40 GB |
| OS | Ubuntu 22.04+ | Ubuntu 24.04 |
| Red | 100 Mbps | 1 Gbps |

**Nota:** El script instala automáticamente:
- Docker CE (versión más reciente)
- Docker Compose v2.24.0 (compatible con Ubuntu 24.04)

---

## ⏱️ TIEMPOS DE INSTALACIÓN

| Fase | Tiempo Aproximado |
|------|------------------|
| Instalación de Docker | 2-3 minutos |
| Clonación del repositorio | 1-2 minutos |
| Construcción de imagen PHP 8 | 5-8 minutos |
| Instalación de dependencias | 2-4 minutos |
| Migraciones de base de datos | 1-2 minutos |
| **TOTAL** | **12-20 minutos** |

---

## 🔐 CREDENCIALES GENERADAS

Al finalizar, las credenciales se guardan en:

```
/root/setup/private.txt
```

Para verlas:

```bash
cat /root/setup/private.txt
```

---

## ✅ VERIFICAR INSTALACIÓN

### 1. Ver contenedores en ejecución:

```bash
docker ps
```

Debes ver 4 contenedores:
- `root_proxy_1` - Nginx Proxy
- `root_nginx_api_1` - Nginx
- `root_php_api_1` - PHP 8.0-fpm
- `root_mariadb_1` - MariaDB

### 2. Probar la API:

```bash
curl http://api.tu-dominio.com
```

### 3. Ver logs:

```bash
docker-compose logs -f
```

---

## 🔧 COMANDOS ÚTILES

```bash
# Reiniciar todos los servicios
docker-compose restart

# Detener todos los servicios
docker-compose down

# Iniciar todos los servicios
docker-compose up -d

# Ver logs en tiempo real
docker-compose logs -f php_api

# Entrar al contenedor PHP
docker-compose exec php_api bash

# Ejecutar comandos de Laravel
docker-compose exec php_api php artisan cache:clear
docker-compose exec php_api php artisan migrate
docker-compose exec php_api php artisan route:list
```

---

## 🆘 SOLUCIÓN DE PROBLEMAS RÁPIDOS

### Error: "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!" (SSH/SCP)

```bash
# Esto ocurre cuando reformateas el VPS o cambias de servidor
# Solución en Windows (PowerShell/Git Bash):
ssh-keygen -R TU_IP_VPS

# Ejemplo:
ssh-keygen -R 37.60.245.73

# Solución en Linux/Mac:
ssh-keygen -R TU_IP_VPS

# O editar manualmente (si prefieres):
# Abrir: C:\Users\TU_USUARIO\.ssh\known_hosts
# Eliminar la línea que menciona tu IP (línea 22 en el ejemplo del error)
```

### Error: "No se puede conectar a GitLab"

```bash
# Verificar acceso
git ls-remote https://gitlab.torresoftware.com/TorreSoftware/apidian-laravel-8-s3.git
```

### Error: "Puerto 80 ocupado"

```bash
# Ver qué usa el puerto
sudo lsof -i :80

# Detener Apache/Nginx
sudo systemctl stop apache2
sudo systemctl stop nginx
```

### Error: "Docker no responde"

```bash
# Reiniciar Docker
sudo systemctl restart docker
sudo systemctl status docker
```

### Error: "client version is too old" (Docker Compose)

```bash
# El script instala Docker Compose v2.24.0 automáticamente
# Si ves este error, verifica la versión:
docker-compose version

# Si es necesario actualizar manualmente:
curl -SL "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
```

### Error: "No se puede construir la imagen PHP"

```bash
# Limpiar y reconstruir
cd /root
docker-compose down
docker system prune -a
docker-compose up -d --build
```

---

## 📞 CHECKLIST PRE-INSTALACIÓN

Antes de ejecutar el script, verifica:

- [ ] VPS con Ubuntu 24.04 instalado
- [ ] Acceso root por SSH
- [ ] Dominio apuntando al IP del VPS
- [ ] Puertos 80, 443, 3306 disponibles
- [ ] Credenciales de GitLab (si es repo privado)
- [ ] Al menos 2 GB de RAM disponible
- [ ] Al menos 20 GB de espacio en disco

---

## 🎉 DESPUÉS DE LA INSTALACIÓN

Tu API estará disponible en:

- **HTTP:** `http://SUBDOMINIO.tu-dominio.com`
- **HTTPS:** `https://SUBDOMINIO.tu-dominio.com` (si instalaste SSL)

### ⚠️ PROBLEMA: Nginx Proxy en loop de reinicio

Si al ejecutar `docker-compose ps` ves que el proxy está `Restarting`:

```bash
# Ver logs del proxy
docker-compose logs proxy

# Solución rápida:
docker-compose down
docker-compose up -d

# Si persiste el problema, ver:
cat SOLUCIONAR_PROXY_ERROR.md
```

### ✅ Verificar que todo funciona:

```bash
# 1. Ver contenedores (todos deben estar "Up")
docker-compose ps

# 2. Probar desde el VPS
curl http://SUBDOMINIO.tu-dominio.com

# 3. Ver logs en tiempo real
docker-compose logs -f
```

### Endpoints de prueba:

```bash
# Verificar configuración
curl http://SUBDOMINIO.tu-dominio.com/api/ubl2.1/config/software

# Health check
curl http://SUBDOMINIO.tu-dominio.com/health
```

---

## 📊 ESTRUCTURA FINAL

```
/root/
├── InstallAPIDocker.sh
├── docker-compose.yml
├── .env
├── apidian/
│   ├── app/
│   ├── config/
│   ├── database/
│   ├── docker/
│   │   └── php8/
│   │       └── Dockerfile (PHP 8.0)
│   ├── public/
│   ├── resources/
│   ├── routes/
│   ├── storage/
│   └── .env
└── setup/
    ├── certs/
    ├── mysql/
    ├── fpms/
    └── private.txt (🔒 Credenciales)
```

---

##  TIPS IMPORTANTES

1. **DNS:** Configura los registros DNS ANTES de ejecutar el script
2. **Firewall:** Abre los puertos 80, 443, 3306
3. **Backup:** Guarda `/root/setup/private.txt` en lugar seguro
4. **SSL:** Instálalo después de verificar que el DNS funciona correctamente
5. **Permisos:** Ejecuta siempre con `sudo` o como root

---

## 🔄 ACTUALIZAR LA APLICACIÓN

```bash
cd /root/apidian
git pull origin main
docker-compose exec php_api composer install
docker-compose exec php_api php artisan migrate
docker-compose exec php_api php artisan optimize:clear
docker-compose restart
```

---

## 📖 DOCUMENTACIÓN COMPLETA

Para instrucciones detalladas, ver: `INSTRUCCIONES_VPS.md`
