news 2026/9/20 2:54:14

Open edX 部署教程:四步在本地跑起完整在线学习平台

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Open edX 部署教程:四步在本地跑起完整在线学习平台

Open edX 部署教程:四步在本地跑起完整在线学习平台

【免费下载链接】openedx-platformThe Open edX LMS & Studio, powering education sites around the world!项目地址: https://gitcode.com/GitHub_Trending/ed/openedx-platform

Open edX 是开源在线教育系统,LMS(学生用来上课的系统)和 Studio(老师建课的系统)分工协作。这篇 Open edX 部署教程把完整流程拆成四步,跟着做完,你就能在本地跑起一套 LMS + Studio 组合。

先认识这个项目:三大块分别干什么

README 说得很直白:平台由一个 Django 单体核心、若干可独立部署的应用(IDA)和一批 React 微前端(MFE,独立开发部署的前端页面)组成。核心单体提供两个服务:

组件目录职责
LMSlms/学生学习系统:课程交付、学习记录、成绩与证书
CMS(即 Studio)cms/建课系统:课程结构、内容组件、学习单元管理
XBlock / XModulexmodule/内置内容组件层:章节、单元、题目、视频等块类型

图上展示的是系统整体分工。要注意:你浏览到的大部分页面其实是独立部署的 MFE,靠 AJAX 和后端通信——所以核心服务起来之后,还需要单独启动 MFE 才能获得完整界面。

动手前自查清单:逐项确认再开始

官方 README 明确列出了裸机(直接在 Linux 主机上安装)环境要求,逐项打勾:

  • Ubuntu 24.04
  • Python 3.12
  • Node 24(仓库.nvmrc文件锁定的版本)
  • MySQL 8.0、MongoDB 7.x 已安装并启动
  • Memcached 缓存服务可用
  • 磁盘留足空间放源码、依赖与数据库文件
  • 需要mysqlclient时,先装系统依赖:sudo apt install python3-dev default-libmysqlclient-dev build-essential pkg-config

⚠️ 官方同时建议:开发和生产都优先用 Tutor(基于 Docker 的发行版),裸机方式社区支持有限,没有运维经验请先上 Tutor。

实战:四步跑起来

第 1 步:获取源码。克隆仓库并进入目录:

git clone https://gitcode.com/GitHub_Trending/ed/openedx-platform cd openedx-platform

第 2 步:安装依赖。前端走 npm,后端走 uv(Python 包管理器),在仓库根目录执行:

npm clean-install --dev uv sync --group development --group ci

第 3 步:初始化数据库。先建两个 MySQL 库(LMS、CMS 各一个),在DATABASES配置里指向它们;然后跑迁移建表:

./manage.py lms migrate ./manage.py lms migrate --database=student_module_history ./manage.py cms migrate

注意 LMS 要跑两次:第二条命令针对独立的学习行为历史库。

第 4 步:构建前端资产并启动服务。

npm run build ./manage.py lms runserver 18000 ./manage.py cms runserver 18010

npm run build用 webpack 打包 JS/CSS;之后在两个终端分别把 LMS 起在 18000 端口、CMS 起在 18010 端口。README 特别提醒:此时平台还是"基本无头"状态,要完整操作界面,需再单独启动 Authoring(2001)、Learning(2000)、Learner Home(1996)等 MFE。

功能与模块导览:定制平台的三条路

Open edX 遵循开闭原则,扩展点都有文档记录,见 扩展点说明:

  • XBlock:Python 插件,定义一种新的交互式组件类型;运营者先装进实例,教师才能在课程里使用。内置块都在 xmodule/ 下。
  • LTI:学习工具互操作标准,通过 iframe 嵌入第三方内容,平台既当消费方也当提供方。
  • REST API:外部系统对接平台,访问/api-docs/可看自动生成的 OpenAPI 文档。

外观定制也开箱即用:themes/ 目录自带 dark-theme、red-theme 等主题,构建时通过COMPREHENSIVE_THEME_DIRS指向你自己的主题目录即可生效。

调优与加固建议:按场景逐条处理

  • 多节点部署 LMS:把CACHES['default']指向共享的 Redis 或 Memcached,否则 LTI Provider 的 OAuth 防重放等安全特性跨节点会失效。
  • 生产环境开 HTTPSlms/envs/production.py会自动设置SESSION_COOKIE_SAMESITE='None'以支持 LMS 与 Studio 跨站登录,需同时满足SESSION_COOKIE_SECURE=True和 HTTPS;纯 HTTP 环境请改用Lax,代价是 Studio SSO 等跨站流程不可用。
  • 静态资源加速:CDN 路径与 webpack 配置的调法见 静态资源文档。
  • 翻译与静态文件make pull_translations拉取翻译,./manage.py lms collectstatic/./manage.py cms collectstatic收集静态文件,开发环境可跳过。
  • 更贴近生产的域名:实验性的development.py配置用 local.openedx.io 子域名跑服务,玩法见 该配置使用教程。

排坑与自检:启动后常见问题排查

  • 迁移或启动报数据库连不上:先确认 MySQL、Mongo、Memcached 三个服务真的在跑,再核对DATABASES是否配了两个库、MySQL 用户是否有写权限。
  • 依赖安装失败mysqlclient等包需要 C 编译环境,先执行自查清单里的 apt 安装命令再重试。
  • 页面一片空白:属正常现象。前端已迁到 MFE,需单独把 Authoring、Learning、Learner Home 三个 MFE 跑起来。
  • 端口冲突:核心服务占 18000、18010,MFE 占 1995–2001,改runserver的端口号或对应的*_MICROFRONTEND_URL设置即可。

走向生产:三句话讲清

生产环境请用社区官方的 Tutor 做容器化部署,安装、定制、升级、扩容一条龙,还自带开发模式;备份重点盯住 MySQL 和 Mongo 两份数据;如果不想自己运维,官网提供的托管服务可以先用免费试用评估。

写在最后

对照清单自查、跑完四步,你就有了第一个可用的 Open edX 实例。进阶配置建议翻官方文档站 docs.openedx.org,卡住就去社区论坛 discuss.openedx.org 提问——大概率有人踩过一模一样的坑。

【免费下载链接】openedx-platformThe Open edX LMS & Studio, powering education sites around the world!项目地址: https://gitcode.com/GitHub_Trending/ed/openedx-platform

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 2:52:18

用Python+Flet开发跨平台App:从零编写界面到打包APK全攻略

带个界面就得上 React、Vue,不会前端连个页面都做不了?我以前也是这么想的,直到我遇见了 Flet。这个基于 Flutter 的 Python 框架,让我一个纯后端出身、写 Python 爬虫和脚本的人,也能轻松搞出能跑在 Android、iOS、We…

作者头像 李华
网站建设 2026/9/20 2:51:24

QQ空间历史说说导出完整指南:把全部说说变成Excel和本地图

QQ空间历史说说导出完整指南:把全部说说变成Excel和本地图 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 很多人的QQ空间说说能翻到中学时代,但真正想找某一条时…

作者头像 李华
网站建设 2026/9/20 2:46:31

付费墙与内容访问限制:规则内解锁文章全文的实用策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华