Cambios realizados: - concept_view.php: Agregado botón 'Guardar Todo' arriba y abajo de la tabla, eliminado botón individual por fila - dashboard.php: Agregado endpoint save_all_concept_payments para guardar múltiples pagos - docker-entrypoint.sh: Corregidos permisos de volúmenes para ZimaOS/CasaOS (cambia dueño a www-data) - docker/Dockerfile: Corregida ruta del entrypoint - build-and-push.sh: Script interactivo para crear imagen Docker con opción de caché/sin caché Los cambios permiten guardar todos los pagos de conceptos de una sola vez y mejoran la compatibilidad con despliegues en ZimaOS.
130 lines
4.6 KiB
PHP
Executable File
130 lines
4.6 KiB
PHP
Executable File
<?php
|
|
|
|
echo "=== IBIZA CEA - Script de Instalación Docker ===\n\n";
|
|
|
|
// Función para crear archivo .env interactivo
|
|
function createEnvFile() {
|
|
echo "Configuración de variables de entorno:\n\n";
|
|
|
|
// Entorno
|
|
$appEnv = readline("Entorno (local/production) [local]: ");
|
|
$appEnv = empty($appEnv) ? 'local' : $appEnv;
|
|
|
|
// URL del sitio
|
|
$siteUrl = readline("URL del sitio (ej: http://localhost/ibiza) [http://localhost]: ");
|
|
$siteUrl = empty($siteUrl) ? 'http://localhost' : $siteUrl;
|
|
|
|
// Configuración de base de datos
|
|
echo "\n--- Configuración de Base de Datos ---\n";
|
|
$dbHost = readline("Host de la base de datos [localhost]: ");
|
|
$dbHost = empty($dbHost) ? 'localhost' : $dbHost;
|
|
|
|
$dbPort = readline("Puerto de la base de datos [3306]: ");
|
|
$dbPort = empty($dbPort) ? '3306' : $dbPort;
|
|
|
|
$dbUser = readline("Usuario de la base de datos [root]: ");
|
|
$dbUser = empty($dbUser) ? 'root' : $dbUser;
|
|
|
|
$dbPass = readline("Contraseña de la base de datos: ");
|
|
|
|
$dbName = readline("Nombre de la base de datos [ibiza_db]: ");
|
|
$dbName = empty($dbName) ? 'ibiza_db' : $dbName;
|
|
|
|
// JWT Secret
|
|
$jwtSecret = readline("JWT Secret (presione Enter para generar automático): ");
|
|
if (empty($jwtSecret)) {
|
|
$jwtSecret = 'ibiza_jwt_' . bin2hex(random_bytes(16)) . '_' . date('Y');
|
|
}
|
|
|
|
// Crear archivo .env
|
|
$envContent = "# Entorno de aplicación\n";
|
|
$envContent .= "APP_ENV=$appEnv\n";
|
|
$envContent .= "SITE_URL=$siteUrl\n\n";
|
|
$envContent .= "# Base de datos local/desarrollo\n";
|
|
$envContent .= "LOCAL_DB_HOST=$dbHost\n";
|
|
$envContent .= "LOCAL_DB_PORT=$dbPort\n";
|
|
$envContent .= "LOCAL_DB_USER=$dbUser\n";
|
|
$envContent .= "LOCAL_DB_PASS=$dbPass\n";
|
|
$envContent .= "LOCAL_DB_NAME=$dbName\n\n";
|
|
$envContent .= "# Base de datos de producción\n";
|
|
$envContent .= "SERVER_DB_HOST=$dbHost\n";
|
|
$envContent .= "SERVER_DB_PORT=$dbPort\n";
|
|
$envContent .= "SERVER_DB_USER=$dbUser\n";
|
|
$envContent .= "SERVER_DB_PASS=$dbPass\n";
|
|
$envContent .= "SERVER_DB_NAME=$dbName\n\n";
|
|
$envContent .= "# Configuración de sesión\n";
|
|
$envContent .= "SESSION_TIMEOUT=28800\n";
|
|
$envContent .= "JWT_SECRET=$jwtSecret\n";
|
|
$envContent .= "JWT_EXPIRATION=86400\n";
|
|
|
|
file_put_contents(__DIR__ . '/.env', $envContent);
|
|
echo "\n✓ Archivo .env creado exitosamente\n\n";
|
|
}
|
|
|
|
// Verificar si existe .env
|
|
$configFile = __DIR__ . '/.env';
|
|
if (!file_exists($configFile) || empty(file_get_contents($configFile))) {
|
|
echo "Archivo .env no encontrado o vacío.\n";
|
|
$createEnv = readline("¿Desea crear archivo .env ahora? (s/n) [s]: ");
|
|
if (strtolower($createEnv) !== 'n') {
|
|
createEnvFile();
|
|
} else {
|
|
echo "Por favor cree el archivo .env manualmente antes de continuar.\n";
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
// Cargar configuración
|
|
require_once __DIR__ . '/config/config.php';
|
|
|
|
echo "Conectando a la base de datos...\n";
|
|
echo "Host: " . DB_HOST . "\n";
|
|
echo "Puerto: " . DB_PORT . "\n";
|
|
echo "Usuario: " . DB_USER . "\n";
|
|
echo "Base de datos: " . DB_NAME . "\n\n";
|
|
|
|
try {
|
|
$dsn = "mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";charset=utf8mb4";
|
|
$pdo = new PDO($dsn, DB_USER, DB_PASS);
|
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
echo "✓ Conexión exitosa\n\n";
|
|
} catch (PDOException $e) {
|
|
echo "✗ Error de conexión: " . $e->getMessage() . "\n";
|
|
echo "\nVerifique la configuración en el archivo .env\n";
|
|
exit(1);
|
|
}
|
|
|
|
// Verificar/crear base de datos
|
|
try {
|
|
$pdo->exec("CREATE DATABASE IF NOT EXISTS `" . DB_NAME . "` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
|
|
$pdo->exec("USE `" . DB_NAME . "`");
|
|
echo "✓ Base de datos verificada/creada: " . DB_NAME . "\n\n";
|
|
} catch (PDOException $e) {
|
|
echo "✗ Error al crear base de datos: " . $e->getMessage() . "\n";
|
|
exit(1);
|
|
}
|
|
|
|
$scriptPath = __DIR__ . '/database/schema.sql';
|
|
|
|
if (!file_exists($scriptPath)) {
|
|
echo "Error: Archivo schema.sql no encontrado en database/\n";
|
|
exit(1);
|
|
}
|
|
|
|
echo "Ejecutando script de base de datos...\n";
|
|
|
|
try {
|
|
$sql = file_get_contents($scriptPath);
|
|
$pdo->exec($sql);
|
|
echo "✓ Base de datos creada exitosamente\n\n";
|
|
} catch (PDOException $e) {
|
|
echo "✗ Error al crear base de datos: " . $e->getMessage() . "\n";
|
|
exit(1);
|
|
}
|
|
|
|
echo "=== Instalación Completada ===\n\n";
|
|
echo "Usuario por defecto:\n";
|
|
echo " Usuario: admin\n";
|
|
echo " Contraseña: admin123\n\n";
|
|
echo "Acceda al sistema en: " . SITE_URL . "/login.php\n";
|
|
echo "\nPara Docker, asegúrese de que las variables de entorno estén configuradas correctamente.\n"; |