网站首页 > 技术文章 正文
一、Moodle 简介
Moodle(Modular Object-Oriented Dynamic Learning Environment)是一个开源的在线学习管理系统(LMS),广泛应用于教育机构和企业培训。其核心功能包括课程管理、作业提交、在线测试、论坛互动和成绩跟踪等。以下为从零开始安装并配置 Moodle 的完整指南。
二、安装前准备
1. 系统要求
- 操作系统:Linux(推荐 Ubuntu/CentOS)、Windows Server 或 macOS
- Web 服务器:Apache/Nginx(推荐 Apache)
- 数据库:MySQL 8.0+/MariaDB 10.6+/PostgreSQL 13+
- PHP 版本:8.0 或更高
- 内存:建议 4GB 以上
- 存储空间:至少 5GB(根据课程内容动态扩展)
2. 环境依赖安装
这里使用的是centos 7
#!/bin/bash
# Moodle 4.5.x 环境准备脚本 (CentOS 7)
# 版本:1.2
# 最后更新:2024-06-11
# 配置参数
DOMAIN="yourdomain.com" # 修改为实际域名
DB_NAME="moodle" # 数据库名称
DB_USER="moodle_user" # 数据库用户
MOODLE_DATA_DIR="/var/moodledata" # Moodle数据目录
WEB_ROOT="/var/www/html/moodle" # Web根目录
# 生成随机数据库密码
DB_PASS=$(openssl rand -base64 16)
# 步骤 1 - 系统更新和基础包
yum update -y
yum install -y epel-release wget curl git unzip nano
# 步骤 2 - 添加软件仓库
# 添加 Remi PHP 8.1 仓库
rpm -Uvh https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php81
# 添加 MariaDB 10.11 仓库
cat > /etc/yum.repos.d/MariaDB.repo <<EOF
[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.11/centos7-amd64
gpgkey = https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
# 步骤 3 - 安装 PHP 8.1
yum install -y php php-fpm php-common php-opcache php-pecl-apcu php-cli \
php-gd php-curl php-mysqlnd php-zip php-xml php-mbstring php-json php-intl \
php-pecl-zip php-soap php-ldap php-redis
# 步骤 4 - 安装 MariaDB
yum install -y MariaDB-server MariaDB-client
# 步骤 5 - 安装 Apache
yum install -y httpd
# 步骤 6 - 配置 PHP
# 调整 PHP 设置
sed -i 's/^;date.timezone =/date.timezone = Asia\/Shanghai/' /etc/php.ini
sed -i 's/^memory_limit =.*/memory_limit = 512M/' /etc/php.ini
sed -i 's/^max_execution_time =.*/max_execution_time = 300/' /etc/php.ini
sed -i 's/^upload_max_filesize =.*/upload_max_filesize = 256M/' /etc/php.ini
sed -i 's/^post_max_size =.*/post_max_size = 256M/' /etc/php.ini
# 步骤 7 - 配置数据库
systemctl start mariadb
systemctl enable mariadb
# 安全配置数据库
mysql_secure_installation <<EOF
y
${DB_PASS}
${DB_PASS}
y
y
y
y
EOF
# 创建 Moodle 数据库
mysql -u root -p${DB_PASS} <<MYSQL_SCRIPT
CREATE DATABASE ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASS}';
GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';
FLUSH PRIVILEGES;
MYSQL_SCRIPT
# 步骤 8 - 配置 Apache
# 创建虚拟主机配置
cat > /etc/httpd/conf.d/moodle.conf <<EOF
<VirtualHost *:80>
ServerName ${DOMAIN}
DocumentRoot ${WEB_ROOT}
<Directory ${WEB_ROOT}>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/moodle_error.log
CustomLog /var/log/httpd/moodle_access.log combined
</VirtualHost>
EOF
# 启用必要模块
a2enmod rewrite ssl
systemctl restart httpd
systemctl enable httpd php-fpm
# 步骤 9 - 准备目录结构
mkdir -p ${WEB_ROOT} ${MOODLE_DATA_DIR}
chown -R apache:apache ${WEB_ROOT} ${MOODLE_DATA_DIR}
chmod -R 755 ${WEB_ROOT} ${MOODLE_DATA_DIR}
# 步骤 10 - 安装 SSL 证书 (可选)
echo "是否需要安装 Let's Encrypt SSL 证书? [y/N]"
read SSL_CHOICE
if [ "$SSL_CHOICE" = "y" ] || [ "$SSL_CHOICE" = "Y" ]; then
yum install -y certbot python3-certbot-apache
certbot --apache -d ${DOMAIN}
fi
# 步骤 11 - SELinux 配置
setsebool -P httpd_can_network_connect 1
semanage fcontext -a -t httpd_sys_rw_content_t "${WEB_ROOT}(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t "${MOODLE_DATA_DIR}(/.*)?"
restorecon -Rv ${WEB_ROOT} ${MOODLE_DATA_DIR}
# 步骤 12 - 防火墙配置
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# 显示安装摘要
echo ""
echo "========== 安装完成 =========="
echo "数据库名称: ${DB_NAME}"
echo "数据库用户: ${DB_USER}"
echo "数据库密码: ${DB_PASS}"
echo "网站目录: ${WEB_ROOT}"
echo "数据目录: ${MOODLE_DATA_DIR}"
echo "后续步骤:"
echo "1. 将 Moodle 文件上传到 ${WEB_ROOT}"
echo "2. 访问 http://${DOMAIN} 完成安装向导"
echo "3. 设置 cron 任务:*/5 * * * * /usr/bin/php ${WEB_ROOT}/admin/cli/cron.php"
PHP max_input_vars 不足
步骤 1 - 修改 PHP 配置文件
# 查找 php.ini 路径
php -i | grep "Loaded Configuration File"
# 编辑配置文件(以 CentOS 为例)
sudo vim /etc/php.ini
; 原始值
max_input_vars = 1000
; 修改为
max_input_vars = 5000
# Apache 服务器
sudo systemctl restart httpd
# PHP-FPM 服务
sudo systemctl restart php-fpm
# Nginx + PHP-FPM
sudo systemctl restart nginx php-fpm
三、上传 Moodle 代码:
wget https://download.moodle.org/download.php/direct/stable405/moodle-latest-405.tgz
tar -zxvf moodle-latest-405.tgz -C ${WEB_ROOT} --strip-components=1
chown -R apache:apache ${WEB_ROOT}
浏览器访问完成安装:
数据库类型:MariaDB
数据库主机:localhost
使用脚本生成的数据库凭证
猜你喜欢
- 2025-06-10 开发程序不写代码,而是靠拼图?(制作拼图小游戏的c语言代码)
- 2025-06-10 用WordPress建站哪些插件会拖慢速度影响排名?
- 2025-06-10 3分钟短文:一看就是干货!Laravel迁移数据库
- 2025-06-10 如何让WordPress博客的投稿者也可以上传图片的方法
- 2025-06-10 Serverless 工程实践 | 快速搭建 Kubeless 平台
- 2025-06-10 腾讯云云函数部署laravel项目(github腾讯云函数部署)
- 2025-06-10 如何搭建内网服务器:详细教程(建立内网服务器)
- 2025-06-10 浅谈几种常见的分布式ID(分布式id生成算法)
- 2025-06-10 Wordpress建站教程:上传图片重命名,避免中文名影响SEO优化
- 2025-06-10 如何自定义样式营销qq在线咨询代码
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)