Moodle-Docker 部署五分钟指南:让 Moodle 测试环境一次跑通
2026/8/23 16:37:42 网站建设 项目流程

Moodle-Docker 部署五分钟指南:让 Moodle 测试环境一次跑通

【免费下载链接】moodle-dockerA docker environment for moodle developers项目地址: https://gitcode.com/gh_mirrors/mo/moodle-docker

Moodle-Docker 是一套面向 Moodle 开发者和测试人员的容器化配置,把 Apache/PHP、数据库、Selenium 测试浏览器和邮件捕获服务打包成现成的容器,你只需指一下自己的代码目录,几条命令就能在本地搭起一套 Moodle 测试环境,不用自己安装 PHP、Apache 和数据库。

Moodle Docker 搭建步骤:第一次完整走一遍

先做环境检查

先别急着敲命令,确认两个工具版本:

  • docker --version—— 终端会打印出 Docker 版本号,这个环境最低要 v20.15.15 之前的老版本不行,实际建议 v20.10.15 起步,能新就新;
  • docker compose version—— Compose 是用来"一条命令拉起一组容器"的工具,最低 v2.5.0。

版本太旧时,先升级 Docker 或 Docker Desktop,能省掉后面很多怪问题。另外提一句:如果打算用 Microsoft SQL Server 当数据库,机器内存至少要留 3.25GB,它是几个选项里最吃资源的。

拿到两份代码

第一份是配置仓库本身:

git clone https://gitcode.com/gh_mirrors/mo/moodle-docker

它里面是各种 Compose 配置和辅助脚本,相当于整套环境的"图纸"。第二份是要测试的 Moodle 源码,放到一个固定目录,比如./moodle

git clone -b MOODLE_405_STABLE git://git.moodle.org/moodle.git ./moodle

-b后面跟的是分支名,想测哪个版本就换成哪个分支;如果你本地已经有这份代码,这步可以跳过。

设置两个必填的环境变量

启动前告诉环境"代码在哪"和"用哪个数据库":

export MOODLE_DOCKER_WWWROOT=./moodle

指向 Moodle 代码所在目录,预期是命令执行完没有任何输出(正常)。

export MOODLE_DOCKER_DB=pgsql

选数据库类型,可选项有 pgsql、mariadb、mysql、mssql、oracle。第一次用建议选 pgsql(PostgreSQL 的缩写),它最省心。

启动容器

把模板配置复制到代码目录,然后点火:

cp config.docker-template.php $MOODLE_DOCKER_WWWROOT/config.php

这一步是把容器环境专用的数据库连接配置放进 Moodle 目录,同样执行无输出。

bin/moodle-docker-compose up -d

后台启动全部容器,预期看到容器逐个创建完成、没有红色报错。

bin/moodle-docker-wait-for-db

等待数据库容器真正就绪,预期是命令跑完后返回提示。mssql 和 oracle 启动偏慢,跳过这步很容易在初始化时失败。

全新实例再补一条,直接用命令行完成站点安装(参数里是站点名、管理员账号密码):

bin/moodle-docker-compose exec webserver php admin/cli/install_database.php --agree-license --fullname="测试站点" --shortname="test" --adminpass="test" --adminemail="admin@example.com"

跑完后用 admin / test 登录 http://localhost:8000/ 就能看到首页了。

🐛 容器起不来时,先查这几个地方

设置了环境变量却没生效

最常见的原因是"时机不对"。所有变量都必须在调用bin/moodle-docker-compose up之前设置好;漏设或想改值时,要重建容器而不是重启:

bin/moodle-docker-compose down && bin/moodle-docker-compose up -d

down拆掉旧容器,up按新配置重建,预期是容器名全部重新出现。忘了这步的话,你会对着"为什么改了没反应"困惑半天。

数据库好了,但站点还是报错

多半是数据库还没完全就绪,用bin/moodle-docker-wait-for-db等一轮再试。仍不行就核对MOODLE_DOCKER_DB的值和你实际想测的类型是否一致,比如设了 mssql 却按 pgsql 的方式连,肯定失败。

端口被占用,页面打不开

默认 Web 端口是 8000,被本机其他服务占着就会冲突。换端口只需一个变量:

export MOODLE_DOCKER_WEB_PORT=1234

重建容器后改从 http://localhost:1234/ 访问即可,MOODLE_DOCKER_WEB_HOST还能顺带改主机名。

手动测试时一直被登出

