当前位置: 首页 > news >正文

企业/学校如何自建在线“慕课“教学平台?Moodle 开源 LMS 初识与部署全攻略

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]

0x00 前言简述

背景说明

出于内部学习平台搭建需要,领导吩咐我去探究部署一些开源学习平台,要求支持Office协同文档、学习课程发布、学习记录反馈和支持 OAuth2 客户端以对接内部开发的 OAuth2 服务器,经过一番调研,虽然有MoodleOLATSakaiWebCT平台 ,最终选择了开源的 Moodle 作为搭建的学习平台,考虑到国内对应的开源社区较少,加之国内用户对 Moodle 的使用较为陌生,遂作者将自身学习和实践经验进行总结,希望能帮助到有类似需求的读者,让其可用快速安装部署上手,

温馨提示:若文章代码块中存在乱码或不能复制,请联系作者,也可通过文末的阅读原文链接,加入知识星球中阅读,原文链接:https://articles.zsxq.com/id_5zw6r3wmblt8.html

Moodle简介

Moodle 是一个全球广泛使用的‌开源学习管理系统(LMS)‌,全称为Modular Object-Oriented Dynamic Learning Environment(模块化面向对象动态学习环境),其创建者为马丁·多基马Martin Dougiamas, PS: 开首的"M"字本来是创建者马丁·多基马(Martin Dougiamas)的名字的第一个字母),为全世界有150余国70种语言所使用,其特色异于其他商业线上教学平台,用户可通过其官网(https://moodle.org/)获取软件或加入社区 。

weiyigeek.top-moodle官网图

核心功能

  • • ‌主要功能‌:Moodle 提供全面的在线学习工具,支持‌课程管理‌、学习管理及网站管理。‌‌

  • • ‌课程活动‌:包含论坛、测验、资源、投票、问卷调查、作业、聊天室、Blog 和 Wiki 等丰富模块 ‌‌

  • • ‌用户管理‌:支持学生日志作为个人收藏空间,并提供灵活的用户权限设置。‌‌

  • • ‌教育理念‌:系统设计基于‌社会建构主义‌教育框架,强调师生及学生间的协作与互动。‌‌

  • • ‌协作学习‌:允许用户共同思考、解决问题,通过互动建立概念和集体认知。‌‌

  • • ‌平等主体‌:教育者与学习者被视为平等主体,共同建构知识。‌‌

技术架构与安全性

  • • ‌技术基础‌:Moodle 是免费的开放源代码软件,基于‌PHP‌语言开发,可在几乎任何支持 PHP 的平台上安装。‌‌

  • • ‌数据库支持‌:具有全面的数据库抽象层,支持所有主流数据库。‌‌

  • • ‌易用性‌:界面简单精巧,使用者可根据需要调整界面,且无需专业培训即可掌握基本操作。‌‌

  • • ‌安全机制‌:系统注重全面的安全性,所有表单均被检查,数据经过校验。‌‌

  • • ‌身份验证‌:用户注册时需通过电子邮件进行首次登录验证,且同一邮件地址不可在同一课程重复注册。‌

  • • ‌数据加密‌:Cookie 被加密,部分课程访问可能需要密码,以增强安全性。‌‌

应用与开源生态

  • • ‌应用范围‌:Moodle 是一个全球性的开发项目,在各国已广泛应用,包括中国的多所高校和机构。‌‌

  • • ‌典型案例‌:在中国,国家开放大学、浙江万里等均采用该平台进行在线教学或课程建设。‌‌‌

  • • ‌开源许可‌:软件在‌GNU 公共许可协议‌下发布,用户可自由复制、使用或修改,但需保留原有版权和许可。‌‌

  • • ‌社区支持‌:拥有活跃的全球社区,提供贡献、下载、追踪及政策声明等支持服务。‌‌‌

好了,更多介绍请参考 Google 或其官网,此处不再赘述。


0x01 安装实践

环境准备

描述:当前最新版本为5.1.3+,此处以国产化操作系统OpenEuler 24.03 TLS为例进行源码安装实践(非容器),温馨提示,作者已经将该系统进行安全加固,满足等保三级要求,加固文档《OpenEuler 24.03系统主机安全加固及配置优化实践指南》和视频教程《[https://weixin.qq.com/sph/ArEiuXqxR0]》由需要的看友可以自取。

  • • 操作系统:OpenEuler 24.03 TLS

  • • Moodle 版本:5.1.3+ (最新稳定版)

  • • PHP 版本:8.2+

  • • 数据库:MySQL 8.x (MariaDB 10.11.x 也支持) / Redis 7.x (用于缓存)

  • • Web 服务器:Nginx 1.29.0


安装步骤

假设,这里你已经准备好了操作系统环境,接下来将一步步带你完成 Moodle 的安装。

步骤 01.从 Moodle 官网下载最新版本源代码包(建议下载5.1.3+STABLE 版本):https://download.moodle.org/releases/latest/ , 注意核对 md5 和 sha256 校验码,确保下载的 moodle-latest-501.tgz 无误。

# MD5(moodle-latest-501.tgz)= 95f0756cd323352d850bef08b9254913 $ md5sum moodle-latest-501.tgz 95f0756cd323352d850bef08b9254913 moodle-latest-501.tgz
weiyigeek.top-下载最新版本源代码包图

步骤 02.将下载的源代码包解压上传并解压到/opt/moodle目录下,并创建数据存放目录,此处以/opt/moodle/moodledata为例。

# 永久以及暂时禁用SELinux强制。 sed -i s/^SELINUX=.*$/SELINUX=disabled/ /etc/selinux/config && setenforce 0 # 创建数据目录,并赋予相应权限。 mkdir /opt/moodle/moodledata tar -zxvf moodle-latest-501.tgz -C /opt/moodle mv /opt/moodle/moodle /opt/moodle/www

步骤 03.在生产或开发环境中,Nginx 本身无法解析 PHP,需要借助 PHP-FPM(FastCGI Process Manager) 来处理动态请求。下面进行安装 PHP 和相关扩展,不同版本 Moodle 对 PHP 版本的要求略有不同,以下是 Moodle 各版本的 PHP 支持范围,请确保64位 PHP 版本至少为8.2。PHP 设置文档:https://docs.moodle.org/501/en/PHP

Moodle 4.1 (LTS) requires PHP 7.4 to 8.1 Moodle 4.2 requires PHP 8.0 to 8.2 Moodle 4.3 requires PHP 8.0 to 8.2 Moodle 4.4 requires PHP 8.1 to 8.3 Moodle 4.5 (LTS) requires PHP 8.1 to 8.3 Moodle 5.0 requires PHP 8.2 to 8.4 Moodle 5.1 requires PHP 8.2 to 8.4

PHP 及其扩展和库说明安装,参考文档:https://docs.moodle.org/501/en/PHP

# Required extensions(依赖扩展) ctype curl dom gd iconv intl : 涉及课程排序和字符处理,必须安装。 json mbstring : 处理中文等多字节字符的核心。 pcre simplexml spl xml : 包含所有 XML 解析组件。 zip : 用于 Moodle 插件包的解压 pdo, pgsql, mysqli, sqlsrv, oci8 : 数据库驱动,根据需求安装其中一个。 opcache :性能核心,建议设置 `opcache.memory_consumption=512`。 # Recommended extensions(推荐扩展) openssl (required for networking and web services) soap (required for web services) sodium (required on PHP 8 and above) tokenizer xmlrpc (required for networking and web services)

在 OpenEuler 上使用 yum/dnf 命令安装 php 及其扩展,如下所示:

dnf update dnf install php php-cli php-fpm php-common php-devel php-curl php-gd php-zip php-intl php-json php-mbstring php-pcre php-pecl-zip php-mysqlnd php-opcache php-pdo php-xml php-spl php-soap php-sodium -y
weiyigeek.top-安装 php 及其扩展图

步骤 04.使用 pecl 安装 Redis 扩展,并配置启用。

# pecl 命令通常包含在 php-pear 软件包中 # php-devel:包含了编译 PHP 扩展时需要的头文件和工具(如 phpize) # php-pear:PEAR 包管理器,PECL 是其一部分,安装后会提供 pecl 命令 sudo yum install php-devel php-pear pecl version # 安装 redis 扩展 pecl install redis # 添加扩展配置到 .ini 文件 tee /etc/php.d/20-redis.ini <<EOF ; Enable redis extension module extension=redis.so EOF # 重启 PHP-FPM 服务以使更改生效 systemctl restart php-fpm.service # 验证 Redis 扩展是否已安装并启用 php -m | grep "redis" redis # 若输出则表示已安装并启用
weiyigeek.top-使用pecl安装redis图

步骤 05.Moodle 5.1 版本数据库依赖最低版本号,建议运行任何软件的最新稳定版本,此处以MariaDB 11.6.2 、Redis 7.2.4为例进行安装。

# 最低版本要求 MySQL 8.4 (last increased in Moodle 5.0) Latest MariaDB 10.11.0 (last increased in Moodle 5.0) Latest

使用容器安装部署 MariaDB 11.6.2,配置操作如下所示:

# 持久化目录 (此处仅为作者示例路径,请根据实际环境调整.) mkdir -vp /data/mariadb/{deploy,data,config} # MariaDB 配置文件 cd /data/mariadb/ tee config/my.cnf <<'EOF' [mysqld] # 数据存储目录 datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock # 开启 binlog log_bin = /var/lib/mysql/mysql_bin log_bin_index = /var/lib/mysql/mysql_bin.index server_id = 1 expire_logs_days = 7 max_binlog_size = 100M binlog_format = ROW sync_binlog = 1 # 优化参数 innodb_buffer_pool_size = 1G innodb_log_file_size = 256M innodb_flush_log_at_trx_commit = 1 innodb_io_capacity = 2000 innodb_io_capacity_max = 4000 # 连接数 max_connections = 1024 max_user_connections = 256 # 连接缓冲大小 sort_buffer_size = 4M read_buffer_size = 4M read_rnd_buffer_size = 8M join_buffer_size = 8M # 日志 slow_query_log = 0 slow_query_log_file = /var/lib/mysql/slow.log long_query_time = 2 # 字符串 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # 禁止域名解析,提升连接速度 skip-name-resolve # 禁止使用符号链接 symbolic-links = 0 EOF # 创建 docker-compose.yml 配置文件 cd /data/mariadb/deploy/ tee docker-compose.yml <<'EOF' services: mariadb: image: mariadb:11.6.2 container_name: mariadb restart: always environment: MARIADB_ROOT_PASSWORD: WeiyiGeek.top MYSQL_DATABASE: app MARIADB_USER: app MARIADB_PASSWORD: WeiyiGeek.top volumes: - /data/mariadb/data:/var/lib/mysql - /data/mariadb/config:/etc/mysql/conf.d ports: - "3306:3306" EOF # 部署运行&查看容器运行状态 docker-compose up -d docker ps

使用容器安装部署 Redis 7.2.4,配置操作如下所示:

mkdir -vp /data/redis/{deploy,data,config,logs} cd /data/redis/ tee config/redis.conf <<'EOF' # 绑定任意接口、服务端口、后台运行。 bind 0.0.0.0 port 6379 # 容器里必须设置为no daemonize no supervised auto # redis服务pid进程文件名 pidfile "/var/run/redis.pid" # 关闭保护模式,并配置使用密码访问 protected-mode no # 数据文件保存路径,rdb/AOF文件也保存在这里 dir"/data" # 日志文件记录文件(notice / verbose) logfile "/logs/redis.log" loglevel notice # 慢查询配置 slowlog-log-slower-than 6000 slowlog-max-len 1024 # 内存策略 # maxmemory 2gb # maxmemory-policy volatile-lru # 最大客户端连接数 maxclients 10000 # 客户端连接空闲多久后断开连接,单位秒,0表示禁用 timeout 60 tcp-keepalive 120 # Redis 数据持久化混合模式(RDB/AOF)配置 # RDB 文件名 dbfilename "dump.rdb" # 数据自动保存脚本条件, 例如900s中有10key发生变化 save 900 10 # 启用增量式同步 (推荐),减少 RDB 保存期间的延迟毛刺 rdb-save-incremental-fsync yes # 对RDB文件进行压缩,建议以(磁盘)空间换(CPU)时间。 rdbcompression yes # 版本5的RDB有一个CRC64算法的校验和放在了文件的最后。这将使文件格式更加可靠。 rdbchecksum yes # AOF开启 appendonly yes # AOF文件名 appendfilename "appendonly.aof" # 可选值 always, everysec,no,建议设置为everysec appendfsync everysec # 混合持久化,重写时使用RDB格式作为AOF开头,减少文件大小 aof-use-rdb-preamble yes # 7.0+版本特性,除非需要否则关闭时间戳记录 aof-timestamp-enabled no # 当前AOF文件比上次重写后文件大100%时触发重写 auto-aof-rewrite-percentage 100 # AOF文件至少达到64MB才会触发重写 auto-aof-rewrite-min-size 64mb # 重写时增量式同步,避免大延迟峰值 aof-rewrite-incremental-fsync yes EOF # 创建 docker-compose.yml 配置文件 tee deploy/docker-compose.yml <<'EOF' version: "3.8" services: redis: image: redis:7.2.7-alpine3.21 container_name: redis restart: unless-stopped hostname: redis privileged: true ports: - "6379:6379" volumes: - /data/redis/data:/data - /data/redis/logs:/logs - /data/redis/config/redis.conf:/etc/redis/redis.conf environment: - REDIS_PASSWORD=WeiyiGeek.top - REDIS_MAXMEMORY=6gb - REDIS_MAXMEMORY_POLICY=allkeys-lru - REDIS_DISABLE_THP=yes command: - /bin/sh - -c - | sysctl -w vm.overcommit_memory=1 && sysctl -w net.core.somaxconn=8196 && redis-server /etc/redis/redis.conf --requirepass $$REDIS_PASSWORD deploy: resources: limits: cpus: "2.0" memory: "8G" healthcheck: test: ["CMD", "redis-cli", "-a", "$$REDIS_PASSWORD", "ping"] interval: 15s timeout: 5s EOF # 部署查看容器运行状态 docker-compose up -d docker ps

最后在 MariDB 以及 Redis 容器部署完成后,还需配置防火墙允许 3306 、6379 端口通行。

[root@OpenEuler /data]# firewall-cmd --add-port=3306/tcp --add-port=6379/tcp --permanent [root@OpenEuler /data]# firewall-cmd --reload

温馨提示:更多依赖信息请参考 Moodle 官方文档:https://docs.moodle.org/501/en/Installation_quick_guide


步骤 06.登陆 mariadb 数据库创建 moodle 数据库和用户,并授权。

-- 创建数据库和用户 CREATE DATABASE moodle_db DEFAULTCHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATEUSER'md_user'@'%' IDENTIFIED BY'WeiyiGeek.top'; -- 授予所有权限给moodle_user用户,使其可以管理moodle数据库。 GRANTALL PRIVILEGES ON moodle_db.*TO'md_user'@'%'; -- 赋予有限权限 -- GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO moodle_user IDENTIFIED BY 'weiyigeek.top'; -- 刷新权限,使更改生效 FLUSH PRIVILEGES;

步骤 07.复制 moodle 配置文件 config.php.dist 文件,修改后并保存为 config.php。

$ cd /opt/moodle/www $ cp config-dist.php config.php $ vim config.php // 1. DATABASE SETUP 41 $CFG->dbtype = 'mariadb'; // 'pgsql', 'mariadb', 'mysqli', 'auroramysql', or 's qlsrv' 42 $CFG->dblibrary = 'native'; // 'native' only at the moment 43 $CFG->dbhost = '10.20.176.210'; // 数据库地址 44 $CFG->dbname = 'moodle_db'; // 数据库名称 45 $CFG->dbuser = 'md_user'; // 数据库用户 46 $CFG->dbpass = 'WeiyiGeek.top'; // 数据库密码 47 $CFG->prefix = 'mdl_'; // 数据库表前缀,缺省即可 // 2. WEB SITE LOCATION 176 $CFG->wwwroot = 'https://moodle.weiyigeek.top/'; // 3. DATA FILES LOCATION 191 $CFG->dataroot = '/opt/moodle/moodledata'; 203 // 4. DATA FILES PERMISSIONS 213 $CFG->directorypermissions = 02750; 366 // Redis session handler (requires redis server and redis extension): 367 $CFG->session_handler_class = '\core\session\redis'; 368 $CFG->session_redis_host = '10.20.176.210'; 374 $CFG->session_redis_port = 6379; // Optional. 375 $CFG->session_redis_database = 1; // Optional, default is db 0. 376 $CFG->session_redis_auth = 'WeiyiGeek.top'; // Optional, default is don't set one. 377 $CFG->session_redis_prefix = 'mdl_'; // Optional, default is don't set one. 380 $CFG->session_redis_lock_expire = 7200; // Optional, defaults to session timeout. 381 $CFG->session_redis_lock_retry = 100; // Optional wait between lock attempts in ms, default is 100. 383 $CFG->session_redis_connection_timeout = 3; // Optional, default is 3. 384 $CFG->session_redis_maxretries = 3; // Optional, default is 3.

温馨提示:自Moodle 4.3以来,数据库前缀($CFG->prefix)的最大长度为10个字符, 使用较长的前缀无法进行安装或升级。


步骤 08.调整优化 PHP 配置文件,增加上传变量数量大小限制,缺省 php-fpm 用户为 apache 用户。

$ vim /etc/php-fpm.d/www.conf ; RPM: apache user chosen to provide access to the same directories as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx listen = /run/php-fpm/www.sock listen.backlog = 2048 ; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. ; Default Values: user and group are set as the running user ; mode is set to 0660 listen.owner = nginx listen.group = nginx listen.mode = 0660 ; 创建的子进程的方式与数量 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 ; 设置最大文件打开数(65535) rlimit_files = 65535 $ vim /etc/php.ini # 设置最大输入变量数量(1000) +436 ; How many GET/POST/COOKIE input variables may be accepted max_input_vars = 10000 # 设置最大 POST 大小(8M -> 256M) +713 post_max_size = 256M # 设置最大上传文件大小(2M -> 256M) +865 ; https://php.net/upload-max-filesize upload_max_filesize = 256M # 设置最大文件上传数(20) ; Maximum number of files that can be uploaded via a single request max_file_uploads = 32 # 设置默认的 User-Agent 字符串,PHP的默认设置是空的。 ; Define the User-Agent string. PHP's default setting for this is empty. user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0" ; 防止路径解析漏洞(Nginx + PHP-FPM 时必须设为 0) cgi.fix_pathinfo=0 ; 隐藏 X-Powered-By: PHP/X.X.X 头 expose_php=Off $ vim /etc/php.d/10-opcache.ini [opcache] ; 启用 OPcache opcache.enable=1 ; OPcache 共享内存大小(单位 MB),根据项目大小调整,128-256 常见 opcache.memory_consumption=256 ; 用于存储临时字符串的内存大小,推荐 8-16 opcache.interned_strings_buffer=16 ; 最大加速的文件数量,根据项目文件数设置,比如 2000-10000 opcache.max_accelerated_files=10000 ; 检查文件更新时间间隔(秒),0 表示每次请求都检查(开发用),生产环境推荐 60-300 opcache.revalidate_freq=60 ; 开启 CLI 下的 OPcache(默认关闭,CLI 脚本通常不需要,若需要可开启) ; opcache.enable_cli=0

上述文件修改完毕后需重启 PHP 服务。

# 重启PHP服务 systemctl restart php-fpm.service # 状态查看 systemctl status php-fpm.service # 查看PHP进程 ps aux | grep "php-fpm" # 若错误请请查看错误文件 tail -f /var/log/php-fpm/error.log
weiyigeek.top-重启php-fpm图

步骤 09.采用源码编译安装最新稳定 Nginx 1.30.0 版本,当然亦可采用 docker 容器化安装。

cd /usr/local/src wget https://nginx.org/download/nginx-1.30.0.tar.gz cd nginx-1.30.0/ # 安装编译依赖包 yum install gcc make openssl pcre zlib gd # 创建允许用户和组,不需要家目录不登录bash useradd -M -s /sbin/nologin nginx # 创建安装目录并赋予权限 sudomkdir -vp /usr/local/nginx/{module,modules,conf,logs} /var/cache/nginx/{client_temp,proxy_temp,fastcgi_temp,uwsgi_temp,scgi_temp} chown -R nginx:nginx /usr/local/nginx/ # 编译&安装 # 注:nginx 模块需要在编译时使用 --with 前缀指定加入,若不想编译则使用 --without 前缀。 ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/usr/local/nginx/conf/nginx.conf \ --pid-path=/usr/local/nginx/nginx.pid \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --lock-path=/var/run/nginx.lock \ --modules-path=/usr/local/nginx/modules \ --with-http_stub_status_module \ --with-http_realip_module \ --with-http_v2_module \ --with-http_ssl_module \ --with-http_slice_module \ --with-http_sub_module \ --with-cc-opt=-O2 --with-compat # 编译完成后将会生成 objs 目录,其中包含了编译生产的相关产物。 make -j$(nproc) && make install # 验证安装是否成功 nginx -v nginx version: nginx/1.30.0

步骤 09.配置 Nginx 目录以及 moodle 目录的权限,上传SSL证书文件。

# 证书上传 ls /usr/local/nginx/cert STAR.crt STAR.key # 权限设置 chown -R nginx:nginx /usr/local/nginx/ chown -R nginx:nginx /opt/moodle/ chmod -R 600 /usr/local/nginx/cert/* chmod -R 755 /opt/moodle/www chmod -R 750 /opt/moodle/moodledata

步骤 10.配置 Nginx 支持 PHP 并设置 root 目录,重启 nginx 服务。

user nginx; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; worker_processes auto; # 自动探测 CPU 核心数 。 worker_cpu_affinity auto; # 将 worker 进程绑定到特定 CPU 核心,减少 CPU 缓存失效和上下文切换开销。 worker_priority -20; # 赋予 Nginx 最高优先级,确保在高负载时系统优先处理网卡 IO。 worker_rlimit_nofile 1048576; # 优化点, 此值应与内核参数 ulimit -n 保持一致 # 2.事件处理与连接数 events { worker_connections 65535; # 总连接数必须小于 worker_rlimit_nofile , 对于 8 核系统,建议设为 worker_rlimit_nofile / 8 = 131072 以充分利用百万级句柄限制。 multi_accept on; # 告诉 Nginx 在收到一个新连接通知后,尽可能多地接受连接,缩短握手队列。 use epoll; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; # 开启零拷贝。 tcp_nopush on; # 仅在 sendfile 开启时有效。它会让 Nginx 在一个包中发送所有 HTTP 响应头,而不是分包发送,提升带宽利用率。 tcp_nodelay on; # 禁用 Nagle 算法,强制立即发送 API 响应的小报文,降低 Vue 调用的延迟。tcp_nopush on; keepalive_timeout 65; server { listen 80; listen 443 ssl; server_name moodle.weiyigeek.top; charset utf-8; # 启用 HTTP/2 支持 http2 on; # 日志文件 access_log /var/log/nginx/itxt.log main; error_log /var/log/nginx/itxt.error.log debug; # 配置加密的 SSL 证书密钥文件(根据需求选择) ssl_certificate /usr/local/nginx/cert/STAR.crt; ssl_certificate_key /usr/local/nginx/cert/STAR.key; # 配置可信的 CA 证书文件 # ssl_trusted_certificate /usr/local/nginx/certs/ca.crt; # 支持的 SSL/TLS 协议版本 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # 支持的 SSL/TLS 加密套件 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE:ECDH:AES:HIGH:EECDH +CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DH:!DES:!MD5:!RC4; # SSL 会话缓存 ssl_session_cache shared:SSL:10m; # SSL 会话超时时间 ssl_session_timeout 1h; client_max_body_size 256M; client_body_timeout 120s; fastcgi_send_timeout 120s; fastcgi_read_timeout 120s; # 调大缓冲区,防止视频元数据被截断在临时文件中 fastcgi_buffer_size 128k; fastcgi_buffers 8 128k; # 开启范围请求支持,这对于视频流很重要 max_ranges 0; send_timeout 300s; # 默认 60s,对于大视频太短了 # 根目录配置 root /opt/moodle/www/public/; index index.php index.html; location / { try_files $uri$uri/ /r.php$is_args$args; } location ~ \.php(/|$) { # 根据URI拆分路径信息 fastcgi_split_path_info ^(.+\.php)(/.*)$; # 存储原始path_info,稍后它将被try_files清除。 set$path_info$fastcgi_path_info; # 查找php文件,如果需要,尝试在目录后使用斜线。最后,将请求发送到路由器-r.php作为回退。 try_files $fastcgi_script_name$fastcgi_script_name/ /r.php$is_args$args; # 文件已找到-请传递给fastcgi fastcgi_pass unix:/run/php-fpm/www.sock; # fastcgi_pass 127.0.0.1:9000; include fastcgi_params; # 在包含fastcgi_params后重新应用path_info fastcgi_param PATH_INFO $path_info; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; } # 隐藏所有点文件,但根据RFC 5785允许“已知URI” location ~ /\.(?!well-known).* { return 404; } # 在php-fpm规则之后,并且非常接近最后一个nginx规则集,不允许直接访问各种内部文件 location ~ (/vendor/|/node_modules/|composer\.json|/readme|/README|readme\.txt|/upgrade\.txt|/UPGRADING\.md|db/install\.xml|/fixtures/|/behat/|phpunit\.xml|\.lock|environment\.xml) { deny all; return 404; } } }

步骤 11.当 php-fpm 服务和 nginx 服务均启动后,访问 Moodle 网站安装页面,例如:前面配置的域名https://moodle.weiyigeek.top/,出现如下界面,则表示成功 Nginx 与 php-fpm 均配置成功,点击【Continue】进入到安装流程。

weiyigeek.top-初始化安装界面图

步骤 12.检查 moodle 服务依赖环境是否满足要求,若需要调整的会在Other checks表中展示,若显示Your server environment meets all minimum requirements.(您的服务器环境满足所有最低要求),点击【Continue】继续。

weiyigeek.top-moodle服务依赖检查图

步骤 13.进入到系统组件安装界面,等待全部Success则表示安装成功,点击【Continue】继续。

weiyigeek.top-数据导入应用安装配置图

步骤 14.配置管理员账户相关配置,添加完毕后,点击【Update Profile】继续。

weiyigeek.top-配置管理员账户相关配置图

步骤 15.配置 Moodle 网站基本信息,例如:网站名称、SEO、描述、时区、禁用自注册,以及支持邮箱等。

weiyigeek.top-Moodle 网站基本信息图

步骤 16.由于系统只是内部使用,这么将不向 Moodle 进行注册我们的站点了,点击Skip即可,然后将显示如下界面,表示安装 moodle 成功。

weiyigeek.top-安装 moodle 成功界面图

至此,我们已经成功安装了 Moodle 网站,接下来就可以进一步配置了。下一章作者将实践Moodle 开源学习管理系统简体中文汉化配置,请有需要的看友持续关!

END

加入:作者知识星球

『 全栈工程师修炼指南』星球,主要涉及全栈工程师(Full Stack Development)实践文章,持续更新包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。

获取:作者从业多年的学习笔记

作者整理了近10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者微信或者回复【工作学习实践笔记】,当前价格¥299,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!

知识推荐往期文章

  • 🔥【最新】运维填坑:当 Nginx、OpenResty 上了K8s,多集群监控怎么破?这是我的完整解决思路

  • 🔥【最新】Nginx | 磁盘IO层面性能优化秘诀:error 日志内存环形缓冲区及小文件 sendfile 零拷贝技术

  • 🔥【最新】Nginx | 磁盘IO层面性能优化秘诀:零拷贝、异步IO、线程池、日志轮转压缩及syslog转发,告别磁盘IO瓶颈

  • 💡【相关】97K Star!这款开源白板神器,程序员和设计师都在偷偷用!

  • 💡【相关】一键无痕测试服务器性能!这款开源神器轻松助你优雅评测 VPS

若文章对你有帮助,请将它转发给更多的看友,若有疑问的小伙伴,可在评论区留言你想法哟 💬!

http://www.jsqmd.com/news/793213/

相关文章:

  • AI工具搭建自动化视频生成OAuth2
  • 告别虚拟机:用RK3399开发板搭建你的移动机器人SLAM实验平台(ROS Kinetic + OpenCV 3.4.0)
  • 手把手教你搞定产品EMC静电放电测试:从PCB布局到TVS选型的完整避坑指南
  • Kubernetes大数据处理实践
  • 奇点大会「隐形议程」住宿推荐:主办方未公布的3家闭门交流友好型酒店(含私密会议室共享权限与静音舱预约入口)
  • 为什么要导出Keycloak Realm配置?(生产化、自动化、可迁移化)kc.sh、realm-export.json基础设施配置文件、IaC身份即代码、配置即代码、IAM平台、配置漂移
  • 构建可信AI系统:从黑箱到透明决策的工程实践
  • AI工具搭建自动化视频生成角色权限
  • ClaudE2E:跨IDE多智能体AI开发框架的设计与实战
  • SYsU-lang:模块化编译器教学框架,从LLVM IR到操作系统编译实践
  • 手把手教你为STM32的SD卡驱动FatFs:从AU Size到disk_ioctl的完整配置流程
  • 【奇点智能大会·治理白皮书首发】:基于27家头部AI企业的服务治理数据,验证出唯一有效的3维可观测性模型(QPS/Token耗时/上下文漂移)
  • 3步掌握:在PowerPoint中无缝使用LaTeX公式的终极指南
  • 如何用开源工具永久保存微信聊天记录?WeChatMsg完整解决方案揭秘
  • ARM TLB管理机制与RVAE2IS/RVAE2OS指令详解
  • AI工具搭建自动化视频生成内容版权
  • ChatGPT 2023年8月28日更新解读:ChatGPT Enterprise发布,AI正式进入企业级办公场景
  • Microsoft 365 Copilot 多个严重漏洞可导致敏感信息暴露
  • 深入了解场效应管(FET)的基本原理与特性分析
  • 别再手动解析了!用nlohmann/json库5分钟搞定C++项目里的复杂JSON配置
  • DSP处理器性能评估与优化实战指南
  • Arm SME2多向量操作架构解析与编程实践
  • 别再手动对齐了!用LaTeX的`aligned`环境5分钟搞定复杂数学推导(附赠希腊字母速查表)
  • 5G计费架构实战拆解:从3GPP标准到中国移动落地,漫游场景如何处理?
  • OpenClaw Regex Helper:让AI Agent掌握正则表达式调试与生成能力
  • ARM虚拟定时器CNTHV_TVAL寄存器详解与应用
  • 代码审查进入“零延迟”时代:如何在CI/CD流水线毫秒级触发语义级风险推演?——2026奇点大会核心议题深度拆解
  • 灵活数据库设计:应对业务变化的架构策略与实践指南
  • 基于Docker与QEMU的树莓派系统镜像自动化构建实战
  • AI驱动的开源工具安装器:智能解决Python环境配置难题