Add deploy-moodle.sh
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
#!/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 "---------------------------------------------------------"
|
||||
Reference in New Issue
Block a user