fix: disable MariaDB SSL for internal Docker networking + worker MySQL readiness wait
This commit is contained in:
@@ -10,13 +10,17 @@ class Database {
|
|||||||
|
|
||||||
private function __construct() {
|
private function __construct() {
|
||||||
try {
|
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;
|
$dsn = "mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET;
|
||||||
$options = [
|
$options = [
|
||||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||||
PDO::ATTR_EMULATE_PREPARES => false,
|
PDO::ATTR_EMULATE_PREPARES => false,
|
||||||
PDO::ATTR_PERSISTENT => true,
|
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);
|
$this->pdo = new PDO($dsn, DB_USER, DB_PASS, $options);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- mysql-data:/var/lib/mysql
|
- mysql-data:/var/lib/mysql
|
||||||
- ./database:/docker-entrypoint-initdb.d:ro
|
- ./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:
|
networks:
|
||||||
- whatsapp-network
|
- whatsapp-network
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|||||||
@@ -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
|
cd /var/www/html && composer install --no-dev --optimize-autoloader --no-interaction 2>&1
|
||||||
fi
|
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 "$@"
|
exec su-exec www "$@"
|
||||||
|
|||||||
Reference in New Issue
Block a user