
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
!Docker Image Size !nginx 1.26 !php 8.3 !moodle !moosh 1.27 !License MIT !https://github.com/erseco/alpine-moodle/actions/workflows/build.yml/badge.svg
基于Alpine Linux构建的轻量级Moodle Docker镜像(约100MB)。
仓库地址:https://github.com/erseco/alpine-moodle
docker compose.ymldocker logs -f <容器名>查看)MOODLE_USERNAME和MOODLE_PASSWORD覆盖为安全值。/public目录提供文件服务。publicpaths.php应用兼容性补丁,以支持容器内的端口映射。Moodle 5.1引入了新的/public目录用于所有Web可访问文件。如果从5.0或更早版本升级:
config.phpmoodledata/目录/var/www/html/下的所有剩余文件,避免陈旧或冲突代码。config.php和自定义插件/主题复制到新代码库。/public目录时,容器会自动执行composer install。从Docker Hub获取:
bashdocker compose up
使用环境变量定义的凭据登录。
从GHCR获取:
yamlservices: moodle: image: ghcr.io/erseco/alpine-moodle # 其余配置...
在某些情况下,可能需要在Moodle容器内以root用户运行命令(例如安装额外包),可使用docker compose exec命令并指定--user root选项:
bashdocker compose exec --user root moodle sh
在docker compose.yml文件中定义环境变量
| 变量名 | 默认值 | 描述 |
|---|---|---|
| LANG | en_US.UTF-8 | 语言设置 |
| LANGUAGE | en_US:en | 语言偏好 |
| SITE_URL | http://localhost | 设置公共站点URL |
| REVERSEPROXY | false | 详见反向代理配置 |
| SSLPROXY | false | 详见反向代理配置 |
| REDIS_HOST | Redis实例主机名,例如redis | |
| DB_TYPE | pgsql | 数据库类型:mysqli、pgsql、mariadb |
| DB_HOST | postgres | 数据库主机,例如db容器名 |
| DB_PORT | 5432 | 数据库端口:Postgres=5432,MySQL=3306 |
| DB_NAME | moodle | 数据库名 |
| DB_USER | moodle | 数据库用户名 |
| DB_FETCHBUFFERSIZE | 若使用PgBouncer等PostgreSQL连接池(事务模式),设置为0 | |
| DB_DBHANDLEOPTIONS | false | 若使用不支持发送选项的PostgreSQL连接池(如PgBouncer),设置为true |
| DB_HOST_REPLICA | 只读副本数据库主机名 | |
| DB_PORT_REPLICA | 副本数据库端口,留空则与DB_PORT相同 | |
| DB_USER_REPLICA | 副本数据库用户名,留空则与DB_USER相同 | |
| DB_PASS_REPLICA | 副本数据库密码,留空则与DB_PASS相同 | |
| DB_PREFIX | mdl_ | 数据库前缀。警告:不要使用数值,否则Moodle无法启动 |
| MY_CERTIFICATES | none | 经过base64编码的可信LDAP证书或证书链 |
| MOODLE_EMAIL | *** | Moodle管理员*** |
| MOODLE_LANGUAGE | en | Moodle界面语言 |
| MOODLE_SITENAME | New-Site | 站点名称 |
| MOODLE_USERNAME | moodleuser | 管理员用户名 |
| MOODLE_PASSWORD | PLEASE_CHANGEME | 管理员密码 |
| SMTP_HOST | smtp.gmail.com | SMTP服务器主机 |
| SMTP_PORT | 587 | SMTP服务器端口 |
| SMTP_USER | *** | SMTP用户名 |
| SMTP_PASSWORD | your_password | SMTP密码 |
| SMTP_PROTOCOL | tls | SMTP协议 |
| MOODLE_MAIL_NOREPLY_ADDRESS | noreply@localhost | noreply***地址 |
| MOODLE_MAIL_PREFIX | [moodle] | 邮件前缀 |
| AUTO_UPDATE_MOODLE | true | 设置为false可禁用Docker启动时执行Moodle更新(如插件) |
| DEBUG | false | 调试模式开关 |
| client_max_body_size | 50M | Nginx客户端最大请求体大小 |
| post_max_size | 50M | PHP POST数据最大大小 |
| upload_max_filesize | 50M | PHP上传文件最大大小 |
| max_input_vars | 5000 | PHP最大输入变量数 |
| PRE_CONFIGURE_COMMANDS | 配置开始前运行的命令 | |
| POST_CONFIGURE_COMMANDS | 配置完成后运行的命令 | |
| RUN_CRON_TASKS | true | 设置为false可禁用自动运行Moodle Cron任务 |
当使用反向代理(如Caddy、Traefik、nginx-proxy-manager)处理SSL终止时,可能会遇到CSS丢失或“重定向过多”错误。这是常见问题,可通过正确配置解决。
CSS丢失:若SITE_URL设为内部Docker IP(如http://172.19.0.1:89),Moodle会生成带内部地址的URL。当浏览器通过https://moodle.example.com访问时,会因混合内容(尝试加载http内容到https页面)阻止这些资源。
ERR_TOO_MANY_REDIRECTS:若SITE_URL设为公共HTTPS地址(如https://moodle.example.com)但未正确配置代理设置,Moodle可能会混淆协议并进入重定向循环。
关键是告知Moodle其位于SSL终止代理之后。可通过以下环境变量设置解决:
SITE_URL:设为公共外部URL,带https协议(如https://moodle.example.com)。REVERSEPROXY:大多数反向代理设置保持false。仅当Moodle有意通过多个不同基础URL访问(如用户使用不同域名或协议)时设为true。在典型反向代理场景(所有用户通过单一公共URL访问)中保持false。详见Moodle反向代理文档。SSLPROXY:设为true。告知Moodle信任代理发送的X-Forwarded-Proto头,理解连接是安全的(即使与Docker容器的内部连接为HTTP)。以下是docker-compose.yml和Caddyfile的反向代理配置示例。
docker-compose.yml
yamlservices: moodle: image: erseco/alpine-moodle restart: unless-stopped environment: SITE_URL: https://moodle.example.com REVERSEPROXY: "false" SSLPROXY: "true" # ... 其他环境变量 volumes: - moodledata:/var/www/moodledata - moodlehtml:/var/www/html depends_on: - postgres # ... 其他服务(postgres等) volumes: moodledata: moodlehtml:
Caddyfile
caddymoodle.example.com { reverse_proxy moodle:8080 { header_up Host {host} header_up X-Forwarded-Proto {scheme} header_up X-Forwarded-For {remote} } }
通过此配置可避免Moodle在反向代理后的常见问题。详见issue https://github.com/erseco/alpine-moodle/issues/101%E3%80%82
yaml--- services: postgres: image: postgres:alpine restart: unless-stopped environment: - POSTGRES_PASSWORD=moodle - POSTGRES_USER=moodle - POSTGRES_DB=moodle volumes: - postgres:/var/lib/postgresql/data moodle: image: erseco/alpine-moodle restart: unless-stopped environment: MOODLE_USERNAME: moodleuser MOODLE_PASSWORD: PLEASE_CHANGEME ports: - 80:8080 volumes: - moodledata:/var/www/moodledata - moodlehtml:/var/www/html depends_on: - postgres volumes: postgres: null moodledata: null moodlehtml: null
此镜像包含https://github.com/tmuras/moosh%E2%80%94%E2%80%94%E5%BC%BA%E5%A4%A7%E7%9A%84Moodle%E7%AE%A1%E7%90%86%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7%E3%80%82%E5%8F%AF%E9%80%9A%E8%BF%87%E4%BB%A5%E4%B8%8B%E5%91%BD%E4%BB%A4%E8%B0%83%E7%94%A8%E4%BB%BB%E4%BD%95Moosh%E5%91%BD%E4%BB%A4%EF%BC%9A
bashdocker compose exec moodle moosh <命令>
示例:
升级插件列表(安装前需执行)
bashdocker compose exec moodle moosh plugin-list
按名称安装插件
bashdocker compose exec moodle moosh plugin-install mod_attendance
可使用
--force选项强制安装不支持的插件。
注意:https://github.com/tmuras/moosh/issues/520%EF%BC%8C%E5%BB%BA%E8%AE%AE%E4%BD%BF%E7%94%A8%60--delete%60%E6%A0%87%E5%BF%97%E9%87%8D%E6%96%B0%E8%B0%83%E7%94%A8%E5%AE%89%E8%A3%85%E5%87%BD%E6%95%B0%E6%88%96%E4%BD%BF%E7%94%A8%60module-reinstall%60%E9%80%89%E9%A1%B9%EF%BC%8C%E4%BE%8B%E5%A6%82%EF%BC%9A%60docker compose exec moodle moosh plugin-install --delete theme_almondb
或docker compose exec moodle moosh module-reinstall theme_almondb`
备份课程
按ID备份课程。默认排除日志和成绩历史。
示例:备份ID=3的课程到容器内/opt/moosh/目录的默认.mbz文件:
bashdocker compose exec moodle moosh course-backup 3
创建用户
创建新Moodle用户。提供一个或多个参数可创建多个用户。
示例:创建用户“testuser”并设置所有可选值
bashdocker compose exec moodle moosh user-create --password pass --email me@example.com --digest 2 --city Valverde --country ES --institution "IES Garoé" --department "Technology" --firstname "first name" --lastname name testuser
删除用户
从Moodle删除用户。提供一个或多个用户名为参数。
示例:删除用户testuser
bashdocker compose exec moodle moosh user-delete testuser
这些示例可直接包含在POST_CONFIGURE_COMMANDS中,以自动化插件安装、备份或任何Moosh支持的功能。
使用Moosh可遵循DRY原则(避免重复),并利用强大的Moodle管理工具集。
完整命令列表见:[***]
可通过PRE_CONFIGURE_COMMANDS和POST_CONFIGURE_COMMANDS环境变量定义在Moodle配置前后执行的命令。适用于安装额外包或运行脚本等任务。
yamlenvironment: PRE_CONFIGURE_COMMANDS: "cat config-dist.php" POST_CONFIGURE_COMMANDS: | moosh plugin-list moosh plugin-install --delete theme_almondb moosh plugin-install --delete theme_almondb
调用docker compose build会使用Moodle主分支的最新版本。如需使用特定版本,可通过MOODLE_VERSION构建参数指定。
要使用特定版本,编辑docker compose.yml中moodle服务的build部分:
yamlmoodle: image: erseco/alpine-moodle build: context: . args: MOODLE_VERSION: v4.5.3 # 替换为所需版本
可用版本标签列表见:https://github.com/moodle/moodle/tags
Moodle在管理员 > 开发 > 创建测试场景下提供测试场景生成工具。要启用它,运行以下命令或添加到POST_CONFIGURE_COMMANDS:
bashphp admin/tool/generator/cli/runtestscenario.php
此工具允许使用.feature文件语法生成手动测试所需的所有元素。
安装额外Alpine包(以root用户):
bashdocker compose exec --user root moodle sh -c "apk update && apk add nano"
手动数据库升级:
bashdocker compose exec moodle php admin/cli/upgrade.php
访问日志:
bashdocker compose logs -f moodle
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务