7. Explicación código descargado
7: Explicación del Código Descargado
Duración estimada: 30 minutos
7.1 Introducción
En este tutorial vamos a explorar en detalle la estructura del proyecto que descargaste. Entender cada componente y su propósito es fundamental para que puedas modificar, extender y mantener tu aplicación con confianza.
7.2 Estructura General del Proyecto
📁 Árbol de directorios principal
📂 proyecto-desarrollo/ ├── 📄 docker-compose.yml # Orquestación principal de Docker ├── 📂 docker/ # Configuraciones de cada contenedor │ ├── 📂 app/ # Configuración de PHP │ ├── 📂 nginx/ # Configuración del servidor web │ ├── 📂 vite/ # Configuración del servidor de desarrollo │ └── 📂 supervisor/ # Configuración de procesos en segundo plano ├── 📂 laravel/ # Proyecto Laravel (el código de tu app) │ ├── 📂 app/ │ ├── 📂 config/ │ ├── 📂 database/ │ ├── 📂 resources/ │ ├── 📂 routes/ │ └── 📄 .env.example ├── 📂 node_modules/ # Dependencias de Node (se genera al instalar) └── 📄 .env.local # Variables de entorno locales
💡 Nota: La carpeta
laravel/contiene el proyecto que construiremos paso a paso. Si quieres tener un respaldo del código completo, haz una copia de seguridad antes de empezar a modificar.
7.3 Análisis del docker-compose.yml
🐳 Orquestación de contenedores
El archivo docker-compose.yml es el corazón de nuestro entorno de desarrollo. Define todos los servicios que necesitamos.
📋 Resumen de servicios:
| Servicio | Contenedor | Propósito |
|---|---|---|
| app | PHP-FPM 8.4 | Procesa el código PHP de Laravel |
| nginx | Nginx | Servidor web y proxy |
| postgres | PostgreSQL 15 | Base de datos |
| pgadmin | phpPgAdmin | Gestor visual de BD |
| localstack | LocalStack | Emulador de AWS |
| vite | Node + Vite | Servidor de desarrollo frontend |
🔍 Detalle de cada servicio
1️⃣ Servicio app (PHP-FPM)
app: build: context: . dockerfile: docker/app/Dockerfile container_name: laravel_app ports: - "8001:8001" networks: custom_network: ipv4_address: 172.20.0.10 volumes: - ./laravel:/var/www/html environment: - TZ=America/Santiago
¿Qué hace?
Usa PHP 8.4 (última versión estable)
Instala extensiones necesarias (PostgreSQL, GD, etc.)
Configura el huso horario
Monta el código de Laravel en el contenedor
2️⃣ Servicio nginx (Servidor Web)
nginx: build: context: . dockerfile: docker/nginx/Dockerfile container_name: laravel_nginx ports: - "8080:80" depends_on: - app networks: - custom_network
¿Qué hace?
Sirve los archivos estáticos (CSS, JS, imágenes)
Redirige las peticiones PHP a PHP-FPM
Configuración en
docker/nginx/default.conf
3️⃣ Servicio postgres (Base de Datos)
postgres: image: postgres:15 container_name: laravel_postgres environment: POSTGRES_DB: laravel POSTGRES_USER: user POSTGRES_PASSWORD: sql ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data
Credenciales por defecto:
Base de datos:
laravelUsuario:
userContraseña:
sql
4️⃣ Servicio pgadmin (Gestor de BD)
pgadmin: image: dockage/phppgadmin:latest container_name: laravel_pgadmin environment: POSTGRES_HOST: postgres POSTGRES_USER: user POSTGRES_PASSWORD: sql ports: - "5050:80"
Acceso: http://localhost:5050
5️⃣ Servicio localstack (Emulador AWS)
localstack: image: localstack/localstack:latest container_name: laravel_localstack environment: - SERVICES=s3,sqs,lambda,ses,dynamodb - AWS_DEFAULT_REGION=us-east-1 ports: - "4566:4566"
Servicios disponibles:
✅ S3 (Almacenamiento)
✅ SQS (Colas)
✅ Lambda (Funciones serverless)
✅ SES (Email)
✅ DynamoDB (NoSQL)
6️⃣ Servicio vite (Desarrollo Frontend)
vite: build: context: . dockerfile: docker/vite/Dockerfile container_name: laravel_vite ports: - "5173:5173" command: npm run dev
¿Qué hace?
Compila assets de React en tiempo real
Hot Reload automático
Puerto: 5173
7.4 Configuración de la Red
🌐 Red personalizada para evitar conflictos
networks: custom_network: ipam: config: - subnet: 172.20.0.0/16 gateway: 172.20.0.1
Ventajas de esta configuración:
✅ Evita conflictos con VPNs
✅ IPs fijas para cada contenedor
✅ Comunicación interna estable
7.5 Archivos de Configuración Importantes
📄 Dockerfile de PHP (docker/app/Dockerfile)
FROM php:8.4-fpm
# Instalación de dependencias del sistema
RUN apt-get update && apt-get install -y \
git \
curl \
nano \
libpq-dev \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
# Instalación de extensiones PHP
RUN docker-php-ext-install pdo pdo_pgsql pgsql \
bcmath ctype fileinfo mbstring gd
# Instalación de Composer
COPY --from=composer:2.6 /usr/bin/composer /usr/bin/composer
# Configuración de huso horario (opcional)
ENV TZ=America/Santiago📄 Configuración de Nginx (docker/nginx/default.conf)
server { listen 80; server_name localhost; root /var/www/html/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass app:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
📄 Configuración de Supervisor (docker/supervisor/supervisor.conf)
[supervisord] nodaemon=true [program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/html/artisan queue:work autostart=true autorestart=true user=www-data numprocs=1 redirect_stderr=true stdout_logfile=/var/log/worker.log
7.6 Verificación de Contenedores Levantados
✅ Estado actual
# Ver contenedores activos docker compose ps # Resultado esperado: NAME STATUS PORTS laravel_app Up 2 hours 8001/tcp laravel_nginx Up 2 hours 0.0.0.0:8080->80/tcp laravel_postgres Up 2 hours 0.0.0.0:5432->5432/tcp laravel_pgadmin Up 2 hours 0.0.0.0:5050->80/tcp laravel_localstack Up 2 hours 0.0.0.0:4566->4566/tcp laravel_vite Up 2 hours 0.0.0.0:5173->5173/tcp
🔍 Comandos útiles para diagnosticar
# Verificar IPs de los contenedores docker inspect laravel_app | grep IPAddress # Probar comunicación entre contenedores docker compose exec app ping postgres # Ver logs específicos docker compose logs app docker compose logs nginx docker compose logs postgres
7.7 Consideraciones Importantes
⚠️ Puntos clave a recordar
Credenciales en duro: Las credenciales en el
docker-compose.ymlson solo para desarrollo local. Nunca subas estos valores a producción.Carpeta
laravel/: Contiene el código de la aplicación. Puedes:Usar el código ya construido (haz una copia)
Borrarlo y empezar desde cero
Volúmenes persistentes:
pgdata: Datos de PostgreSQLlocalstack_data: Datos de LocalStack
Puertos expuestos:
8080: Aplicación web5050: phpPgAdmin5432: PostgreSQL4566: LocalStack5173: Vite
7.8 Solución de Problemas Comunes
❌ Error: "File not found" en Nginx
Causa: La carpeta laravel/ está vacía o no contiene el proyecto.
Solución:
# Crear el proyecto Laravel dentro del contenedor docker compose exec app composer create-project laravel/laravel . # O copiar un proyecto existente cp -r /ruta/a/tu/proyecto/laravel/ .
❌ Error: No se puede conectar a PostgreSQL
Causa: PostgreSQL no está listo cuando la app intenta conectarse.
Solución:
# Agregar healthcheck en docker-compose.yml postgres: healthcheck: test: ["CMD-SHELL", "pg_isready -U user"] interval: 10s timeout: 5s retries: 5
❌ Error: Vite no inicia correctamente
Causa: Node_modules no instalados.
Solución:
# Instalar dependencias dentro del contenedor docker compose exec vite npm install
7.9 Próximos Pasos
🎯 Lo que haremos a continuación
Configurar variables de entorno (
.env)Instalar dependencias de PHP y Node
Ejecutar migraciones de base de datos
Probar la aplicación en el navegador
📝 Ejercicio de la Clase
Para afianzar los conceptos:
Explora cada archivo de configuración
Modifica el puerto de nginx de
8080a8081y verifica el cambioAgrega una extensión PHP adicional en el Dockerfile
Prueba la conexión entre contenedores usando
ping
📚 Recursos Adicionales
¡Excelente! Ahora entiendes la arquitectura de tu proyecto. Continúa al Tutorial 8: Configuración de Variables de Entorno y Dependencias
Comentarios
Publicar un comentario