From 1b9942442a0755428d4d8d6111c697bac5cd0378 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Wed, 11 Mar 2026 20:22:19 -0500 Subject: [PATCH] fix: disable MariaDB SSL for internal Docker networking + worker MySQL readiness wait --- classes/Database.php | 6 +++++- docker-compose.prod.yml | 2 +- docker/worker-entrypoint.sh | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/classes/Database.php b/classes/Database.php index e4a9efd..bdc5b54 100644 --- a/classes/Database.php +++ b/classes/Database.php @@ -10,13 +10,17 @@ class Database { private function __construct() { try { + // Añadir ssl-mode=DISABLED al DSN para entornos Docker internos donde + // la comunicación es ya privada (contenedor → contenedor en la misma red). $dsn = "mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_PERSISTENT => true, - (class_exists('Pdo\Mysql') ? \Pdo\Mysql::ATTR_INIT_COMMAND : PDO::MYSQL_ATTR_INIT_COMMAND) => "SET NAMES " . DB_CHARSET . " COLLATE utf8mb4_unicode_ci" + (class_exists('Pdo\Mysql') ? \Pdo\Mysql::ATTR_INIT_COMMAND : PDO::MYSQL_ATTR_INIT_COMMAND) => "SET NAMES " . DB_CHARSET . " COLLATE utf8mb4_unicode_ci", + // Deshabilitar verificación SSL — conexión interna Docker (sin certificados) + PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false, ]; $this->pdo = new PDO($dsn, DB_USER, DB_PASS, $options); diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 5abd33f..41d1190 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -16,7 +16,7 @@ services: volumes: - mysql-data:/var/lib/mysql - ./database:/docker-entrypoint-initdb.d:ro - command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone=America/Bogota + command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone=America/Bogota --skip-ssl networks: - whatsapp-network healthcheck: diff --git a/docker/worker-entrypoint.sh b/docker/worker-entrypoint.sh index 6f4dd88..7ed1c30 100644 --- a/docker/worker-entrypoint.sh +++ b/docker/worker-entrypoint.sh @@ -11,4 +11,22 @@ if [ ! -f /var/www/html/vendor/autoload.php ]; then cd /var/www/html && composer install --no-dev --optimize-autoloader --no-interaction 2>&1 fi +# Esperar a que MySQL esté disponible antes de arrancar el worker +DB_HOST="${DB_HOST:-mysql}" +DB_PORT="${DB_PORT:-3306}" +RETRIES=30 +echo "Esperando MySQL en ${DB_HOST}:${DB_PORT}..." +while [ $RETRIES -gt 0 ]; do + if nc -z "$DB_HOST" "$DB_PORT" 2>/dev/null; then + echo "MySQL disponible." + break + fi + RETRIES=$((RETRIES - 1)) + echo "MySQL no disponible, esperando... ($RETRIES intentos restantes)" + sleep 2 +done +if [ $RETRIES -eq 0 ]; then + echo "ADVERTENCIA: MySQL no respondió después de 60s, arrancando worker de todas formas..." +fi + exec su-exec www "$@"