在新的服务器上部署edX(version=release-2014-09-17)成功,过程还是挺折腾的,做个笔记。

竹轩同学整理了2014年8月12日以来(到14.9.18)edx上更新的内容,更新内容很多,许多新的特性还是很实用的,也修复了不少bug,这也会我决定使用新版本的原因

#部署经过 官方教程,新旧版本都适用。主要的安装步骤里边都有。我采用了Manual installation,分步安装,其实就是把一步安装脚本拆开来

###换源 我的ubuntu版本是12.04.5,默认apt源是国内的,会找不到依赖包,所以我们先换源。欧洲源好像还不行(也有部分软件包无法拉下来),所以后来我采用美国的源。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
:::text
#备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bat
#添加us的源
sudo vim /etc/apt/sources.list,加入以下内容

###### Ubuntu Main Repos
deb http://us.archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse 
deb-src http://us.archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse 

###### Ubuntu Update Repos
deb http://us.archive.ubuntu.com/ubuntu/ precise-security main restricted universe multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ precise-updates main restricted universe multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse 
deb-src http://us.archive.ubuntu.com/ubuntu/ precise-security main restricted universe multiverse 
deb-src http://us.archive.ubuntu.com/ubuntu/ precise-updates main restricted universe multiverse 
deb-src http://us.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse 

###### Ubuntu Partner Repo
deb http://archive.canonical.com/ubuntu precise partner
deb-src http://archive.canonical.com/ubuntu precise partner

###### Ubuntu Extras Repo
deb http://extras.ubuntu.com/ubuntu precise main
deb-src http://extras.ubuntu.com/ubuntu precise main

deb http://extras.ubuntu.com/ubuntu precise main,可能会说你缺少密钥,无视它

sudo apt-get upgrade 之后,记得看下ssh配置文件(/etc/ssh/sshd_config),确定允许认证登录: PasswordAuthentication yes

之后再重启

###部署 下面我们就按照官方教程部署edX-Ubuntu-12.04-64-bit-Installation

如果完全按照官方教程走,那么安装的edx版本是master(生产环境尽量不要安装master版本),也就是最新的,作为第一个吃螃蟹的人,遇到问题挺不好解决的。所以最好是安装某个版本,自己或别人部署成功过的。

要做到这点,就在安装的时候指定版本,像下面这样

1
2
:::text
cd /var/tmp/configuration/playbooks && sudo ansible-playbook -c local ./edx_sandbox.yml -i "localhost,"  -e edx_platform_version=release-2014-09-17

以上是我用的,edx-platform版本是release-2014-09-17

之后的安装过程遇到的错误,其实大同小异,无非网络问题(推荐使用sshuttle),兼容(依赖)问题,如果再哪一步断了(一般都会中断,很少有一次成功),可以停下来解决完问题再继续.

当遇到的是国外网络无法连接问题,使用sshuttle就好

需要注意的是使用sshuttle的时候,服务器ip就被隐藏了,你一旦退出ssh连接就无法再连上。解决方案也是有的。使用ngrok映射出ssh端口,可以参考我的这篇文章,目前不清楚原因,偶然发现的,也许还算原创^_^

当遇到系统依赖问题。诸如 TASK: [edxapp | install python base-requirements]报错说无法找到依赖包(比如使用了豆瓣源),就手动切换到edxapp用户,source到edxapp_environment,至于edxapp_environment在那个,可查看playbooks/roles/edxapp里的相关参数,或是直接这样 /edx/app/edxapp/venvs/edxapp/bin/pip 安装好依赖再从这个task执行就好

####从某个task继续执行

1
2
:::text
cd /var/tmp/configuration/playbooks && sudo ansible-playbook -c local ./edx_sandbox.yml -i "localhost,"  -e edx_platform_version=release-2014-09-17 --start-at-task="TASK_NAME"

这里需要注意的是,有些步骤有前后依赖问题,诸如前面步骤设置了运行所需参数,所以有时可能要倒退几个task开始,如何寻找之前的task,查看/var/tmp/configuration/playbooks/roles/…

暂时写到这里,新版本的汉化和主题可能也有些变更,之后再写

#附 ##1 竹轩同学提到的近期部署可能遇到的问题@2014.9.18,我在ubuntu上直接部署没有遇到。不过之前在安装devstack时遇到了。

后来我的devstack又部署了之前用的release-2014-07-02

##2 python换源

如果觉得国外python源太慢,可以换用国内的,我用的是豆瓣

vim /var/tmp/configuration/playbooks/roles/common/defaults/main.yml

COMMON_PYPI_MIRROR_URL: 'http://pypi.douban.com/simple

使用豆瓣源时,速度很快,不过在edxapp(user_role)安装/edx/app/edxapp/edx-platform/requirements/edx/base.txt的时候找不到dogapi==1.2.1。我是停下来手动装好了