使用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
文章作者 种瓜
上次更新 2015-10-17