> For the complete documentation index, see [llms.txt](https://senselab.gitbook.io/senselab-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://senselab.gitbook.io/senselab-docs/docs/guides/docker_quickstart.md).

# ¡Dockerización Completa! - Guía Rápida

## ✅ Lo que se ha implementado

Tu proyecto **Senselab Core API** ahora está completamente dockerizado con:

### 🐳 Infraestructura Docker Profesional

* **Dockerfile** multi-stage optimizado (imagen \~200MB)
* **docker-compose.yml** con 4 servicios principales
* **Configuraciones optimizadas** para todos los servicios
* **Volúmenes persistentes** para datos
* **Health checks** automáticos

### 🛠️ Servicios Disponibles

| Servicio   | Puerto | Descripción            |
| ---------- | ------ | ---------------------- |
| Nginx      | 8000   | Servidor web           |
| PHP-FPM    | 9000   | Laravel API            |
| MySQL      | 3306   | Base de datos          |
| Redis      | 6379   | Cache/Sesiones/Colas   |
| PHPMyAdmin | 8080   | Admin MySQL (opcional) |
| Mailhog    | 8025   | Testing emails (dev)   |

### 📚 Documentación Creada

* **DOCKER\_GUIDE.md** (650+ líneas) - Guía completa
* **FASE\_9\_DOCKERIZACION\_COMPLETADA.md** - Resumen técnico
* **README.md** - Actualizado con sección Docker

### 🤖 Automatización

* `docker-start.sh` - Instalación completa en un comando
* `docker-health.sh` - Verificar salud de servicios
* `Makefile` - 40+ comandos útiles

***

## 🚀 Cómo Usar (3 Opciones)

### Opción 1: Script Automático ⭐ (Recomendado)

```bash
# Ya tiene permisos ejecutables
./docker-start.sh
```

**Esto automáticamente:**

1. Verifica Docker
2. Construye contenedores
3. Crea archivo .env
4. Instala dependencias
5. Genera APP\_KEY
6. Ejecuta migraciones
7. Carga seeders (112 registros)
8. Genera Swagger
9. Configura permisos

**Tiempo estimado:** 5-10 minutos

### Opción 2: Usando Makefile

```bash
# Ver todos los comandos disponibles
make help

# Instalación completa
make install

# Iniciar servicios
make up

# Ver logs
make logs

# Acceder a shell de PHP
make shell

# Ejecutar tests
make test

# Detener servicios
make down
```

### Opción 3: Docker Compose Manual

```bash
# Construir
docker-compose build

# Iniciar
docker-compose up -d

# Instalar dependencias
docker-compose exec php composer install

# Generar key
docker-compose exec php php artisan key:generate

# Migraciones
docker-compose exec php php artisan migrate

# Seeders
docker-compose exec php php artisan db:seed

# Swagger
docker-compose exec php php artisan l5-swagger:generate
```

***

## 🌐 URLs Disponibles

Después de iniciar los contenedores:

| Servicio       | URL                                       | Credenciales                        |
| -------------- | ----------------------------------------- | ----------------------------------- |
| **API**        | <http://localhost:8000>                   | -                                   |
| **Swagger**    | <http://localhost:8000/api/documentation> | -                                   |
| **PHPMyAdmin** | <http://localhost:8080>                   | senselab\_user / senselab\_password |
| **Mailhog**    | <http://localhost:8025>                   | -                                   |

**Credenciales Admin API:**

* Email: `admin@senselab.com`
* Password: `admin123`

***

## 📋 Comandos Útiles del Makefile

```bash
# === GESTIÓN DE CONTENEDORES ===
make up              # Iniciar servicios
make down            # Detener servicios
make restart         # Reiniciar servicios
make ps              # Ver estado
make logs            # Ver logs (todos)
make logs-php        # Logs de PHP
make logs-nginx      # Logs de Nginx
make logs-mysql      # Logs de MySQL

# === SHELL ACCESS ===
make shell           # Shell de PHP (Alpine)
make shell-mysql     # MySQL CLI
make shell-redis     # Redis CLI

# === LARAVEL/ARTISAN ===
make migrate         # Ejecutar migraciones
make fresh           # Resetear BD completa
make seed            # Ejecutar seeders
make cache-clear     # Limpiar cachés
make optimize        # Optimizar (producción)
make swagger         # Regenerar Swagger

# === TESTING ===
make test            # Ejecutar todos los tests
make test-filter FILTER="AuthTest"
make test-coverage   # Con cobertura

# === COMPOSER ===
make composer-install
make composer-update
make composer-dump

# === DESARROLLO ===
make dev             # Iniciar con PHPMyAdmin + Mailhog
make dev-down        # Detener desarrollo

# === PRODUCCIÓN ===
make prod-up         # Con queue worker + scheduler
make prod-down

# === BACKUP ===
make backup-db       # Backup de MySQL

# === INFO ===
make status          # Estado completo
make help            # Ver todos los comandos
```

***

## 🔍 Verificar que Todo Funciona

### Opción 1: Script de Health Check

```bash
./docker-health.sh
```

Verifica:

* ✅ Docker está corriendo
* ✅ Nginx responde
* ✅ MySQL conecta
* ✅ Redis funciona
* ✅ PHP-FPM está listo
* ✅ Laravel app corre
* ✅ Base de datos accesible

### Opción 2: Manual

```bash
# Ver contenedores
docker-compose ps

# Todos deben estar "Up (healthy)"

# Probar API
curl http://localhost:8000/health

# Debe responder: "healthy"
```

### Opción 3: Navegador

1. Abre: <http://localhost:8000/api/documentation>
2. Deberías ver Swagger UI
3. Prueba el endpoint `POST /api/login`
4. Usa credenciales: <admin@senselab.com> / admin123

***

## 🔄 Workflow de Desarrollo

### Iniciar el día

```bash
make up
make logs-php  # Ver que todo inició bien
```

### Durante desarrollo

```bash
# Los cambios en código se reflejan inmediatamente
# No necesitas rebuild para cambios en PHP

# Ejecutar migraciones nuevas
make migrate

# Ejecutar tests
make test

# Ver logs en tiempo real
make logs
```

### Limpiar caché

```bash
make cache-clear
```

### Finalizar el día

```bash
make down  # Detiene contenedores, datos persisten
```

***

## 📖 Documentación Completa

Para más detalles, consulta:

### DOCKER\_GUIDE.md

Cubre:

* Instalación detallada
* Todos los servicios
* Configuraciones
* Troubleshooting
* Producción
* CI/CD

### Secciones importantes:

* **Requisitos**: Docker 20.10+, Docker Compose 2.0+
* **Instalación Rápida**: 3 opciones paso a paso
* **Servicios**: Tabla completa con puertos y profiles
* **Comandos**: Guía de Makefile completa
* **Desarrollo**: Hot reload, debugging
* **Producción**: Optimizaciones, variables de entorno
* **Troubleshooting**: 10+ problemas comunes

***

## 🎯 Próximos Pasos

### Para Desarrollo

1. **Iniciar servicios:**

   ```bash
   make dev  # Incluye PHPMyAdmin y Mailhog
   ```
2. **Empezar a desarrollar:**
   * Código en `app/` se refleja automáticamente
   * Swagger en <http://localhost:8000/api/documentation>
3. **Ejecutar tests:**

   ```bash
   make test
   ```

### Para Producción

1. **Configurar .env para producción:**

   ```bash
   cp .env.docker .env
   # Editar con credenciales reales
   ```
2. **Iniciar modo producción:**

   ```bash
   make prod-up
   ```
3. **Optimizar:**

   ```bash
   make optimize
   ```

### Para CI/CD

1. **Configurar GitHub Secrets:**
   * `DOCKER_USERNAME` - Usuario Docker Hub
   * `DOCKER_PASSWORD` - Token Docker Hub
   * `DEPLOY_HOST` - Servidor de producción
   * `DEPLOY_USER` - Usuario SSH
   * `DEPLOY_KEY` - Private key SSH
2. **Push a main activa el pipeline:**
   * Tests automáticos
   * Build de imagen
   * Push a Docker Hub
   * Deploy automático

***

## 💡 Tips y Mejores Prácticas

### Durante Desarrollo

* ✅ Usa `make dev` para tener todas las herramientas
* ✅ Revisa logs con `make logs` si algo falla
* ✅ Usa `make shell` para ejecutar comandos dentro del contenedor
* ✅ No necesitas rebuild para cambios en código PHP

### Problemas Comunes

**Puerto 8000 ocupado:**

```bash
# Cambiar puerto en .env
NGINX_PORT=8001
```

**MySQL no inicia:**

```bash
make logs-mysql  # Ver el error
make down
make up
```

**Permisos en Linux:**

```bash
make shell
chmod -R 775 storage bootstrap/cache
```

**Limpiar todo:**

```bash
make clean  # Elimina contenedores y volúmenes
make install  # Reinstalar desde cero
```

***

## 📞 Soporte

Si tienes problemas:

1. **Revisa logs:** `make logs`
2. **Health check:** `./docker-health.sh`
3. **Consulta:** DOCKER\_GUIDE.md sección Troubleshooting
4. **Contacto:** <deadmooncr@gmail.com>

***

## ✨ Beneficios de Docker

### Antes (Instalación Manual)

* ❌ 30-45 minutos de instalación
* ❌ 15+ pasos manuales
* ❌ Problemas de versiones
* ❌ "Funciona en mi máquina"
* ❌ Configuración compleja

### Ahora (Con Docker)

* ✅ 5-10 minutos de instalación
* ✅ 1 comando: `./docker-start.sh`
* ✅ Sin problemas de versiones
* ✅ Reproducible 100%
* ✅ Configuración automática

***

## 🎉 ¡Listo para Usar!

Tu proyecto está completamente dockerizado y listo para:

* 🚀 **Desarrollo**: `make dev`
* 🧪 **Testing**: `make test`
* 🏭 **Producción**: `make prod-up`
* 📦 **Deploy**: Push automático con CI/CD

**¡Disfruta desarrollando con Docker!** 🐳

***

**Senselab**\
Desarrollado por: Jeremy Arias Solano\
Fecha: 22 de noviembre de 2025


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://senselab.gitbook.io/senselab-docs/docs/guides/docker_quickstart.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
