Open edX 部署:从依赖装不上到生产上线的 6 个卡点
2026/9/20 11:47:05 网站建设 项目流程

Open edX 部署:从依赖装不上到生产上线的 6 个卡点

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

Open edX 是一个开源在线教育平台,由两个独立 Django 工程组成:LMS 面向学生提供课程与学习管理,CMS(Studio)面向教师提供课程内容创作。它不是单进程应用,而是一套包含 MySQL、Mongo、Memcached、Meilisearch 和若干前端资源的组合,所以"跑起来"和"能上线"之间隔着大量容易踩坑的环节。这篇文章按部署中真正会把人卡住的点组织,覆盖裸机环境、LMS/CMS 启动、性能与安全配置、故障排查和扩展接口,适合准备落地开源学习平台的技术负责人与运维工程师。

先解决依赖装不全:Python 3.12、Node 与前端构建

裸机部署的基线是 Python 3.12、Node.js、MySQL、Mongo、Memcached 和 Meilisearch,缺一个都会在后面某个环节暴露出来。依赖分两层装,顺序不能反:

pip install -r requirements/edx/development.txt

装完 Python 依赖再编译前端,依赖清单目录里的base.txt是运行时基线,development.txt额外带开发工具,按你实际用途选。

npm clean-install npm run build-dev

npm clean-install而不是npm install,是为了删掉可能过期的node_modules,保证可复现;不先编译 webpack bundle,页面静态资源就全是 404。

数据库迁移的三个坑:两个库、Meilisearch 时序、重索引

初始化不是两条命令就结束的事。LMS 有两个库要迁移,Studio 搜索索引还依赖迁移时的钩子:

python manage.py lms --settings=development migrate python manage.py lms --settings=development migrate --database=student_module_history python manage.py cms --settings=development migrate

⚠️ Meilisearch 必须在cms migrate之前起好,因为索引由 post-migrate 钩子创建;漏掉的后果不是迁移报错,而是之后建索引时报 "primary key inference failed",只能重启 Meilisearch 重跑cms migrate再执行reindex_studio补救。

LMS 和 CMS 起不来的排查顺序

按依赖链排查,不要从报错信息反推。先确认 MySQL、Mongo、Memcached 三个服务都活着,再起服务:

python manage.py lms --settings=development runserver local.openedx.io:8000 python manage.py cms --settings=development runserver studio.local.openedx.io:8001

local.openedx.io这类域名解析到 127.0.0.1,但能让 cookie、CORS、CSRF 跨域行为更接近生产,比localhost:端口少踩一类坑。Studio 通过 OAuth SSO 登录 LMS,要建 worker 账号和应用:

python manage.py lms --settings=development manage_user studio_worker studio_worker@example.com --unusable-password python manage.py lms --settings=development create_dot_application studio-sso-id studio_worker \ --grant-type authorization-code --skip-authorization --scopes user_id

⚠️ 带--skip-authorization的应用只在开发环境用,生产照抄会让认证裸奔。

开发环境DEBUG = True时静态资源直接从源码目录提供,不用跑collectstatic,省掉一整类静态文件同步问题。

生产上线前必须对齐的配置

进入生产,第一件事是换配置模块:开发走--settings=development,生产环境配置叠加在 LMS 公共配置基线 之上,差异定义在 lms/envs/production.py 与 cms/envs/production.py。gunicorn worker 数等进程配置分别在 lms/docker_lms_gunicorn.py 和 cms/docker_cms_gunicorn.py,不调整的话 worker 默认值撑不住真实并发。

生产切换必须核对的四个配置项:

  • CACHES指向 Memcached 而不是进程内缓存,否则多 worker 之间缓存互不可见,重复请求照样穿透到数据库。
  • DATABASES指向真正的 MySQL 实例,开发配置里的本地库不能带到生产。
  • SECRET_KEY与 OAuth client-secret 走环境变量注入,写死在代码库里等于把密钥公开。
  • SESSION_COOKIE_SECURECSRF_COOKIE_SECURE打开,强制 Cookie 只走 HTTPS,避免会话被中间链路窃取。

Open edX 性能调优的三个落点

LMS 和 CMS 是两个独立 Django 进程,各自起 gunicorn worker 池,互不干扰,压测时也要分开打。调优优先级从高到低:

  1. CACHES接 Memcached 之后,重复请求不再穿透到 MySQL,这是收益最大的一项。
  2. webpack-stats.jsonnpm run build-dev生成后,前端资源可被浏览器长缓存;静态资源路径不对时,先查这份 manifest 是否新鲜。
  3. 查页面慢先在浏览器 Network 面板区分是后端响应慢还是前端资源慢,再决定动数据库还是动构建产物。

想改但不知道改哪:XBlock、主题与 API 扩展

Open edX 提供三类扩展入口,对应三种常见诉求:

  • 自定义学习组件走 XBlock 标准,以 XBlock 形式挂进课程,docs/concepts/extension_points.rst 列了官方支持的扩展点清单,改组件前先看这里,能避免自己造轮子。
  • 改外观去 themes/ 目录,每个主题分lms/cms/两侧放 scss 与模板,只改一侧会导致学生端和教师端风格不一致。
  • 系统间数据交互走 DRF API,docs/lms-openapi.yaml 是 LMS 侧 API 的完整 schema,可以直接拿给前端做契约联调。

现在就可以做的下一步:打开 lms/envs/development.py 和 cms/envs/development.py,把MEILISEARCH_MASTER_KEY等变量与你本机服务对齐,然后运行python manage.py lms --settings=development runserver local.openedx.io:8000,用浏览器访问 8000 端口验证 LMS 是否就绪。

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

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

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

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

立即咨询