
Open edX 部署指南LMS 与 Studio 双服务 6 步落地【免费下载链接】openedx-platformThe Open edX LMS Studio, powering education sites around the world!项目地址: https://gitcode.com/GitHub_Trending/ed/openedx-platformOpen edX Platform 是一个开源在线教学平台由一个仓库提供两个服务面向学员的 LMS学习管理系统和面向教师的 Studio内容管理系统即 CMS。平台用 Python/Django 写后端前端由 Django 模板和 React 微前端MFE组成。适合想自建在线课程平台的机构也适合想改源码、做二次开发的工程师。它为什么值得看很多团队的痛点不是缺一个课件系统而是课件、作业、成绩、证书这条链路散落在多个工具里。Open edX 把这条链路整合在一个平台里教师在 Studio 拖拽编排课程学员在 LMS 学习成绩判定、证书生成、学分记录全部走同一套数据和账号体系。另一个价值是可扩展性。它基于模块化单体业务逻辑集中在lms/djangoapps/下的各个 Django appgrades、certificates、courseware 等想加功能不用推倒重来。对教育机构来说AGPL v3 协议意味着可以免费使用并自由修改。三分钟看懂架构先记住一句话Studio 负责写内容LMS 负责发内容两边共享同一套用户和课程数据。StudioCMS教师的后台。课程在这里被组织成一棵由 XBlock 组成的树每个学习单元视频、作业、HTML 块都是一个可独立渲染、可继承扩展的 XBlock。LMS学员的入口。渲染 XBlock、处理注册选课、跑成绩和证书逻辑。异步链路重活不阻塞网页请求。比如下面的证书生成流程学员通过课程后Django 信号触发 Celery 任务证书写入数据库事件再推送到 Credentials 事件总线供下游消费。MFE微前端大部分页面 UI 已迁移到独立部署的 React 应用如 frontend-app-learning、frontend-app-authoringLMS/Studio 本身更接近无头后端这一点部署时要特别注意。部署前准备清单官方推荐的裸机部署bare metal基线如下每一项都可以自查类别要求自查方式操作系统Ubuntu 24.04lsb_release -aPython3.12python3 --versionNode.js24以仓库.nvmrc为准node --versionMySQL8.0需建两个库mysql --versionMongoDB7.xmongod --version缓存Memcached或 Redismemcached -V前端构建能执行npmnpm --version另外确认服务器磁盘可用空间大于 50GB、内存不低于 8GB。生产环境官方建议直接用 Docker 发行版 Tutor 托管裸机部署更偏开发和进阶场景详见 README 的 Bare Metal (Advanced) 章节。分步部署步骤 1克隆源码git clone https://gitcode.com/GitHub_Trending/ed/openedx-platform cd openedx-platform步骤 2安装系统级依赖部分 Python 包如 mysqlclient需要 C 库先装好再装 Python 依赖sudo apt install python3-dev default-libmysqlclient-dev build-essential pkg-config同时把 MySQL、MongoDB、Memcached 三个服务启动起来。步骤 3安装 Python 与前端依赖uv sync --group development --group ci npm clean-install第一条装后端开发环境第二条装前端构建依赖。步骤 4初始化数据库先在 MySQL 建两个空库并授权给用户再跑迁移./manage.py lms migrate ./manage.py lms migrate --databasestudent_module_history ./manage.py cms migratemanage.py的第一个参数lms或cms决定操作哪个服务配置入口分别是lms/envs/和cms/envs/。步骤 5构建前端静态资源npm run build-dev生产环境用npm run build产物由webpack.config.js各配置驱动。步骤 6启动 LMS 与 Studio./manage.py lms runserver 18000 ./manage.py cms runserver 18010两个服务分别在 18000 和 18010 端口。此时平台还是半无头状态界面功能要靠 MFE 补齐见下节避坑。部署成功自检浏览器打开http://localhost:18000/LMS 首页能返回页面返回 200 而非 500即说明后端链路通了。打开http://localhost:18010/Studio 应引导你登录开发环境可按 README 里的manage_user studio_worker加create_dot_application两条命令配置 Studio SSO仅限开发使用。想体验完整界面需额外部署 MFE默认端口约定Learning 2000、Authoring 2001、Learner Home 1996、Profile 1995、Account 1997。✅ 自检通过的标准LMS 首页可访问 至少 Learning 和 Learner Home 两个 MFE 可打开 Studio 能完成一次登录。值得了解的配置调整DATABASES数据库指向在lms/envs/、cms/envs/对应的 settings 模块里改DATABASES指向你自建的两个 MySQL 库。改完服务才真正连上你的数据库而不是默认 devstack 配置。MFE 地址覆盖设置LEARNING_MICROFRONTEND_URL、COURSE_AUTHORING_MICROFRONTEND_URL、LEARNER_HOME_MICROFRONTEND_URL把页面指向你自己部署的 MFE 地址。改完后平台不再用默认 localhost 端口适合 MFE 换域名部署的场景。CACHES[default]共享缓存指向同一台 Redis 或 Memcached。多节点部署时 LTI Provider 的 OAuth 防重放依赖共享缓存各进程各用本地缓存会导致防重放失效。TIME_ZONE 与截止时间默认TIME_ZONE_DISPLAYED_FOR_DEADLINES UTC见 lms/envs/common.py建议改成平台所在时区否则学员看到的作业截止时间是 UTC。避坑指南现象cms migrate成功但 Studio 内容搜索报错 primary key inference failed。原因Studio 搜索默认由 Meilisearch 支撑索引在cms migrate的 post-migrate 步骤创建迁移时 Meilisearch 没起来就建不了索引。解决先启动 Meilisearch默认http://localhost:7700重跑./manage.py cms migrate再执行./manage.py cms reindex_studio。现象LMS 能访问但页面几乎是空白、导航点不动。原因大多数前端已迁到 MFE裸跑 LMS 是mostly headless状态。解决按默认端口把 Authoring、Learning、Learner Home 三个 MFE 跑起来或用步骤 6 的 URL 覆盖设置指过去。现象uv sync时 mysqlclient 编译失败。原因缺少 MySQL 客户端头文件和编译工具链。解决执行步骤 2 的apt install命令后重试。现象Studio SSO 登录失败日志提示 cookie 未发送。原因跨站 SSO 依赖SESSION_COOKIE_SAMESITENone该模式要求 HTTPS 且SESSION_COOKIE_SECURETrue纯 HTTP 下只能退回LaxStudio SSO 会不可用。解决生产加载lms/envs/production.py会自动设置开发环境如用 HTTP接受该限制或配一层 HTTPS 代理。还能怎么玩写自己的 XBlock学习组件全部基于 XBlock 继承体系构建Studio 通过统一的 Info Handler 拉取元数据来渲染配置表单机制见 xmodule/ 源码。换肤themes/下提供了 dark-theme、red-theme 等示例主题往里头加 scss 即可改变 LMS/Studio 外观。启用功能包openedx/features/下有课程书签、课程搜索、调研报告等可选功能按需开启。写在最后Open edX 的部署核心就是装依赖、建库、起两个服务真正的复杂度在于 MFE 和周边服务照着清单走就能跑通。建议先按本文裸机流程把 LMS 和 Studio 跑起来再考虑用 Tutor 把它搬进生产。【免费下载链接】openedx-platformThe Open edX LMS Studio, powering education sites around the world!项目地址: https://gitcode.com/GitHub_Trending/ed/openedx-platform创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考