Dockerfile de Docker

El proyecto de laravel requiere un Dockerfile el cual va a permitir instalar dependencias totalmente separadas de cualquier tipo de sistema host sin importar su tipo, un proyecto de laravel necesita como minimo un contenedor de produccion y uno de compilacion.

Archivo de configuracion Dockerfile:

FROM php:8.2-fpm
 
# --- ARG para usuario y UID (definidos en docker-compose.yml)
ARG user=laravel
ARG uid=1000
 
# Instalar dependencias de sistema necesarias para Laravel
RUN apt-get update && apt-get install -y \
    git \
    curl \
    unzip \
    libzip-dev \
    && docker-php-ext-install pdo pdo_mysql zip opcache
 
# Instalar Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
 
# Crear usuario del sistema para ejecutar Composer, Artisan, etc.
RUN useradd -G www-data,root -u $uid -d /home/$user $user && \
    mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user
 
# Directorio de trabajo
WORKDIR /var/www
 
# Copiar el código (propietario temporalmente root)
COPY . .
 
# Instalar dependencias de Laravel (con Composer) como root (para evitar problemas)
RUN composer install --no-interaction --optimize-autoloader --no-dev
 
# Dar permisos correctos a las carpetas necesarias
RUN chown -R $user:www-data /var/www && \
    chmod -R 775 /var/www/storage /var/www/bootstrap/cache
 
# Generar la clave de la aplicación
RUN php artisan key:generate
 
# Crear el enlace simbólico para el almacenamiento
RUN rm -rf public/storage && \
    php artisan storage:link
 
# Cambiar al usuario creado
USER $user
 
EXPOSE 9000
 
# Iniciar PHP-FPM
CMD ["php-fpm"]

Configuracion inicial version 1.0.0 de Krypton612 - Ronald Diaz


Docker Compose para el despliegue en conjunto

El proyecto una vez con una configuracion funcional de dockerfile requiere despliegue conjunto para poder ejecutarse en produccion, en este despliegue conjunto se integra NGINX como herramienta para produccion, se describe la configuracion de docker compose y los respectivos puertos expuestos.

Docker Compose File

Un archivo docker compose es un documento de configuracion que describe como debe ejecutarse un contenedor individual, si con una red predefinidad, un volumen compartido o especificaciones con otro tipo de contenedores individuales

Docker Compose

version: '3.9'
 
services:
  app:
    build:
      context: ./honeypot-emi
      dockerfile: Dockerfile
      args:
        user: laravel
        uid: 1000    # UID de tu usuario host (usa `id -u` en Linux/Mac)
    container_name: honeypot-app
    volumes:
      - ./honeypot-emi:/var/www
    networks:
      - honeypot_emi
    restart: unless-stopped
 
  nginx:
    image: nginx:alpine
    container_name: honeypot-nginx
    ports:
      - "8080:80"
    volumes:
      - ./honeypot-emi:/var/www
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app
    networks:
      - honeypot_emi
 
networks:
  honeypot_emi:
    driver: bridge

Archivo de configuracion de Krypton612 - Ronald Diaz

Diagrama de comunicacion entre componentes, sin integracion ELK:

graph LR
    subgraph honeypot_emi[Docker network: honeypot_emi]
        A[Container: honeypot-app
        Image built from ./honeypot-emi/Dockerfile
        Args: user=laravel, uid=1000
        Volumes: ./honeypot-emi -> /var/www
        Restart: unless-stopped]
        
        B[Container: honeypot-nginx
        Image: nginx:alpine
        Ports: 8080 -> 80
        Volumes:
          ./honeypot-emi -> /var/www
          ./nginx/default.conf -> /etc/nginx/conf.d/default.conf
        Depends on: honeypot-app]
    end

    B -->|serves| ExternalClient[(Browser / HTTP Client)]
    A -->|runs Laravel PHP-FPM| B


Diagrama del contenedor, sus redes y volumenes sin integracion ELK Krypton612 - Ronald Diaz


1

Footnotes

  1. La nota es parte de un conjunto de notas partes de 0. Introduccion a los honeypot en Laravel