AppFog真不是个省心的PaaS,相比OpenShift麻烦多了,在OpenShift上部署ownCloud可以看玛格姐的博文。。。好吧,看在提供DNS A记录,然后又在新加坡有节点,我就忍了AppFog了。下面讲一下我部署的过程,有点tricky,不是很专业的样子……AppFog和PHP老鸟请放过我。下面我开始讲了,如果要喷,请轻喷。
下载并修改ownCloud 5.0
- 去ownCloud.org下载最新稳定版本,解压
- 删掉里面apps下的firstrunwizard,这个愚蠢的应用会一直提示要你下载客户端之类的,关闭按钮疑似失灵了。所以直接删掉,不然世界不会清净的!
- 用你最喜欢的编辑器(比如Kate)打开libs/setup.php这个文件,下面要修改它了。初次登录ownCloud的时候会调用setup设置数据库balabala的,但是AppFog奇葩地不能获取一个长期有效的MySQL地址、端口等信息,只能通过PHP函数获取,所以要稍微修改一下这个文件,让它自动填写正确的mysql数据库信息。
(关于修改ownCloud代码的操作,可以看我新一篇的博文《使用autoconfig.php快速部署ownCloud到AppFog》,不需要这么麻烦来改setup.php)找到并注释掉下面这几行,这样就可以在数据库信息设置处保持空白而不报错了。
if(empty($options['dbuser'])) { $error[] = $l->t("%s enter the database username.", array($dbprettyname)); } if(empty($options['dbname'])) { $error[] = $l->t("%s enter the database name.", array($dbprettyname)); } if(substr_count($options['dbname'], '.') >= 1) { $error[] = $l->t("%s you may not use dots in the database name", array($dbprettyname)); } if($dbtype != 'oci' && empty($options['dbhost'])) { $error[] = $l->t("%s set the database host.", array($dbprettyname)); }
怎么注释?在这几行前面加上/*后面加上*/来注释……类似于C/C++的注释方法。然后找到下面这几行
//(这几行不要删!) //write the config file OC_Config::setValue('datadirectory', $datadir); OC_Config::setValue('dbtype', $dbtype); OC_Config::setValue('version', implode('.', OC_Util::getVersion())); if($dbtype == 'mysql') {
把紧跟着的下面这几行删掉。
//这些都删掉 $dbuser = $options['dbuser']; $dbpass = $options['dbpass']; $dbname = $options['dbname']; $dbhost = $options['dbhost'];
然后添加下面这几行。
$services_json = json_decode(getenv("VCAP_SERVICES"),true); $mysql_config = $services_json["mysql-5.1"][0]["credentials"]; $dbuser = $mysql_config["username"]; $dbpass = $mysql_config["password"]; $dbname = $mysql_config["name"]; $dbhost = $mysql_config["host"].':'.$mysql_config["port"];
这样setup就会自动把AppFog的MySQL这个service正确的信息复制到config.php这个文件中了。
修改工作还没完呢!!!config/config.sample.php复制一份为config.php(当然还是在config文件夹下),编辑config.php文件。把”apps_paths” => array(下面几行修改成如下所示。
array( 'path'=> OC::$SERVERROOT."/apps", 'url' => '/apps', 'writable' => true, ),
这样可以避免去找/var/www/owncloud/apps这个根本不存在的、而且没有写入权限的文件夹。至此,修改完成了(如有纰漏,还请指正)。下面开始部署!
部署到AppFog
没有appfog账号跑过来弹棉花啊?自己去注册一个,然后安装好CLI工具!打开终端,cd进入owncloud文件夹,输入
af push
按照提示一步步下去,记住要Create a service bound to this app!service类型选择mysql!如果忘记了,那就用af创建一个mysql service然后bind到你的这个app上!Infrastructure建议选择Asia Pacific(Singapore),理由=速度快+无墙。Memeory那里建议分配512M,Instance一个就好了。中间问你要不要保存manifest记得回答Y!这样以后在这个目录下执行af update就不用带app名了~~
等吧,耐心的等待,时间视网络情况而定。有时候可能会有500内部服务器错误,那就等几分钟后用
af update
重新部署一下。这里push和update的区别在于push是deploy到一个新建的app中,update是更新一个已经创建了的app!
一定要看到Starting Applicatioin….[OK]才表示成功,如果只出现push [OK]而没有staging、starting的过程,那么可以用
af restart $YOURAPPNAME
手动重启app,如果连push…[OK]这个提示都没有就需要重新af update上传。
完毕后
好了?打开应用地址,填写管理账户的用户名和密码,下面的数据库默认选择的是MySQL,不用填写mysql的任何东西(填了也是白填,都会被修改过的setup.php忽视的……),点击确定。不出意外的话就会进入到ownCloud的「文件」界面了。
ownCloud 5.0设计得很棒了!速度很快,支持drag & drop,大量的AJAX运用实在是让人爽翻天了!
ownCloud 5.0自带的应用主要有「文件」、「音乐」、「联系人」、「日历」、「相片」等。至于用来取代Google Reader的「News」目前在6.0 alpha中,感兴趣的可以去owncloud的git仓库抓trunk然后按照本文的修改办法修改之后部署。
P.S. ownCloud发展其实出乎我的意料,我一直以为这个又会是一个半吊子产品,而且最后会胎死腹中。结果这家伙居然顽强地活下来了,而且活得还不错,听说去年年底还获得了250万美金的投资!现在是无比期待6.0正式版的到来了!
3 responses to “在AppFog上部署ownCloud 5”
想问一个问题,Appfog不是没有持久化存储么?要是 重启 / 升级 Owncloud的话那些存在里面的数据不会丢失么?
只要app重启就会丢失数据。所以如果要升级/重启ownCloud的话,必须提前把数据(主要备份data文件夹)download下来,然后push的时候把数据重新push回去,MySQL数据库的数据倒是不会丢失。升级的话config.php里面应该还要设置installed为true!
AppFog上给出的永久存储的「临时解决办法」是挂载Amazon S3,AppFog自己的持久化存储已经在开发中了,不知道什么时候会出来就是。
[…] 上一篇文章讲了一个非常笨的办法(去修改setup.php),本文讲一个「正常」一点的办法部署ownCloud到AppFog,下载ownCloud这一步就不要我再啰嗦了吧? […]