我相信open edx的容器化将对它的生态扩张,起到极大的推动作用,这种推动作用连同前后端分离,将成为open edx近来最重要的两大进展。关于open edx的这些重大调整,我们将在8月18日(下周末)北京的线下活动:Beijing Open edX Meetup 2018#1 中讨论

open edx容器化相关的谈论,我写在Open edX的容器化之路

本文中我们将使用docker来安装Open edX的最新稳定版本:hawthorn.1, 用作生产环境

本文可以视使用regisbopenedx-docker项目的实践笔记

实验环境

  • 阿里云 香港节点
  • 2核/16G
  • ubuntu16.04

依赖

  • 安装docker
    • sudo gpasswd -a ${USER} docker
  • 安装docker-compose:
1
2
export LC_ALL=C
sudo pip install docker-compose

开始安装

1
2
3
git clone https://github.com/regisb/openedx-docker
cd openedx-docker/
make all

一个小时左右,一切就绪! all in one!

ps: 目前的论坛还有些问题,我已经在issue里报告了这个错误,regisb回复说:

It should be fixed in the next version of the docker image, which will be built in a few minutes.

regisb在持续推进这个项目,大家可以放心


2018.8.14更新

@regisb 在最近的提交里已经Fix forum access error


深入

openedx-docker同时支持生产模式和开发模式。

如果你熟悉open edx和docker,稍微读一下openedx-dockerreadme,就可以开始正常的开发了

作者非常老司机,项目干净利落, 可读性极好,清澈见底,没隐藏任何魔法的东西。所有的东西基本走在:Makefiledocker-compose.yml写清楚了

关于组件化的思考

如果我们需要实现类似eduNEXT/appsembler的自主建站功能(SAAS),该怎么做呢

用户在页面上选择一些需要的功能,之后就会生成一个需要的定制版Open edX实例

我目前的想法是,用户在前端操作,本质是填写表单,选择他需要的功能列表(lms&cms,insight,ecommerce),提交之后,这些选择会自动生成一个声明性的文件,诸如docker-compose.yml,之后根据这个文件启动服务

将edx切割为不同的组件,openedx-docker已经做了,尤为可贵的是,它也演示了如何通过参数影响实例,表现在UI上,就是允许用户勾选表单来定制实例

往实例中传递定制化数据的方式有几种,openedx-docker使用了

当然如果我们要支持多用户,我们还需要将其部署到K8S上,可以使用kompose来将docker-compose.yml转化为K8S可用的文件

另一个思路是使用表单数据影响edx的配置文件(aws.py/json)

todo

本周末我将试着将Open edX部署到K8S,探索如何使用Open edX构建SAAS平台

tips

添加平台超级用户

USERNAME=edx EMAIL=edx@example.com make create-staff-user

https

https://github.com/regisb/openedx-docker/issues/46 https的问题

参考