Skip to content
Code and Bytes Code and Bytes

Code and Bytes
Code and Bytes

Configurar Supervisor para Queues en Laravel con Docker

Posted on 7 December, 202511 April, 2026

Si tus colas de Laravel no se procesan en Docker, aquí tienes la solución rápida. Usando Supervisor dentro de tu contenedor, podrás manejar workers de forma estable y automática.

Modificaciones Necesarias

1. docker/apache/Dockerfile

FROM php:8.2-apache

RUN apt-get update && apt-get install -y \
    supervisor \ # ¡Clave!
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip \
    git \
    curl \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd \
    && a2enmod rewrite \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Script de inicio personalizado
COPY docker/start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh

WORKDIR /var/www/html
EXPOSE 80
CMD ["/usr/local/bin/start.sh"] # Reemplaza el CMD por defecto

2. docker/start.sh

Este script ahora inicia Supervisor (que maneja las colas) y Apache.

#!/bin/bash
set -e

if [ ! -d "vendor" ]; then
    composer install --optimize-autoloader
fi

chmod -R 777 /var/www/html/storage /var/www/html/bootstrap/cache 2>/dev/null || true

php artisan config:cache 2>/dev/null || true
php artisan route:cache 2>/dev/null || true

# Inicia Supervisor para manejar los workers
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf

# Inicia Apache (el proceso principal)
exec apache2-foreground

3. docker/supervisor/laravel-worker.conf
Define cómo se comportarán tus workers. Este ejemplo levanta 8 procesos.

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/worker.log
stopwaitsecs=3600

4. docker-compose.yml
Monta la configuración de Supervisor y asegura que start.sh sea ejecutable.

services:
  db:
    image: mysql:8.0
    container_name: laravel-db
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_USER: ${DB_USERNAME}
    volumes:
      - dbdata:/var/lib/mysql
    networks:
      - laravel-network

  app:
    build:
      context: .
      dockerfile: docker/apache/Dockerfile
    container_name: laravel-app
    restart: unless-stopped
    ports:
      - "8000:80"
    volumes:
      - .:/var/www/html
      - ./docker/apache/000-default.conf:/etc/apache2/sites-available/000-default.conf
      - ./docker/supervisor:/etc/supervisor/conf.d
    networks:
      - laravel-network
    depends_on:
      - db

networks:
  laravel-network:
    driver: bridge

volumes:
  dbdata:
    driver: local

5. docker/apache/000-default.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/public

    <Directory /var/www/html/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Reconstruye y levanta tus contenedores:

docker-compose down
docker-compose up --build -d

Verifica que los workers estén corriendo:

docker-compose exec app supervisorctl status

Deberías ver: laravel-worker:laravel-worker_00 RUNNING


Listo. Ahora tus colas se procesarán automáticamente, los workers se reiniciarán si fallan, y tendrás un control centralizado. Olvídate de ejecutar queue:work manualmente.

¿Problemas? Revisa los logs: 

docker-compose logs app y docker-compose exec app tail -f storage/logs/worker.log.

Laravel

Post navigation

Previous post
Next post

Related Posts

Laravel bitbucket-error-pipeline-phpunit

Solución: Error en Bitbucket Pipelines al ejecutar pruebas de Laravel con PHPUnit y Paratest

Posted on 27 September, 202412 October, 2024

Al ejecutar en el pipeline los tests unitarios aparece un error de memoria La solución es agregar un elemento <ini> al archivo de configuración de PHPUnit phpunit.xml con el valor memory_limit para aumentar la asignación de memoria, en mi caso lo aumenté a 512M

Read More
Laravel

Cómo mostrar alertas en Laravel con SweetAlert2 y validaciones personalizadas

Posted on 17 October, 202411 April, 2026

En esta entrada te mostraré cómo integrar SweetAlert2 en Laravel para mostrar alertas interactivas al eliminar registros. Además, implementaremos validaciones que verifican si hay dependencias antes de eliminar, asegurando que el proceso sea seguro y controlado. Con un ejemplo práctico, veremos cómo SweetAlert2 mejora la experiencia de usuario al mostrar…

Read More
Laravel

Solución: Unable to create PsySH runtime directory. Make sure PHP is able to write to /run/user/1003 in order to continue.

Posted on 2 November, 202411 April, 2026

Cuando trabajamos con Laravel, php artisan tinker es una herramienta fundamental para interactuar rápidamente con nuestras aplicaciones desde la línea de comandos. Sin embargo, a veces al ejecutar este comando podemos encontrarnos con errores inesperados. Uno de ellos es el siguiente:

Read More

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Buscar

Categorias

  • AI (2)
  • Asterisk (9)
  • Bases de datos (1)
  • DevOps (4)
  • Git (2)
  • HTML (1)
  • Laravel (6)
  • Linux (67)
  • MCP Server (1)
  • Mikrotik (3)
  • MySQL (5)
  • n8n (1)
  • Personal (4)
  • PHP (15)
  • Python (2)
  • Software recomendado (1)
  • Tips (1)
  • VSCode (4)
  • vTiger (4)
  • Windows (10)
  • Wordpress (4)
©2026 Code and Bytes | WordPress Theme by SuperbThemes