126 lines
4.8 KiB
Bash
126 lines
4.8 KiB
Bash
#!/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 <<EOF > /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 <<SQL
|
|
DROP DATABASE IF EXISTS \`${DB_NAME}\`;
|
|
CREATE DATABASE \`${DB_NAME}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
CREATE USER IF NOT EXISTS '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
|
|
GRANT ALL PRIVILEGES ON \`${DB_NAME}\`.* TO '${DB_USER}'@'localhost';
|
|
FLUSH PRIVILEGES;
|
|
SQL
|
|
|
|
echo "=== [6/6] Descargando Moodle ${MOODLE_VERSION} e instalando vía CLI ==="
|
|
rm -rf "$MOODLE_WWW"
|
|
git clone --branch "$MOODLE_VERSION" --depth 1 https://github.com/moodle/moodle.git "$MOODLE_WWW"
|
|
|
|
mkdir -p "$MOODLE_DATA"
|
|
rm -rf "${MOODLE_DATA:?}"/*
|
|
chown -R www-data:www-data "$MOODLE_WWW" "$MOODLE_DATA"
|
|
chmod -R 755 "$MOODLE_WWW"
|
|
chmod -R 777 "$MOODLE_DATA"
|
|
|
|
# Ejecución desde el directorio de Moodle para evitar advertencias de chdir()
|
|
cd "$MOODLE_WWW"
|
|
sudo -u www-data php${PHP_VER} admin/cli/install.php \
|
|
--lang=es \
|
|
--chmod=2777 \
|
|
--wwwroot="$MOODLE_URL" \
|
|
--dataroot="$MOODLE_DATA" \
|
|
--dbtype=mariadb \
|
|
--dbhost=localhost \
|
|
--dbname="$DB_NAME" \
|
|
--dbuser="$DB_USER" \
|
|
--dbpass="$DB_PASS" \
|
|
--fullname="Campus Virtual 4.1.2" \
|
|
--shortname="Campus412" \
|
|
--adminuser="$ADMIN_USER" \
|
|
--adminpass="$ADMIN_PASS" \
|
|
--adminemail="$ADMIN_EMAIL" \
|
|
--non-interactive \
|
|
--agree-license
|
|
|
|
# Configurar cronjob en segundo plano
|
|
cat <<EOF > /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 "---------------------------------------------------------" |