#!/usr/bin/env bash set -euo pipefail set +H # Desactiva la expansión de historial de Bash (!) para evitar fallos con contraseñas # ========================================== # PARÁMETROS CONFIGURABLES # ========================================== DB_NAME="moodle" DB_USER="moodleuser" DB_PASS='MoodlePass2026!Segura' MOODLE_WWW="/var/www/html/moodle" MOODLE_DATA="/var/moodledata" MOODLE_VERSION="v4.1.2" PHP_VER="8.1" ADMIN_USER="admin" ADMIN_PASS='AdminPass2026!Segura' ADMIN_EMAIL="admin@institucion.edu.ar" # Detectar IP primaria del LXC IP_ADDR=$(hostname -I | awk '{print $1}') MOODLE_URL="http://${IP_ADDR}/moodle" echo "=== [1/6] Actualizando sistema y paquetes base ===" apt update && apt upgrade -y apt install -y curl git unzip wget lsb-release ca-certificates apt-transport-https locales sudo # Configurar locales UTF-8 sed -i 's/# es_AR.UTF-8 UTF-8/es_AR.UTF-8 UTF-8/' /etc/locale.gen || true sed -i 's/# es_ES.UTF-8 UTF-8/es_ES.UTF-8 UTF-8/' /etc/locale.gen || true sed -i 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen || true locale-gen update-locale LANG=es_AR.UTF-8 echo "=== [2/6] Configurando repositorio DEB.SURY.ORG (PHP ${PHP_VER}) ===" curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list apt update echo "=== [3/6] Instalando Apache, MariaDB y módulos PHP ${PHP_VER} ===" apt install -y apache2 mariadb-server \ php${PHP_VER} libapache2-mod-php${PHP_VER} php${PHP_VER}-common \ php${PHP_VER}-mysql php${PHP_VER}-gd php${PHP_VER}-curl \ php${PHP_VER}-xml php${PHP_VER}-zip php${PHP_VER}-intl \ php${PHP_VER}-mbstring php${PHP_VER}-soap php${PHP_VER}-xmlrpc \ php${PHP_VER}-opcache php${PHP_VER}-cli echo "=== [4/6] Optimizando directivas de PHP y OPcache ===" for ini in "/etc/php/${PHP_VER}/apache2/php.ini" "/etc/php/${PHP_VER}/cli/php.ini"; do sed -i "s/^memory_limit = .*/memory_limit = 512M/" "$ini" sed -i "s/^upload_max_filesize = .*/upload_max_filesize = 128M/" "$ini" sed -i "s/^post_max_size = .*/post_max_size = 128M/" "$ini" sed -i "s/^max_execution_time = .*/max_execution_time = 300/" "$ini" sed -i 's/^;[[:space:]]*max_input_vars = .*/max_input_vars = 5000/' "$ini" grep -q "^max_input_vars" "$ini" || echo "max_input_vars = 5000" >> "$ini" # Directivas OPcache sed -i "s/^;opcache.enable=1/opcache.enable=1/" "$ini" sed -i "s/^;opcache.memory_consumption=.*/opcache.memory_consumption=128/" "$ini" sed -i "s/^;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/" "$ini" sed -i "s/^;opcache.revalidate_freq=.*/opcache.revalidate_freq=60/" "$ini" done echo "=== [5/6] Configurando MariaDB (InnoDB & utf8mb4) ===" cat < /etc/mysql/mariadb.conf.d/99-moodle.cnf [mysqld] default_storage_engine = InnoDB innodb_file_per_table = 1 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci skip-character-set-client-handshake EOF systemctl restart mariadb systemctl enable --now mariadb apache2 mariadb -u root < /etc/cron.d/moodle * * * * * www-data /usr/bin/php${PHP_VER} ${MOODLE_WWW}/admin/cli/cron.php >/dev/null 2>&1 EOF systemctl restart apache2 echo "---------------------------------------------------------" echo " Despliegue completado con éxito en Debian 12" echo " URL: ${MOODLE_URL}" echo " Usuario: ${ADMIN_USER}" echo " Password: ${ADMIN_PASS}" echo "---------------------------------------------------------"