; Esta imagen es la misma en desarrollo y en un cliente —el Dockerfile ES el ; instalador—, así que lo de acá está afinado para el cliente, no para la laptop. memory_limit = 512M max_execution_time = 120 date.timezone = America/Guatemala ; ⚠️ Off, y no On como estaba mientras esto fue sólo un ambiente local. ; ; Con On, un fatal de PHP —quedarse sin memoria explotando una fórmula honda, un ; parse error en un despliegue a medias— se imprime EN LA RESPUESTA, con la ruta ; completa de los archivos del servidor, a quien haya hecho la petición. Symfony ; atrapa las excepciones y contesta JSON limpio, pero un fatal no pasa por Symfony. ; ; No se pierde nada en desarrollo: ahí APP_ENV=dev y es Symfony quien muestra el ; error, con más contexto que esto. Y en los dos lados el error queda en el log. display_errors = Off display_startup_errors = Off error_reporting = E_ALL log_errors = On ; A stderr, que es de donde lo saca `docker compose logs api`. Un archivo dentro del ; contenedor es un log que nadie va a leer y que nadie va a rotar. error_log = /dev/stderr opcache.enable = 1 ; Se quedan revisando timestamps a propósito: el código se actualiza copiando ; archivos sobre el volumen montado, no reconstruyendo la imagen. Con ; validate_timestamps=0 —lo «recomendado para producción»— un despliegue no tendría ; ningún efecto hasta que alguien reiniciara el contenedor, y el síntoma sería ; «desplegué y no cambió nada». opcache.validate_timestamps = 1 opcache.revalidate_freq = 0 opcache.memory_consumption = 192 opcache.max_accelerated_files = 20000