使用Open edX中国社区Docker版来开发调试edX

说明(更新于2017-03-06)

今天在群里看到还有朋友在用我这个试验性项目,在此给大家一个提醒,除非对docker十分了解,不然不推荐使用,我个人已经不再维护这个项目(转而折腾AI了),edx docker化的过程坑多,建议国内用户使用@Zen的发行版(http://edustack.org/),@Zen一直在持续推进和完善这个项目。如果你实在是非docker不娶,建议关注官方的docker版本(还在开发中)

就开源项目而言,社区热度和持续维护很重要。


If you build it, they will come

Open edX中国社区Docker版,以下简称edx_cypress_docker。

关于如何安装使用,可以参考Open edX中国社区Docker版安装使用

该版本为两个目的服务:演示和开发,演示部分在以上文章中谈了,这篇文章谈论如何使用它来开发调试edX

预备技能

假设你已经基本熟悉

  • Python(Django/Mako)
  • js(backbone.js/requre.js)
  • Linux(Ubuntu)
  • edX

edX开发调试概述

调试edX是一件门槛不算低的事,而且这件事与使用docker或是vagrant或是直接在生产环境里调试关系不大,因为调试的方法和思路都是相似的,具体细节在edX Developer Stack中有谈及

使用Pycharm来调试的小伙伴可以看这里:Setting up PyCharm for edX development

社区计划

为了降低edX的开发门槛,让新手在上手时能顺畅些,不必过多地关心细节,我们想借用一键运行的概念,把一些常用的调试指令做成可执行文件,例如将start lms的复杂指令sudo -u www-data /edx/bin/python.edxapp /edx/app/edxapp/edx-platform-dev/manage.py lms runserver 0.0.0.0:5000 --settings devstack变为/edx_dev/start_lms,诸如此类,让新手在入手之初,能快速把开发环境跑起来,待熟悉之后再关注细节,我们想为新手打造一个抽象屏障,使其快速进入edx的开发状态。类似的便捷指令我们正在持续添加中。

类似的工作刚刚起步,也期待你的反馈,收集大家都需要怎样的帮助

Why Docker

之所以使用docker来作为开发环境,主要基于以下原因:

  • 相比vagrant更轻量
  • 只要docker pull和git clone 就可以快速在Windows/Linux/Mac/云平台立马开始开发。
  • 由于消耗资源少(1G单核便可),你甚至可以将系统写到U盘中,这样一来,可以把整个edx开发环境装到一个U盘里
  • docker镜像层级的概念,十分利于迭代开发,而且易于分发和团队协作
  • 面向未来,edX官方的开发环境也在往docker迁移,此次edX国际会议(第二次)中有一个黑客马拉松的主题便是这个

使用Docker来开发的思路

以下内容可能有些抽象,可以先跳过直接看后边的Workflow

  • 最核心的观念是把docker容器当做edx的运行环境,将其视为无状态最好。
  • 习惯vim/ipython调试的同学直接ssh进去就好
  • 使用Pycharm开发的话,只需要把remote Python interpreters指向docker中的/edx/app/edxapp/venvs/edxapp/bin/python即可
  • 开发过程中代码的变化和保存使用git来管理,源代码在docker外部,使用-v参数把目录挂载到容器里
  • 开发过程中如果需要改变容器本身(改变系统环境),则将这些变化写入Dockerfile中,build出新版本的image,分发给团队成员(push,pull)

Workflow

以我自己为例,在Ubuntu14.04中开发,系统中已经安装好docker了

  • 克隆(复制)你定制的edx-platform源码到docker所在机器里(mac/windows用户的docker可能在虚拟机里)
    • 示例:git clone -b edx_cn/cypress_cn https://github.com/easy-edx/edx-platform.git ~/edx-platform
  • 将开发环境跑起来
  • 示例: sudo docker run -itd -p 5000:5000 -p 5010:5010 -p 2022:22 -v ~/edx-platform:/edx/app/edxapp/edx-platform-dev wwj718/edx_cypress_docker:1.11
  • 进入到docker中(docker exec),启动lms/cms,多任务的适合建议使用tmux来管理窗口
  • 示例: /edx_dev/start_lms
  • 开发调试完成后,回到docker宿主机,将edx-platform代码的变更提交到远程仓库
  • cd ~/edx-platform
  • git add .
  • git commit -m 'your message'
  • git push origin edx_cn/cypress_cn:edx_cn/cypress_cn

社区协作

思路

以edx-platform源码库和edx_cypress_docker为中心,接受bug提交,Issues,Pull requests

源码库
qq群

106781163




Fork me on GitHub