[ 知识是人生的灯塔只有不断学习才能照亮前行的道路 ]0x00 前言简述背景说明出于内部学习平台搭建需要领导吩咐我去探究部署一些开源学习平台要求支持Office协同文档、学习课程发布、学习记录反馈和支持 OAuth2 客户端以对接内部开发的 OAuth2 服务器经过一番调研虽然有Moodle、OLAT、Sakai、WebCT平台 ,最终选择了开源的 Moodle 作为搭建的学习平台考虑到国内对应的开源社区较少加之国内用户对 Moodle 的使用较为陌生遂作者将自身学习和实践经验进行总结希望能帮助到有类似需求的读者让其可用快速安装部署上手温馨提示若文章代码块中存在乱码或不能复制请联系作者也可通过文末的阅读原文链接加入知识星球中阅读原文链接https://articles.zsxq.com/id_5zw6r3wmblt8.htmlMoodle简介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.3STABLE 版本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.tgzweiyigeek.top-下载最新版本源代码包图步骤 02.将下载的源代码包解压上传并解压到/opt/moodle目录下并创建数据存放目录此处以/opt/moodle/moodledata为例。# 永久以及暂时禁用SELinux强制。 sed -i s/^SELINUX.*$/SELINUXdisabled/ /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-FPMFastCGI Process Manager 来处理动态请求。下面进行安装 PHP 和相关扩展不同版本 Moodle 对 PHP 版本的要求略有不同以下是 Moodle 各版本的 PHP 支持范围请确保64位 PHP 版本至少为8.2。PHP 设置文档https://docs.moodle.org/501/en/PHPMoodle 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.4PHP 及其扩展和库说明安装参考文档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_consumption512。 # 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 -yweiyigeek.top-安装 php 及其扩展图步骤 04.使用 pecl 安装 Redis 扩展并配置启用。# pecl 命令通常包含在 php-pear 软件包中 # php-devel包含了编译 PHP 扩展时需要的头文件和工具如 phpize # php-pearPEAR 包管理器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 extensionredis.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 everysecno建议设置为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_PASSWORDWeiyiGeek.top - REDIS_MAXMEMORY6gb - REDIS_MAXMEMORY_POLICYallkeys-lru - REDIS_DISABLE_THPyes command: - /bin/sh - -c - | sysctl -w vm.overcommit_memory1 sysctl -w net.core.somaxconn8196 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 端口通行。[rootOpenEuler /data]# firewall-cmd --add-port3306/tcp --add-port6379/tcp --permanent [rootOpenEuler /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; CREATEUSERmd_user% IDENTIFIED BYWeiyiGeek.top; -- 授予所有权限给moodle_user用户使其可以管理moodle数据库。 GRANTALL PRIVILEGES ON moodle_db.*TOmd_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 dont set one. 377 $CFG-session_redis_prefix mdl_; // Optional, default is dont 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. PHPs default setting for this is empty. user_agentMozilla/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_pathinfo0 ; 隐藏 X-Powered-By: PHP/X.X.X 头 expose_phpOff $ vim /etc/php.d/10-opcache.ini [opcache] ; 启用 OPcache opcache.enable1 ; OPcache 共享内存大小单位 MB根据项目大小调整128-256 常见 opcache.memory_consumption256 ; 用于存储临时字符串的内存大小推荐 8-16 opcache.interned_strings_buffer16 ; 最大加速的文件数量根据项目文件数设置比如 2000-10000 opcache.max_accelerated_files10000 ; 检查文件更新时间间隔秒0 表示每次请求都检查开发用生产环境推荐 60-300 opcache.revalidate_freq60 ; 开启 CLI 下的 OPcache默认关闭CLI 脚本通常不需要若需要可开启 ; opcache.enable_cli0上述文件修改完毕后需重启 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.logweiyigeek.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 \ --usernginx \ --groupnginx \ --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:EECDHCHACHA20-draft:EECDHAES128:RSAAES128:EECDHAES256:RSAAES256:EECDH3DES:RSA3DES: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若文章对你有帮助请将它转发给更多的看友若有疑问的小伙伴可在评论区留言你想法哟