From b606561e5c954c190e2282f9a2c669c308bbb5d6 Mon Sep 17 00:00:00 2001 From: Miguelbc16 Date: Wed, 29 Oct 2025 04:29:06 -0500 Subject: [PATCH 1/2] fix: MySQL connection timeout in automatic WordPress installation --- docker-compose.yaml | 8 ++- docker/entrypoint.sh | 12 ++-- docker/init-wordpress.sh | 132 +++++++++++++++++++++++++++------------ 3 files changed, 104 insertions(+), 48 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 331d6dd..cb2c73c 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -15,9 +15,11 @@ services: - mysql_data:/var/lib/mysql command: --default-authentication-plugin=mysql_native_password healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] - timeout: 20s - retries: 10 + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "wordpress", "-pwordpress"] + interval: 5s + timeout: 10s + retries: 20 + start_period: 30s # phpMyAdmin para gestión de base de datos phpmyadmin: diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 8db59aa..d57b692 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -1,17 +1,21 @@ #!/bin/bash set -e +echo "🚀 Iniciando contenedor de WordPress..." + # Ejecutar el entrypoint original de WordPress docker-entrypoint.sh "$@" & # Obtener el PID del proceso de WordPress WORDPRESS_PID=$! -# Esperar un poco para que WordPress se inicie -sleep 10 +echo "⏳ Esperando a que WordPress se inicie..." +# Esperar más tiempo para que WordPress se inicie completamente +sleep 30 -# Ejecutar la inicialización en segundo plano -/docker-scripts/init-wordpress.sh & +echo "🔧 Ejecutando script de inicialización de WordPress..." +# Ejecutar la inicialización en segundo plano con logging +/docker-scripts/init-wordpress.sh 2>&1 | tee /tmp/init-wordpress.log & # Esperar a que WordPress termine wait $WORDPRESS_PID diff --git a/docker/init-wordpress.sh b/docker/init-wordpress.sh index f2fa2fa..c6baa58 100644 --- a/docker/init-wordpress.sh +++ b/docker/init-wordpress.sh @@ -1,33 +1,76 @@ #!/bin/bash # Script para inicializar WordPress automáticamente -set -e +# NO usar 'set -e' para manejar errores manualmente +set +e echo "🚀 Iniciando configuración automática de WordPress..." +echo "📅 $(date)" -# Esperar a que MySQL esté listo +# Esperar a que MySQL esté listo con timeout echo "⏳ Esperando a que MySQL esté disponible..." -while ! mysqladmin ping -h"mysql" -u"wordpress" -p"wordpress" --silent; do - sleep 1 +MYSQL_TIMEOUT=120 # 2 minutos +MYSQL_COUNTER=0 +MYSQL_READY=false + +while [ $MYSQL_COUNTER -lt $MYSQL_TIMEOUT ]; do + if mysqladmin ping -h"mysql" -u"wordpress" -p"wordpress" --skip-ssl --silent 2>/dev/null; then + MYSQL_READY=true + echo "✅ MySQL está listo (después de ${MYSQL_COUNTER} segundos)" + break + fi + + if [ $((MYSQL_COUNTER % 10)) -eq 0 ]; then + echo " ⏱️ Esperando MySQL... (${MYSQL_COUNTER}/${MYSQL_TIMEOUT}s)" + fi + + sleep 2 + MYSQL_COUNTER=$((MYSQL_COUNTER + 2)) done -echo "✅ MySQL está listo" -# Esperar a que WordPress esté disponible +if [ "$MYSQL_READY" = false ]; then + echo "❌ ERROR: MySQL no está disponible después de ${MYSQL_TIMEOUT} segundos" + echo "❌ Verifica que el contenedor de MySQL esté corriendo correctamente" + echo "💡 Ejecuta: docker compose logs mysql" + exit 1 +fi + +# Esperar a que WordPress esté disponible con timeout echo "⏳ Esperando a que WordPress esté disponible..." -while ! curl -s http://localhost > /dev/null; do +WP_TIMEOUT=60 # 1 minuto +WP_COUNTER=0 +WP_READY=false + +while [ $WP_COUNTER -lt $WP_TIMEOUT ]; do + if curl -s http://localhost > /dev/null 2>&1; then + WP_READY=true + echo "✅ WordPress está disponible (después de ${WP_COUNTER} segundos)" + break + fi + + if [ $((WP_COUNTER % 10)) -eq 0 ]; then + echo " ⏱️ Esperando WordPress... (${WP_COUNTER}/${WP_TIMEOUT}s)" + fi + sleep 2 + WP_COUNTER=$((WP_COUNTER + 2)) done -echo "✅ WordPress está disponible" + +if [ "$WP_READY" = false ]; then + echo "❌ ERROR: WordPress no está disponible después de ${WP_TIMEOUT} segundos" + echo "❌ Verifica que Apache esté corriendo correctamente" + exit 1 +fi # Verificar si WordPress ya está instalado -if wp core is-installed --allow-root --path=/var/www/html; then +if wp core is-installed --allow-root --path=/var/www/html --quiet 2>/dev/null; then echo "✅ WordPress ya está instalado" # Actualizar WordPress a la última versión echo "🔄 Verificando actualizaciones de WordPress..." - if wp core check-update --allow-root --path=/var/www/html --format=count; then + if wp core check-update --allow-root --path=/var/www/html --format=count --quiet 2>/dev/null | grep -q "^[1-9]"; then echo "📥 Actualizando WordPress a la última versión..." - wp core update --allow-root --path=/var/www/html + wp core update --allow-root --path=/var/www/html --quiet 2>/dev/null echo "✅ WordPress actualizado correctamente" else echo "✅ WordPress ya está en la última versión" @@ -43,73 +86,80 @@ else --admin_password="test" \ --admin_email="test@antonella.test" \ --allow-root \ - --path=/var/www/html + --path=/var/www/html \ + --quiet 2>/dev/null echo "✅ WordPress instalado correctamente" # Actualizar WordPress a la última versión después de la instalación echo "🔄 Actualizando WordPress a la última versión..." - wp core update --allow-root --path=/var/www/html + wp core update --allow-root --path=/var/www/html --quiet 2>/dev/null echo "✅ WordPress actualizado a la última versión" fi # Desinstalar plugins por defecto de WordPress echo "🗑️ Desinstalando plugins por defecto..." -wp plugin delete hello-dolly --allow-root --path=/var/www/html || echo "⚠️ Hello Dolly ya no está instalado" -wp plugin delete akismet --allow-root --path=/var/www/html || echo "⚠️ Akismet ya no está instalado" +wp plugin delete hello-dolly --allow-root --path=/var/www/html --quiet 2>/dev/null || true +wp plugin delete akismet --allow-root --path=/var/www/html --quiet 2>/dev/null || true echo "✅ Plugins por defecto eliminados" -# Activar el framework Antonella -echo "🔌 Activando Antonella Framework..." -wp plugin activate antonella-framework --allow-root --path=/var/www/html || echo "⚠️ Plugin antonella-framework no encontrado, asegúrate de que esté en la carpeta correcta" +# Activar el framework Antonella (si existe) +echo "🔌 Verificando Antonella Framework..." +if wp plugin list --name=antonella-framework --allow-root --path=/var/www/html --format=count 2>/dev/null | grep -q "1"; then + wp plugin activate antonella-framework --allow-root --path=/var/www/html 2>/dev/null && echo "✅ Antonella Framework activado" || echo "⚠️ No se pudo activar antonella-framework" +else + echo "ℹ️ Plugin antonella-framework no encontrado (se activará cuando esté disponible)" +fi # Instalar y activar Plugin Check -echo "📥 Instalando Plugin Check..." -wp plugin install plugin-check --activate --allow-root --path=/var/www/html - -# Instalar otros plugins útiles para desarrollo -echo "📥 Instalando plugins adicionales para desarrollo..." +echo "📥 Instalando plugins de desarrollo..." +wp plugin install plugin-check --activate --allow-root --path=/var/www/html --quiet 2>/dev/null || true # Query Monitor - Para debugging -wp plugin install query-monitor --activate --allow-root --path=/var/www/html +wp plugin install query-monitor --activate --allow-root --path=/var/www/html --quiet 2>/dev/null || true # Debug Bar - Para debugging adicional -wp plugin install debug-bar --activate --allow-root --path=/var/www/html +wp plugin install debug-bar --activate --allow-root --path=/var/www/html --quiet 2>/dev/null || true # Theme Check - Para verificar temas -wp plugin install theme-check --activate --allow-root --path=/var/www/html +wp plugin install theme-check --activate --allow-root --path=/var/www/html --quiet 2>/dev/null || true -# Developer - Herramientas de desarrollo -wp plugin install developer --activate --allow-root --path=/var/www/html +echo "✅ Plugins de desarrollo instalados" # Configurar tema por defecto echo "🎨 Configurando tema..." -wp theme activate twentytwentyfour --allow-root --path=/var/www/html +wp theme activate twentytwentyfour --allow-root --path=/var/www/html --quiet 2>/dev/null || true +echo "✅ Tema configurado" # Configurar permalinks echo "🔗 Configurando permalinks..." -wp rewrite structure '/%postname%/' --allow-root --path=/var/www/html -wp rewrite flush --allow-root --path=/var/www/html +wp rewrite structure '/%postname%/' --allow-root --path=/var/www/html --quiet 2>/dev/null +wp rewrite flush --allow-root --path=/var/www/html --quiet 2>/dev/null echo "✅ Permalinks configurados" # Corregir permisos de WordPress para actualizaciones echo "🔧 Corrigiendo permisos de WordPress..." -chown -R www-data:www-data /var/www/html/wp-content/ -chmod -R 755 /var/www/html/wp-content/ -chmod -R 775 /var/www/html/wp-content/uploads/ -chmod -R 775 /var/www/html/wp-content/upgrade/ -echo "✅ Permisos de WordPress corregidos" +# Excluir directorios montados del host para evitar errores de permisos en Linux +find /var/www/html/wp-content/ -maxdepth 1 -type d ! -name 'plugins' ! -name 'debug.log' -exec chown -R www-data:www-data {} + 2>/dev/null || true +find /var/www/html/wp-content/ -maxdepth 1 -type d ! -name 'plugins' ! -name 'debug.log' -exec chmod -R 755 {} + 2>/dev/null || true + +# Crear y dar permisos a directorios necesarios +mkdir -p /var/www/html/wp-content/uploads /var/www/html/wp-content/upgrade 2>/dev/null || true +chown -R www-data:www-data /var/www/html/wp-content/uploads /var/www/html/wp-content/upgrade 2>/dev/null || true +chmod -R 775 /var/www/html/wp-content/uploads /var/www/html/wp-content/upgrade 2>/dev/null || true +echo "✅ Permisos de WordPress configurados" # Configurar opciones de desarrollo echo "⚙️ Configurando opciones de desarrollo..." -wp option update blog_public 0 --allow-root --path=/var/www/html # No indexar por motores de búsqueda -wp option update users_can_register 1 --allow-root --path=/var/www/html # Permitir registro de usuarios +wp option update blog_public 0 --allow-root --path=/var/www/html --quiet 2>/dev/null +wp option update users_can_register 1 --allow-root --path=/var/www/html --quiet 2>/dev/null +echo "✅ Opciones de desarrollo configuradas" # Crear contenido de ejemplo echo "📝 Creando contenido de ejemplo..." -wp post create --post_type=page --post_title="Página de Prueba Antonella" --post_content="Esta es una página de prueba para el framework Antonella." --post_status=publish --allow-root --path=/var/www/html - -wp post create --post_title="Post de Prueba Antonella" --post_content="Este es un post de prueba para demostrar las funcionalidades del framework Antonella." --post_status=publish --allow-root --path=/var/www/html +wp post create --post_type=page --post_title="Página de Prueba Antonella" --post_content="Esta es una página de prueba para el framework Antonella." --post_status=publish --allow-root --path=/var/www/html --quiet 2>/dev/null || true +wp post create --post_title="Post de Prueba Antonella" --post_content="Este es un post de prueba para demostrar las funcionalidades del framework Antonella." --post_status=publish --allow-root --path=/var/www/html --quiet 2>/dev/null || true +echo "✅ Contenido de ejemplo creado" echo "🎉 ¡Configuración completada!" echo "📍 Accede a tu sitio en: http://localhost:8080" From d0238bbefe256238cb953b5ba4a92e58c70ab375 Mon Sep 17 00:00:00 2001 From: Miguelbc16 Date: Thu, 6 Nov 2025 05:43:27 -0500 Subject: [PATCH 2/2] fix: Force LF line endings for shell scripts to fix Windows Docker compatibility --- .gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitattributes b/.gitattributes index bdb0cab..49c0d8b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15,3 +15,4 @@ *.PDF diff=astextplain *.rtf diff=astextplain *.RTF diff=astextplain +*.sh text eol=lf \ No newline at end of file