Skip to content

Fix Docker environment: PHP 8.1, netcat, and env variables#223

Open
calebrio02 wants to merge 2 commits intoCRLibre:v4.4from
calebrio02:fix/docker-setup
Open

Fix Docker environment: PHP 8.1, netcat, and env variables#223
calebrio02 wants to merge 2 commits intoCRLibre:v4.4from
calebrio02:fix/docker-setup

Conversation

@calebrio02
Copy link
Copy Markdown

Arreglo de Entorno Docker y Configuración (Fix Docker Environment)

Descripción

Este PR corrige varios problemas que impedían construir y ejecutar el contenedor Docker en entornos modernos y corregir errores de configuración en el despliegue.

Cambios Realizados y Justificación

1. Actualización de Dockerfile (Infraestructura)

  • Base Image: Se actualizó de php:7.4-apache a php:8.1-apache.
    • Razón: La imagen anterior estaba basada en Debian Buster, que ha llegado al final de su vida útil (EOL). Sus repositorios han sido archivados, lo que provocaba errores 404 Not Found al intentar hacer apt-get update. PHP 8.1 es una versión con soporte activo y retrocompatible para este proyecto.
  • Paquete Netcat: Se reemplazó netcat por netcat-openbsd.
    • Razón: En las versiones más recientes de Debian (Bookworm/Trixie), el paquete netcat es virtual y no se puede instalar directamente. Se debe especificar netcat-openbsd o netcat-traditional.
  • Saltos de Línea (CRLF): Se añadió dos2unix y se ejecutó sobre docker-entrypoint.sh.
    • Razón: Garantiza que el script de entrada tenga formato UNIX (LF) aunque el repositorio se clone en Windows (donde git suele convertir a CRLF). Esto evita el error exec user process caused: no such file or directory.

2. Actualización de docker-compose.yml (Configuración)

  • Inyección de Variables: Se agregaron explícitamente las variables de entorno (DB_HOST, core_install, cryptoKey, etc.) en la sección environment del servicio php-apache.
    • Razón: Docker Compose no pasa automáticamente las variables del archivo .env al contenedor a menos que se declaren. Sin esto, la aplicación PHP fallaba al conectar a la base de datos o encontrar la carpeta api porque las variables llegaban vacías.
  • Variables de Inicialización de MariaDB: Se corrigieron las variables del servicio mariadb para usar los nombres estándar de la imagen oficial (MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE) en lugar de nombres personalizados.
    • Razón: La imagen mariadb solo crea el usuario y la base de datos inicial si recibe estas variables específicas. Antes, la base de datos se inicializaba vacía (sin usuario/password correctos), causando errores de "Access denied".
  • Valores por Defecto: Se añadió soporte para valores por defecto (${VAR:-default}) en docker-compose.yml.
    • Razón: Permite que el proyecto funcione "out of the box" para pruebas rápidas sin obligar al usuario a configurar un .env completo desde el inicio.

Verificación

  • Construcción: docker-compose build se ejecuta exitosamente sin errores de repositorio.
  • Ejecución: docker-compose up -d levanta los servicios correctamente.
  • Prueba de API: http://localhost:8080/api.php?w=ejemplo&r=hola devuelve la respuesta esperada hola :).

@calebrio02 calebrio02 closed this Feb 13, 2026
@@ -1,11 +1,12 @@
FROM php:7.4.9-apache
FROM php:8.1-apache
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esto es correcto.

# VOLUME [ "/var/www/html" ]
# VOLUME [ "/var/www/api" ]
RUN apt-get update && apt-get -y install libpng-dev curl libcurl4-openssl-dev openssl netcat
RUN apt-get update && apt-get -y install libpng-dev curl libcurl4-openssl-dev openssl netcat-openbsd dos2unix
Copy link
Copy Markdown
Collaborator

@onier9702 onier9702 Mar 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Respecto a dos2unix, creo que no es necesario, pues normalmente un servidor no se usa en window y para ello se usa docker compose para evitar incompatibilidades, por ello creo que no es necesario.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

El problema es que el paquete netcat no está disponible en versiones recientes de Debian/Ubuntu. por lo cual se debe reemplazarlo por netcat-openbsd o netcat-traditional

RUN docker-php-ext-install pdo pdo_mysql mysqli gd curl
RUN a2enmod rewrite
COPY ./docker-php-apache/docker-entrypoint.sh /usr/local/bin/
RUN dos2unix /usr/local/bin/docker-entrypoint.sh
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lo mismo anteriormente, creo que no se ocupa.

DB_USERNAME: ${DB_USERNAME:-testuser}
DB_PASSWORD: ${DB_PASSWORD:-testpassword}
DB_HOST: ${DB_HOST:-mariadb}
core_install: ${core_install}
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Para que se ocupan estas nuevas variables introducidas ?? cualquier variable que se agrege nueva debe de actualizarse el env.example para tenerlo claro siempre. estas env nuevas se usan en el proyecto ?? No recuerdo que se utilizaran.

@@ -15,6 +14,14 @@ services:
CRLIBRE_API_HACIENDA_DB_NAME: ${DB_NAME:-testdb}
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Estas 3 variables que empiezan con CRLIBRE_API_HACIENDA_DB* no se ocuparian si se cambio el nombre a DB_NAME, DB_USERNAME ... etc. Se debe de tener env.example actualizado siempre para quien clone el repo sepa que se usa exactamente en las .env

MYSQL_ALLOW_EMPTY_PASSWORD: "no"
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-rootpwd}
MYSQL_USER: ${DB_USER:-testuser}
MYSQL_USER: ${DB_USERNAME:-testuser}
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Los nombres tienen que ser iguales a como se usan en el proyecto.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants