Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Archivos de Git
.git
.gitignore
.gitattributes

# Archivos de configuración local
.env
.env.*
!.env.example

# Dependencias de Node.js
node_modules
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Dependencias de Composer
vendor
composer.phar

# Archivos de build
public/build
public/hot
public/storage
storage/*.key

# Archivos de cache
.cache
.parcel-cache
.vite

# Archivos de testing
coverage
.nyc_output
.phpunit.result.cache

# Archivos de IDE
.vscode
.idea
*.swp
*.swo
*~

# Archivos de sistema
.DS_Store
Thumbs.db

# Archivos de Docker
Dockerfile*
docker-compose*
.dockerignore

# Archivos de documentación
README.md
DOCKER.md
docs/

# Archivos de testing
tests/
cypress/
phpunit.xml

# Archivos de configuración de desarrollo
.eslintrc*
.prettierrc*
.editorconfig

# Archivos de logs
*.log
logs/

# Archivos temporales
tmp/
temp/
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,7 @@ coverage.xml
/resources/js/ziggy.js
/resources/js/ziggy.d.ts
cookies.txt

# Docker
docker.env
.env.docker
169 changes: 169 additions & 0 deletions DOCKER.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
# Docker Setup - CronosMaticStore

## Resumen del Entorno

Este proyecto utiliza Docker para proporcionar un entorno de desarrollo completo con los siguientes servicios:

- **Laravel 12** con PHP 8.2
- **MariaDB** como base de datos
- **Redis** para caché y sesiones
- **Nginx** como servidor web
- **Vite** para desarrollo frontend con hot reload
- **phpMyAdmin** para gestión de base de datos

## Servicios Disponibles

### Entorno de Desarrollo (`dev`)
- **URL**: http://localhost:3000 (Laravel)
- **Vite**: http://localhost:5173 (Hot reload)
- **Puerto**: 3000, 5173
- **Características**: Hot reload, dependencias de desarrollo, debugging

### Entorno de Producción (`app`)
- **URL**: http://localhost:8000
- **Puerto**: 8000
- **Características**: Optimizado para producción

### Base de Datos (`db`)
- **Tipo**: MariaDB 10.11
- **Puerto**: 3306
- **Credenciales**:
- Usuario: `cronosmatic`
- Contraseña: `cronosmatic123`
- Base de datos: `cronosmatic_store`

### Redis (`redis`)
- **Puerto**: 6379
- **Uso**: Caché y sesiones de Laravel

### phpMyAdmin (`phpmyadmin`)
- **URL**: http://localhost:8080
- **Credenciales**:
- Usuario: `cronosmatic`
- Contraseña: `cronosmatic123`

## Comandos Principales

### Iniciar el entorno de desarrollo
```bash
./docker-setup.sh dev
```

### Iniciar el entorno de desarrollo completo (con phpMyAdmin)
```bash
docker compose up -d dev phpmyadmin
```

### Iniciar el entorno de producción
```bash
./docker-setup.sh prod
```

### Iniciar solo phpMyAdmin
```bash
docker compose up -d phpmyadmin
```

### Detener todos los servicios
```bash
docker compose down
```

### Ver logs del entorno de desarrollo
```bash
docker compose logs -f dev
```

### Acceder al contenedor de desarrollo
```bash
docker compose exec dev bash
```

### Ejecutar comandos de Laravel
```bash
docker compose exec dev php artisan migrate
docker compose exec dev php artisan db:seed
docker compose exec dev php artisan tinker
```

### Ejecutar tests
```bash
docker compose exec dev php artisan test
docker compose exec dev npm test
```

## Problemas Resueltos

### ✅ Error "Class Redis not found"
**Problema**: Laravel no podía encontrar la clase Redis.
**Solución**: Instalación de la extensión PHP Redis vía PECL en el Dockerfile.

### ✅ Warnings de extensiones PHP duplicadas
**Problema**: Extensiones PHP cargadas múltiples veces causando warnings.
**Solución**: Eliminación de las líneas de extensión duplicadas del archivo `custom.ini`.

### ✅ Errores de seeders por duplicados
**Problema**: Los seeders fallaban por datos duplicados en la base de datos.
**Solución**: El script de inicio maneja estos errores de forma elegante.

## Configuración de Archivos

### Variables de Entorno
El archivo `docker.env` contiene todas las variables necesarias para el entorno Docker.

### Configuración PHP
- **Archivo**: `docker/php/custom.ini`
- **Características**: Configuración optimizada para desarrollo con límites de memoria y tiempo aumentados.

### Configuración Nginx
- **Archivo**: `docker/nginx.conf`
- **Características**: Configuración optimizada para Laravel con soporte para archivos estáticos.

## Desarrollo

### Hot Reload
El entorno de desarrollo incluye:
- **Vite**: Hot reload para archivos JavaScript/TypeScript
- **Laravel**: Servidor de desarrollo con recarga automática

### Base de Datos
- Las migraciones se ejecutan automáticamente al iniciar el entorno
- Los seeders se ejecutan con manejo de errores de duplicados
- Datos de prueba incluidos automáticamente

### Logs
Los logs están disponibles en:
- **Laravel**: `storage/logs/`
- **Nginx**: `/var/log/nginx/`
- **PHP**: `/var/log/php_errors.log`

## Troubleshooting

### Si el contenedor no inicia
1. Verificar que Docker esté ejecutándose
2. Verificar que los puertos no estén en uso
3. Ejecutar `docker compose down` y luego `docker compose up -d dev`

### Si hay problemas de permisos
```bash
docker compose exec dev chown -R www-data:www-data /var/www/html
```

### Si hay problemas de dependencias
```bash
docker compose exec dev composer install
docker compose exec dev npm install
```

### Si hay problemas de base de datos
```bash
docker compose exec dev php artisan migrate:fresh --seed
```

## Notas Importantes

- El entorno de desarrollo incluye todas las dependencias de desarrollo
- Los archivos del proyecto están montados como volúmenes para hot reload
- La base de datos persiste entre reinicios del contenedor
- Redis está configurado para caché y sesiones de Laravel
- El entorno está optimizado para desarrollo con debugging habilitado
69 changes: 69 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Dockerfile para CronosMaticStore
FROM php:8.2-fpm

# Instalar dependencias del sistema
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
zip \
unzip \
nodejs \
npm \
supervisor \
nginx \
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

# Instalar Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Instalar Node.js 18 (más reciente y estable)
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
&& apt-get install -y nodejs

# Crear directorio de trabajo
WORKDIR /var/www/html

# Copiar archivos de dependencias
COPY composer.json composer.lock ./
COPY package.json package-lock.json ./

# Instalar dependencias de PHP (sin scripts post-install)
RUN composer install --no-dev --optimize-autoloader --no-interaction --no-scripts

# Instalar dependencias de Node.js
RUN npm ci --only=production

# Copiar el código de la aplicación
COPY . .

# Ejecutar scripts post-install después de copiar el código
RUN composer run-script post-autoload-dump

# Configurar permisos
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html/storage \
&& chmod -R 755 /var/www/html/bootstrap/cache

# Construir assets de producción
RUN npm run build

# Configurar PHP
COPY docker/php.ini /usr/local/etc/php/conf.d/custom.ini

# Configurar Nginx
COPY docker/nginx.conf /etc/nginx/sites-available/default

# Configurar Supervisor
COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# Exponer puerto
EXPOSE 80

# Comando de inicio
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
68 changes: 68 additions & 0 deletions Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Dockerfile para desarrollo de CronosMaticStore
FROM php:8.2-fpm

# Instalar dependencias del sistema
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
zip \
unzip \
nodejs \
npm \
supervisor \
nginx \
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip \
&& echo 'no' | pecl install redis \
&& docker-php-ext-enable redis \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

# Instalar Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Instalar Node.js 18
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
&& apt-get install -y nodejs

# Crear directorio de trabajo
WORKDIR /var/www/html

# Copiar archivos de dependencias
COPY composer.json composer.lock ./
COPY package.json package-lock.json ./

# Instalar dependencias de PHP (incluyendo dev, sin scripts post-install)
RUN composer install --optimize-autoloader --no-interaction --no-scripts

# Instalar dependencias de Node.js (incluyendo dev)
RUN npm install

# Copiar el código de la aplicación
COPY . .

# Ejecutar scripts post-install después de copiar el código
RUN composer run-script post-autoload-dump

# Configurar permisos
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html/storage \
&& chmod -R 755 /var/www/html/bootstrap/cache

# Configurar PHP para desarrollo
COPY docker/php/custom.ini /usr/local/etc/php/conf.d/custom.ini

# Configurar Nginx
COPY docker/nginx.conf /etc/nginx/sites-available/default

# Configurar Supervisor para desarrollo
COPY docker/supervisord.dev.conf /etc/supervisor/conf.d/supervisord.conf

# Exponer puertos
EXPOSE 80 3000 5173

# Comando de inicio para desarrollo
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
Loading
Loading