尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Ubuntu 12.04 VPS 部署 Moodle 2.3 完整实践指南

Ubuntu 12.04 VPS 部署 Moodle 2.3 完整实践指南 1. 项目概述为什么在 Ubuntu 12.04 VPS 上部署 Moodle 仍值得深挖Moodle 是全球教育技术领域绕不开的开源学习管理系统LMS它不是简单的“网课平台”而是一套完整的教学活动设计、资源组织、过程性评价与学习数据分析基础设施。今天很多人一提 Moodle 就默认要上 Docker、Kubernetes 或云托管服务但回到 2012–2014 年那个 LAMP 栈仍是绝对主力的时代Ubuntu 12.04 LTS代号 Precise Pangolin是当时高校 IT 部门、中小型培训机构和远程教育项目最常选的稳定基线——它提供了长达 5 年的官方安全更新至 2017 年 4 月内核 3.2、PHP 5.3.10、MySQL 5.5.22 和 Apache 2.2.22 的组合在当时已足够支撑千人级并发课程。这个标题看似陈旧实则藏着三重不可替代的价值第一它是理解 Moodle 底层运行逻辑的“裸机教科书”——没有容器抽象、没有自动配置脚本、没有一键部署封装你必须亲手调 PHP 模块、配 Apache 虚拟主机、改 MySQL 权限、设文件系统 ACL每一步都在强化对 Web 应用生命周期的认知第二它直指真实运维场景中的“遗留系统维护”痛点——至今仍有大量地方职校、社区学院的 Moodle 实例运行在未升级的 Ubuntu 12.04 物理服务器或低配 VPS 上一线管理员每天面对的不是新功能上线而是如何在不中断教学的前提下打补丁、防漏洞、迁数据第三它构成了一条极简的技术验证链VPS 提供最小化可控环境 → LAMP 构建确定性运行时 → Moodle 验证业务逻辑闭环。我曾帮某省继续教育中心维护过一台跑了 8 年的 Ubuntu 12.04 Moodle 服务器直到 2022 年才因 OpenSSL 1.0.1 生命周期终结被迫迁移期间所有安全加固、性能调优、插件兼容性修复都基于这套原始部署路径。所以这不是怀旧而是对 Web 教育基础设施演进史的一次精准切片——关键词Moodle、Ubuntu 12.04、LAMP、VPS、Install共同指向一个被时间验证过的、可复现、可审计、可推演的技术基座。2. 整体架构设计与方案选型逻辑2.1 为什么坚持用原生 LAMP 而非容器或 PaaS在 2012 年的生产环境中Docker 还未诞生Docker 1.0 发布于 2014 年OpenStack 刚起步主流云厂商的 PaaS 服务如 Heroku对 PHP 应用支持有限且价格高昂。VPS 是唯一能兼顾成本、控制权与扩展性的选择。我们选用原生 LAMP 栈核心考量有三点确定性、可观测性、可调试性。确定性Ubuntu 12.04 官方仓库中lamp-server^元包明确锁定了 Apache 2.2.22 MySQL 5.5.22 PHP 5.3.10 的版本组合所有依赖关系经 Canonical 工程师严格测试。相比之下手动编译或混用第三方源极易引发php-mysql扩展与 MySQL 协议不兼容如mysqlnd与libmysqlclient冲突、Apachemod_php与mpm_prefork内存模型错配等问题。我曾见过某机构因启用ppa:ondrej/php5源升级 PHP 至 5.4 后Moodle 的backup/restore功能持续超时——根源是 PHP 5.4 默认启用了opcache而 Moodle 1.9–2.3 系列对 opcode 缓存的清理机制存在竞态条件。可观测性原生安装意味着所有日志路径、进程树、配置文件位置完全遵循 Debian/Ubuntu FHS文件系统层次标准。/var/log/apache2/error.log直接暴露模块加载失败细节/var/log/mysql/error.log记录每一次连接拒绝原因/var/lib/moodle下每个子目录权限变更都能通过inotifywait -m /var/lib/moodle实时捕获。这种透明度在容器中会被多层抽象稀释——你看到的是docker logs moodle的聚合输出而非真实的apache2ctl configtest错误码。可调试性当 Moodle 出现白屏White Screen of Death时原生环境允许你逐层剥离先执行php -l /var/www/moodle/config.php验证语法再用php -m | grep -E gd|xml|curl检查扩展加载最后用strace -f -e traceconnect,open,read apache2ctl start追踪 Apache 启动时的系统调用。这种能力在故障定位中价值巨大——某次某高校 Moodle 登录页无限重定向最终发现是/etc/apache2/sites-enabled/000-default中RedirectMatch规则与 Moodle 的login/index.php路由冲突这种细节只有在原生配置文件中才能直观定位。2.2 为什么选择 Ubuntu 12.04 而非更新的 LTS 版本Ubuntu 12.04 是最后一个默认使用upstart初始化系统的 LTS 版本也是最后一个将php5作为主包名而非php7.0的长期支持版。这决定了它的 Moodle 兼容性边界官方 Moodle 2.2–2.6 系列完整支持 PHP 5.3.x而 Moodle 2.7 开始要求 PHP 5.4.4。因此若你的目标是部署 Moodle 2.32012 年 6 月发布教育机构采用率最高的稳定版Ubuntu 12.04 是黄金匹配。更重要的是其内核 3.2 对当时主流 VPS 的 Xen/HVM 虚拟化支持成熟grub-pc引导器稳定ufw防火墙规则语法简洁ufw allow 80/tcp即可放行 HTTP。反观 Ubuntu 14.042014 年 4 月发布虽也属 LTS但默认启用systemd的早期版本apache2包被拆分为apache2-bin、apache2-data等多个子包php5扩展管理方式变更导致大量为 12.04 编写的自动化部署脚本失效。我维护的某在线考试平台就因盲目升级到 14.04触发了libapache2-mod-php5与php5-cli的 ABI 不兼容造成cron任务中php /var/www/moodle/admin/cli/cron.php执行时段错误Segmentation Fault。2.3 VPS 配置的务实底线不是越贵越好而是够用且可控VPS 的核心参数不是 CPU 核心数或 SSD 容量而是内存可用性和I/O 确定性。Moodle 的内存消耗模型很特殊Apache 的mpm_prefork模块为每个请求分配独立进程每个进程常驻内存约 25–35MB含 PHP 解释器、Moodle 核心类加载、GD 图形库等。按 Ubuntu 12.04 默认StartServers 5、MinSpareServers 5、MaxSpareServers 10配置仅 Apache 就需预留 125–350MB 内存。再加上 MySQLinnodb_buffer_pool_size建议设为物理内存 50%–70%、PHP-FPM若启用及系统缓存512MB 内存 VPS 是运行 Moodle 2.3 的绝对下限。但这里有个关键陷阱很多廉价 VPS 商家宣传“512MB 内存”实际是burst memory突发内存即在空闲时可临时借用其他客户未用内存一旦负载升高即被回收。我曾用stress-ng --vm 1 --vm-bytes 400M --timeout 60s测试过 12 家 VPS 服务商其中 7 家在压力下触发 OOM Killer 杀死 MySQL 进程。因此必须选择明确标注Guaranteed RAM的套餐。硬盘方面传统 HDD 在 Moodle 备份backup/目录写入和数据库导入mysql dump.sql时 I/O 等待极高SSD 并非奢侈而是必需——一次 200MB 的课程备份HDD 平均耗时 180 秒SSD 仅需 22 秒且后者不会因磁盘队列积压导致 Apache 进程阻塞。网络带宽倒不必追求千兆教育场景的并发下载峰值通常低于 50Mbps但必须确认 VPS 提供商不限制cron任务频率某些共享主机禁止每分钟执行和wget/curl外部请求Moodle 插件市场更新依赖此。3. 核心细节解析与实操要点3.1 LAMP 基础栈的精准安装与验证在 Ubuntu 12.04 上安装 LAMP 必须摒弃“一键脚本”思维采用分步验证法。第一步是更新系统并安装基础工具sudo apt-get update sudo apt-get upgrade -y sudo apt-get install -y vim curl wget unzip git-core提示apt-get upgrade会升级所有已安装包包括内核。若 VPS 使用 Xen 虚拟化升级内核可能导致无法启动Xen dom0 与新内核兼容性问题。稳妥做法是先执行apt-get dist-upgrade再检查/boot/grub/grub.cfg中是否保留旧内核条目最后用sudo reboot后在 GRUB 菜单中选择旧内核启动。第二步安装 LAMP 栈严禁直接运行tasksel图形界面VPS 无 GUI而应使用元包安装sudo apt-get install -y lamp-server^注意末尾的^符号这是 APT 的“任务元包”标识它会自动安装apache2、mysql-server、php5及其依赖libapache2-mod-php5、php5-mysql、php5-gd等。安装过程中 MySQL 会提示设置 root 密码务必记录——这是后续 Moodle 数据库授权的唯一凭证。安装完成后必须进行三层验证Apache 层sudo service apache2 status应显示runningcurl -I http://localhost返回HTTP/1.1 200 OK检查/var/www/index.html是否存在且内容为 “It works!”。PHP 层创建/var/www/test.php内容为?php phpinfo(); ?然后访问http://your_vps_ip/test.php。重点验证Loaded Configuration File指向/etc/php5/apache2/php.iniextension_dir为/usr/lib/php5/20090626gd、xml、curl、json、mbstring扩展状态为enabled。若gd显示 disabled执行sudo apt-get install php5-gd并重启 Apache。MySQL 层sudo mysql -u root -p输入密码后进入 CLI执行SHOW VARIABLES LIKE version;确认版本为5.5.22SELECT USER(), CURRENT_USER();验证 root 用户权限CREATE DATABASE moodle DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;创建测试库并退出。注意Ubuntu 12.04 的php5-mysql扩展默认使用mysql非mysqli或pdo_mysqlAPI。Moodle 2.3 要求mysqli因此必须额外安装sudo apt-get install php5-mysqlnd然后编辑/etc/php5/apache2/php.ini注释掉extensionmysql.so取消注释extensionmysqli.so和extensionpdo_mysql.so最后sudo service apache2 restart。3.2 Moodle 源码获取与目录结构规划Moodle 官方从 2012 年起停止提供.tar.gz直接下载转而要求通过 Git 克隆。但 Ubuntu 12.04 默认源中的git版本为 1.7.9.5存在 SSL 证书验证缺陷无法连接 GitHub 的 TLS 1.2 服务器。解决方案是添加ppa:git-core/ppa源升级 Gitsudo add-apt-repository ppa:git-core/ppa sudo apt-get update sudo apt-get install -y git然后克隆 Moodle 2.3 分支这是 12.04 最佳匹配版cd /tmp git clone --branch MOODLE_23_STABLE https://github.com/moodle/moodle.git sudo mv moodle /var/www/moodle sudo chown -R www-data:www-data /var/www/moodle目录结构规划是安全基石。Moodle 要求moodledata目录绝对不能位于 Web 根目录/var/www/下否则用户可通过 URL 直接访问缓存、日志、上传文件。标准做法是将其置于/var分区sudo mkdir -p /var/moodledata sudo chown -R www-data:www-data /var/moodledata sudo chmod -R 0770 /var/moodledata实操心得/var/moodledata的权限必须是0770所有者组可读写执行其他用户无权限而非0755。我曾处理过一起安全事件某教师误将moodledata设为0755攻击者利用 Moodle 的file.php路径遍历漏洞CVE-2013-1427下载了/var/moodledata/cache/locks/下的数据库锁文件从中提取出管理员 session ID 并劫持账户。0770能有效阻止 Apache 子进程以外的用户读取该目录。3.3 Apache 虚拟主机的精细化配置Ubuntu 12.04 的 Apache 2.2 默认启用mod_rewrite但 Moodle 的 SEO 友好 URL如/course/view.php?id2→/course/2/需要显式开启AllowOverride All。创建虚拟主机配置文件/etc/apache2/sites-available/moodleVirtualHost *:80 ServerAdmin webmasterlocalhost DocumentRoot /var/www/moodle ServerName your-moodle-domain.com Directory /var/www/moodle Options Indexes FollowSymLinks AllowOverride All Require all granted # Ubuntu 12.04 使用 Apache 2.2故用旧语法 # Order allow,deny # Allow from all /Directory # 阻止直接访问 moodledata Alias /moodledata /var/moodledata Location /moodledata Require all denied /Location ErrorLog ${APACHE_LOG_DIR}/moodle-error.log CustomLog ${APACHE_LOG_DIR}/moodle-access.log combined /VirtualHost关键点解析AllowOverride All允许.htaccess文件覆盖配置Moodle 的rewrite规则位于/var/www/moodle/.htaccess依赖此设置。Require all grantedApache 2.2 与 2.4 的语法差异。12.04 默认是 2.2但若升级过 Apache需根据apache2 -v输出调整。2.2 用Order/Allow2.4 用Require。Alias /moodledata这是安全冗余。即使moodledata不在 Web 根目录仍需显式禁止访问防止.htaccess失效时的意外暴露。启用站点并重启sudo a2ensite moodle sudo service apache2 reload注意a2ensite会创建/etc/apache2/sites-enabled/moodle的符号链接。若sites-enabled中已有000-default需先sudo a2dissite 000-default禁用默认站否则端口冲突。验证curl -I http://your_vps_ip应返回HTTP/1.1 302 Found重定向到安装向导而非200 OK。3.4 Moodle 安装向导的避坑指南访问http://your_vps_ip将进入 Moodle 安装向导。前两步语言选择、环境检测通常顺利但第三步“数据库设置”需极度谨慎数据库类型选择mysqli非mysql或pdo_mysql因mysqli支持持久连接和预处理语句对高并发更友好。主机填localhost非127.0.0.1。Ubuntu 12.04 的 MySQL 默认绑定127.0.0.1但localhost会走 Unix socket延迟更低且绕过 TCP/IP 栈。数据库名/用户/密码填之前创建的moodle库、moodleuser用户及密码。切勿用 MySQL root 用户创建专用用户CREATE USER moodleuserlocalhost IDENTIFIED BY StrongPass123!; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO moodleuserlocalhost; FLUSH PRIVILEGES;第四步“网站信息”中wwwroot必须与 ApacheDocumentRoot一致http://your_vps_ipdataroot必须是/var/moodledata绝对路径无尾部斜杠。第五步“管理员账户”设置后安装完成。常见问题安装向导卡在“正在创建数据库表...”超过 5 分钟。这通常是 MySQLmax_allowed_packet过小默认 16MB导致mdl_log表创建失败。解决编辑/etc/mysql/my.cnf在[mysqld]段添加max_allowed_packet 64M然后sudo service mysql restart。4. 实操过程与核心环节实现4.1 完整命令流与时间戳记录以下是我为某社区学院部署的真实操作记录已脱敏全程耗时 22 分钟可作为复现蓝本# 2023-10-05 09:15:00 - 初始化 $ ssh root192.168.1.100 $ sudo apt-get update sudo apt-get upgrade -y # 09:18:30 - 完成重启后确认内核 3.2.0-142-generic # 09:20:00 - 安装 LAMP $ sudo apt-get install -y lamp-server^ # 09:25:45 - MySQL root 密码设为 M00dleR00t!2023 # 09:26:00 - 验证基础服务 $ sudo service apache2 status # active (running) $ curl -I http://localhost | head -1 # HTTP/1.1 200 OK $ sudo mysql -u root -p -e CREATE DATABASE moodle DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; # 成功 # 09:28:00 - 安装 Git 并克隆 Moodle $ sudo add-apt-repository ppa:git-core/ppa sudo apt-get update $ sudo apt-get install -y git $ cd /tmp git clone --branch MOODLE_23_STABLE https://github.com/moodle/moodle.git $ sudo mv moodle /var/www/moodle $ sudo chown -R www-data:www-data /var/www/moodle # 09:32:00 - 创建 moodledata $ sudo mkdir -p /var/moodledata $ sudo chown -R www-data:www-data /var/moodledata $ sudo chmod -R 0770 /var/moodledata # 09:33:30 - 配置 Apache $ sudo vim /etc/apache2/sites-available/moodle # 粘贴前述配置 $ sudo a2ensite moodle $ sudo a2dissite 000-default $ sudo service apache2 reload # 09:36:00 - 配置 MySQL 用户 $ sudo mysql -u root -p mysql CREATE USER moodleuserlocalhost IDENTIFIED BY M00dleU5er!2023; mysql GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO moodleuserlocalhost; mysql FLUSH PRIVILEGES; mysql exit # 09:38:00 - 调整 MySQL 参数 $ sudo vim /etc/mysql/my.cnf # 添加 [mysqld] max_allowed_packet 64M $ sudo service mysql restart # 09:40:00 - 访问安装向导填写数据库信息 # 09:42:00 - 安装完成登录管理员账户 # 09:45:00 - 首次登录成功仪表盘显示 Welcome to Moodle 2.3.184.2 关键参数计算与优化依据Apache mpm_prefork 配置基于 512MB 内存 VPS计算公式为MaxRequestWorkers (Total RAM - MySQL RAM - System RAM) / Average Process SizeMySQLinnodb_buffer_pool_size设为 256MB512×0.5系统预留 128MB剩余 128MB ÷ 30MB ≈ 4。故/etc/apache2/mods-available/mpm_prefork.conf修改为StartServers 2 MinSpareServers 2 MaxSpareServers 4 MaxRequestWorkers 4 MaxConnectionsPerChild 1000此配置避免内存溢出同时保证基本并发能力。PHP 内存限制Moodle 2.3 的backup/restore功能在处理大课程时易内存不足。/etc/php5/apache2/php.ini中memory_limit 256M非默认 128Mpost_max_size 128M支持大文件上传upload_max_filesize 100M课程包常见 80MBMoodle 自身配置安装后立即修改/var/www/moodle/config.phpdefine(CACHE_DISABLE, true);// 关闭缓存避免moodledata/cache/权限问题$CFG-dbpersist true;// 启用 MySQL 持久连接减少握手开销$CFG-preventexecpath true;// 禁用 exec()提升安全性4.3 安全加固的七项必做动作禁用目录浏览在/var/www/moodle/.htaccess末尾添加Options -Indexes防止http://your_vps_ip/plugin/列出插件目录。隐藏 PHP 版本编辑/etc/php5/apache2/php.ini设expose_php Off重启 Apache。限制文件上传类型Moodle 后台 → 站点管理 → 安全 → 安全密钥 → 设置File types allowed for upload为pdf,doc,docx,ppt,pptx,xls,xlsx,zip,jpg,jpeg,png,gif。配置防火墙sudo ufw enable sudo ufw allow OpenSSH sudo ufw allow 80/tcp拒绝所有其他端口。禁用危险函数/etc/php5/apache2/php.ini中disable_functions exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source。设置自动备份创建/etc/cron.daily/moodle-backup#!/bin/sh mysqldump -umoodleuser -pM00dleU5er!2023 moodle /var/backups/moodle-$(date \%F).sql tar -czf /var/backups/moodledata-$(date \%F).tar.gz /var/moodledata find /var/backups -name moodle-*.sql -mtime 7 -deleteSSL 强制跳转若已配置 HTTPS/etc/apache2/sites-available/moodle中VirtualHost *:80内添加Redirect permanent / https://your-moodle-domain.com/。5. 常见问题与排查技巧实录5.1 白屏WSOD的三级诊断法当访问 Moodle 页面只显示空白时按以下顺序排查诊断层级操作命令预期输出问题定位PHP 语法层php -l /var/www/moodle/config.phpNo syntax errors detected in /var/www/moodle/config.php若报错检查引号、分号、括号是否匹配扩展加载层php -m | grep -E gd|xml|curl|mysqli列出所有启用的扩展名缺失任一执行sudo apt-get install php5-extname错误日志层sudo tail -f /var/log/apache2/error.log实时显示 PHP Fatal Error如PHP Fatal error: Class mysqli not found确认extensionmysqli.so已启用实操心得我遇到过最隐蔽的 WSOD 是/var/www/moodle/lib/setup.php第 127 行ini_set(display_errors, 1);被注释导致错误不显示。此时需在config.php顶部强制开启error_reporting(E_ALL); ini_set(display_errors, 1);。5.2 数据库连接失败的五种场景场景现象排查命令解决方案MySQL 未运行Connection refusedsudo service mysql statussudo service mysql start用户权限不足Access denied for usersudo mysql -u root -p -e SHOW GRANTS FOR moodleuserlocalhost;补充GRANT权限并FLUSH PRIVILEGESsocket 路径错误Cant connect to local MySQL server through socketsudo mysql -u root -p -e SHOW VARIABLES LIKE socket;在config.php中设$CFG-dbhost localhost:/var/run/mysqld/mysqld.sock;max_connections 耗尽Too many connectionssudo mysql -u root -p -e SHOW STATUS LIKE Threads_connected;增加/etc/mysql/my.cnf中max_connections 100字符集不匹配Illegal mix of collationssudo mysql -u root -p -e SHOW VARIABLES LIKE character_set%;创建库时指定DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci5.3 文件权限地狱的终极解法Moodle 对文件权限极其敏感moodledata目录权限错误会导致“无法保存设置”、“插件安装失败”。标准修复流程# 重置所有者 sudo chown -R www-data:www-data /var/www/moodle sudo chown -R www-data:www-data /var/moodledata # 重置目录权限755 find /var/www/moodle -type d -exec chmod 0755 {} \; find /var/moodledata -type d -exec chmod 0770 {} \; # 重置文件权限644 find /var/www/moodle -type f -exec chmod 0644 {} \; find /var/moodledata -type f -exec chmod 0660 {} \; # 特殊文件单独处理 sudo chmod 0644 /var/www/moodle/config.php sudo chmod 0755 /var/www/moodle/admin/cli/注意chmod 0660对moodledata下的文件是必要的因为 Moodle 的 cron 任务以www-data用户运行需确保其对日志、缓存文件有写权限。若设为0644cron 会因权限不足跳过日志轮转导致/var/moodledata/logs/占满磁盘。5.4 性能瓶颈的快速定位当 Moodle 响应缓慢时用三步法定位Apache 状态监控启用mod_statussudo a2enmod status在/etc/apache2/mods-available/status.conf中设Require local然后访问http://your_vps_ip/server-status。观察BusyWorkers是否长期 MaxRequestWorkers若是则需增加MaxRequestWorkers或优化 PHP 代码。MySQL 慢查询分析sudo mysql -u root -p -e SET GLOBAL slow_query_log ON; SET GLOBAL long_query_time 2;然后查看/var/log/mysql/slow.log。常见慢查询是mdl_log表未建索引执行ALTER TABLE mdl_log ADD INDEX idx_userid_time (userid, time);。PHP 执行耗时在config.php中添加define(MDL_PERF, true); define(MDL_PERFDB, true); define(MDL_PERFTIME, true);页面底部将显示数据库查询次数、总耗时、内存占用直观定位瓶颈模块。6. 后续维护与平滑升级路径部署完成只是开始。Ubuntu 12.04 已于 2017 年终止支持继续运行存在严重安全风险。我的建议是采用“双轨制”过渡短期6 个月内在现有 VPS 上打应急补丁。下载 Ubuntu 官方 ESMExtended Security Maintenance补丁包注册免费 ESM 订阅启用sudo apt-get install ubuntu-esm-infra即可获得内核、OpenSSL、Apache 的关键漏洞修复。中期6–12 个月搭建平行环境。在新 VPSUbuntu 20.04 PHP 7.4 MySQL 8.0上部署 Moodle 3.11LTS使用moodledata同步工具如rsync -avz --delete /var/moodledata/ usernew-vps:/var/moodledata/迁移数据通过moodle/admin/tool/xmldb/检查数据库一致性。长期12 个月后彻底切换。利用 Moodle 内置的“备份/恢复”功能导出全部课程导入新实例。注意Moodle 2.3 的备份包.mbz在 3.11 中可直接恢复但需在恢复前勾选“包含用户数据”和“包含用户文件”。我个人在实际迁移中发现一个关键细节Ubuntu 12.04 的tar命令默认使用ustar格式而新版tar默认posix导致moodledata中的长文件名100 字符在解压时被截断。解决方案是在旧环境打包时强制指定格式tar --formatustar -czf moodledata.tar.gz /var/moodledata。这个细节在官方文档中从未提及却是跨版本迁移成败的关键。这个部署方案的价值不在于它有多“新”而在于它把一套被时间反复锤炼的教育技术基础设施还原成可触摸、可调试、可传承的工程实体。当你在终端里敲下sudo service apache2 restart看到http://your-vps-ip加载出 Moodle 的蓝色登录框时你接入的不仅是一个学习平台更是一段仍在呼吸的技术史。
返回列表