账号密码都对却反复掉线,通常是浏览器缓存的 cookie 出了问题。清掉浏览器中 localhost 相关的 cookie 即可恢复。

想暂停但不想销毁

bin/moodle-docker-compose stop只停容器不删数据,下次bin/moodle-docker-compose start原样回来;down则是彻底拆掉。日常开发用 stop/start 的循环,比每次重建轻快得多。

Moodle 开发环境配置:数据库切换与邮件查看

一行命令换数据库

PostgreSQL、MySQL、MariaDB、Microsoft SQL Server、Oracle XE,想测哪个就改MOODLE_DOCKER_DB的值,其余配置不用动。仓库里每种库都有对应的 Compose 文件(db.pgsql.yml、db.mssql.yml 等),启动脚本会按变量自动挑一个加载。想固定数据库大版本,再设MOODLE_DOCKER_DB_VERSION指定镜像标签。

📮 查看站点发出的邮件

Moodle 会发各种邮件:注册通知、密码重置、作业提醒。默认配置里 SMTP 指向一个叫 Mailpit 的邮件捕获服务——可以理解为"收件箱":邮件不会真正发出去,而是全部落在这里。浏览器打开 http://localhost:8000/_/mail,就能翻阅和检索站点发过的每一封邮件,排查邮件相关功能时非常省事。

跑 Behat 测试

Behat 是一种"用接近自然语言写测试步骤、让真实浏览器照着点击"的测试工具,容器里已经配好了 Selenium 和 Firefox/Chrome。容器运行状态下:

bin/moodle-docker-compose exec webserver php admin/tool/behat/cli/init.php

初始化测试环境,预期看到初始化成功的信息。

bin/moodle-docker-compose exec -u www-data webserver php admin/tool/behat/cli/run.php --tags=@auth_manual

按标签跑一批用例,预期输出场景和步骤数、通过情况统计。失败的用例会留下截图和回放,在 http://localhost:8000/_/faildumps/ 直接看。想换浏览器跑,把MOODLE_DOCKER_BROWSER设成 chrome(记得重建容器);再设上MOODLE_DOCKER_SELENIUM_VNC_PORT,还能用 VNC 客户端实时围观浏览器操作,调试体验很好。

phpunit 与外部服务

单元测试同理,bin/moodle-docker-compose exec webserver进入 Web 容器后执行vendor/bin/phpunit加用例路径即可,预期输出熟悉的 OK 或失败清单。若代码依赖 solr、ldap、redis、memcached 这类外部组件,把MOODLE_DOCKER_PHPUNIT_EXTERNAL_SERVICES设成任意值,对应的服务容器会随站点一起拉起。

🛠 进阶玩法

  • 同时跑多个 Moodle:启动前分别设置不同的COMPOSE_PROJECT_NAME(如 moodle34、moodle45)和MOODLE_DOCKER_WEB_PORT,两个版本的站点就能并排运行、对比行为;操作哪个实例,就先 export 对应的COMPOSE_PROJECT_NAME
  • 加自己的服务:在仓库目录放一个local.yml,启动脚本会把它和其他配置自动合并,适合加 adminer 之类的数据库管理界面,不用改动原有文件。
  • 切换 PHP 版本MOODLE_DOCKER_PHP_VERSION支持 Moodle 覆盖的各 PHP 版本(8.4 到 5.6),默认 8.3,测旧版本兼容性时改它就行。
  • Moodle 移动端:测 App 时结合MOODLE_DOCKER_APP_PATH(本地代码)或MOODLE_DOCKER_APP_VERSION(镜像版本),并选用 chrome 浏览器,容器会同时提供应用服务,细节可以看仓库里的 moodle-app.yml。
  • XDebug 调试:镜像默认不带 XDebug(避免拖慢测试)。需要实时调试时,在运行的 Web 容器里用 pecl 安装、把xdebug.client_host指回宿主机(Windows/macOS 上用 host.docker.internal),再重启 webserver 容器即可。

收尾:一键还原现场

全部弄完后执行bin/moodle-docker-compose down,整套环境就清理掉了,下次按前面的流程重新拉起只需几分钟。环境变量的完整清单在仓库 README.md 的表格里,容器定义则散落在 base.yml、db.*.yml、service.mail.yml 这些 Compose 文件中,想深入调整时,直接对着这些文件读就能看懂每块是怎么拼起来的。

【免费下载链接】moodle-dockerA docker environment for moodle developers项目地址: https://gitcode.com/gh_mirrors/mo/moodle-docker

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询