Fix Docker environment: PHP 8.1, netcat, and env variables#223
Fix Docker environment: PHP 8.1, netcat, and env variables#223calebrio02 wants to merge 2 commits intoCRLibre:v4.4from
Conversation
| @@ -1,11 +1,12 @@ | |||
| FROM php:7.4.9-apache | |||
| FROM php:8.1-apache | |||
| # 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 |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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} |
There was a problem hiding this comment.
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} | |||
There was a problem hiding this comment.
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
docker-compose.yml
Outdated
| MYSQL_ALLOW_EMPTY_PASSWORD: "no" | ||
| MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-rootpwd} | ||
| MYSQL_USER: ${DB_USER:-testuser} | ||
| MYSQL_USER: ${DB_USERNAME:-testuser} |
There was a problem hiding this comment.
Los nombres tienen que ser iguales a como se usan en el proyecto.
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)
php:7.4-apacheaphp:8.1-apache.404 Not Foundal intentar hacerapt-get update. PHP 8.1 es una versión con soporte activo y retrocompatible para este proyecto.netcatpornetcat-openbsd.netcates virtual y no se puede instalar directamente. Se debe especificarnetcat-openbsdonetcat-traditional.dos2unixy se ejecutó sobredocker-entrypoint.sh.exec user process caused: no such file or directory.2. Actualización de docker-compose.yml (Configuración)
DB_HOST,core_install,cryptoKey, etc.) en la secciónenvironmentdel serviciophp-apache..enval contenedor a menos que se declaren. Sin esto, la aplicación PHP fallaba al conectar a la base de datos o encontrar la carpetaapiporque las variables llegaban vacías.mariadbpara usar los nombres estándar de la imagen oficial (MYSQL_USER,MYSQL_PASSWORD,MYSQL_DATABASE) en lugar de nombres personalizados.mariadbsolo 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".${VAR:-default}) endocker-compose.yml..envcompleto desde el inicio.Verificación
docker-compose buildse ejecuta exitosamente sin errores de repositorio.docker-compose up -dlevanta los servicios correctamente.http://localhost:8080/api.php?w=ejemplo&r=holadevuelve la respuesta esperadahola :).