2014-05-13
自定义Openshift Apache/PHP/Mysql 的时区(TIMEZONE),修改区域为"Asia/Shanghai" '+08:00'

有趣的是,OpenShift 某些cartridge 的配置文件是可以自定义的,如php.ini 、my.cnf,但是自定义的配置在应用重启后就会丢失,这样也是为了保证应用的稳定吧。但针对个人开发需要,需要变更某些参数时就麻烦了。 这一次遇到的问题是与系统时间有关的,OpenShift 默认时区是GMT,不使用我们大陆用户使用的东8 时区,所以需要修改TIMEZONE 来迎合个人使用需要。我的一个应用(appname)使用的Cartridge 有PHP5、Mysql-5.5、phpMyadmin。这次要定义Apache、PHP及Mysql 的TIMEZONE值。 Apache / PHP: 1) 在php 应用更目录(Documentroot)添加.htaccess 文件,有的话就直接在原基础上修改就可以了。加入定义内容:

SetEnv TZ Asia/Shanghai
php_value date.timezone Asia/Shanghai

2) 重启应用:

ctl_all restart

3) 查看phpinfo :

Apache Environment 段相关值如下

TZ

Asia/Shanghai

date 段

date/time support

enabled

“Olson” Timezone Database Version

0.system

Timezone Database

internal

Default timezone

Asia/Shanghai

Directive

Local Value

Master Value

date.default_latitude

31.7667

31.7667

date.default_longitude

35.2333

35.2333

date.sunrise_zenith

90.583333

90.583333

date.sunset_zenith

90.583333

90.583333

date.timezone

Asia/Shanghai

GMT

定义Mysql 的TIMEZONE: OpenShift 的mysql 配置文件位于~/mysql-5.1/conf/my.cnf,直接修改这个文件后,修改过的内容同样会在mysql cartridge 重启后丢失。 既然无法通过修改my.cnf 文件添加default-time-zone=timezone(default-time-zone=’+08:00’)来定义时区,那只能另外想办法了。 幸好,OpenShift 考虑得非常周到,可以通过rhc 客户端工具自定义环境变量来设置Mysql 时区!这个环境变量是:

OPENSHIFT_MYSQL_TIMEZONE

那么通过rhc 来定义变量OPENSHIFT_MYSQL_TIMEZONE 的值: 1)

rhc set-env -a a OPENSHIFT_MYSQL_TIMEZONE=’+08:00’ -a appname

2) 重启mysql cartridge 及app

rhc cartridge mysql-5.5 -a date
rhc app start appname

3) 检查变量值

rhc ssh appname –gear ‘env | grep TIMEZONE | grep -v grep’

输出:

OPENSHIFT_MYSQL_TIMEZONE=+08:00

也可以通过查看phpinfo.php 页面检查变量值:

OPENSHIFT_MYSQL_TIMEZONE

+08:00


题外话,如果你的程序遇到500 等其他错误需要查看php 错误信息来调试应用,可以通过一下方法临时变更php 的display_erros 及error_reporting 的值:

Read More

2014-03-18
OpenShift 自定义 OPENSHIFT_DOCUMENT_ROOT 变量,替换网站根目录路径!

WordPress 放在OpenShift 这么长时间以来,一直没有出现过问题,真是太省心了。最近因为VtigerCrm 更新至6.0,想找个可靠的外网环境试用一下,当然还是选择了OpenShift 。不过在创建了php-5.4 的cartridge 后,登陆到shell,发现php 应用的根目录不再是曾经的~/app-root/repo/php,而是~/app-root/repo。个人陋习有时可能会rm 掉整个目录的文件,或者需要创建子目录存放其它文件,如OpenShit 自动备份倒dropbox 的脚本等,这样显然很危险!所以作为一个OpenShit 使用Apache-based cartridge 的用户,我还是十分乐意能有个选择去改变应用的公共目录(public directory),也就是Apache 服务里的DocumentRoot 了。这样我就再也没必要将我的代码放到一个预先定义的子目录里面啦。如~/app-root/repo/php,那么只要将VtigerCrm 存放至php 目录下就好了。 预先定义的子目录 :)

  • DIY: DocumentRoot=${OPENSHIFT_REPO_DIR}diy
  • PERL: DocumentRoot=${OPENSHIFT_REPO_DIR}
  • PHP: DocumentRoot=${OPENSHIFT_REPO_DIR}
  • Python: DocumentRoot={OPENSHIFT_REPO_DIR}
  • Ruby: DocumentRoot=${OPENSHIFT_REPO_DIR}public

我能够通过更改$OPENSHIFT_DOCUMENT_ROOT 这个环境变量去定义这个DocumentRoot 的值:

rhc env-set OPENSHIFT_DOCUMENT_ROOT=”\${OPENSHIFT_REPO}/custom-directory” –app NAME

登陆检验:

rhc ssh echo $OPENSHIFT_DOCUMENT_ROOT

成功输出自定义值。结束!

Read More

2013-12-06
为搭建在OpenShift 上的站点用上免费的百度加速乐CDN 服务

昨晚收到来自百度的推广邮件,说是加速乐升级为“百度加速乐”一百天的日子,并未未备案的同学们提供了海外节点。所以一直在使用Incapsula 服务的小博也尝试转移到了百度加速乐上,本文记录下搭建在OpenShift 上的WordPress 使用百度加速乐的简单步骤。

  • 添加域名:

    加速乐可以使用百度账号登陆了,登陆后添加域名,不过发现在添加域名时是没有接入方式供选择的,在其帮助文档中提到接入方式可选“NS 接入”及“CNAME 接入”。其实添加域名后发现已经默认了“NS 接入”的方式,然后再更改就可以了。

    添加域名切换域名接入方式

  • 添加子域名:

    然后按照其提示,依次“激活”再依照“向导”添加域名,像小博就添加了两个域名:laifuying.com 及 www.laifuying.com ,服务器IP 里直接填写OpenShift 里的域名的IP就可以了。如一般的域名是abc-namespace.rhcloud.com,ping 一下就可以知道其所解析到的主机IP。

    添加子域名ping 服务器IP

  • 设置DNSPOD CNMAE 解析

    添加子域名后,在DNSPOD 域名管理面板里设置上百度加速乐提供的CNMAE 即可。

最后去just-ping.com ping 一下,看看各地解析生效情况。

Read More

2013-02-13
在openSUSE上安装OpenShift Client Tools ruby rhc

嗯,换上了openSUSE,感觉自己瞬间变成了一大菜鸟,很多东西都不懂配置,就在软件源这方便就折腾了很长一段时间,不过openSUSE的中文环境确实很不错,换成中文之后,默认的输入法是fcitx ,装上fcitx-config-kde4 之后配置输入法简单了许多。 越说越远了,其实主要是记录一下在openSUSE上弄上redhat 的OpenShift Client Tools 的过程。说来也不复杂,不知道我启用的社区软件源是否已经包含了ruby这个包,因为之前在ubuntu上配置的时候是用

sudo apt-get install rubygem-rhc

,然后

sudo gem install rhc

弄好的。 顺着思路,在openSUSE的konsole 上输入gem 提示找到命令之类的,幸好konsole 还是挺友好的,找不到命令,可通过“cnf 命令”来搜索包含此命令的软件包,就这样,通过:

cnf gem

成功找到ruby,然后嘛:

sudo zypper install ruby
sudo gem install rhc

成功配置好了。

Read More

2013-02-06
自动清理OpenShift 的日志文件 解决 file write error (Disk quota exceeded) 错误

最近,有个应用每隔几天就502,提示错误信息 “error: file write error (Disk quota exceeded)”,看来又是挤满了空间,超出了配额。后来发现是因为程序的不完善,php 给出了很多的警告,并将这些信息写入到目录~/php-5.3/logs 里面。所以隔了一段时间应用又会到达配额限制,而解决方法就是手动清理这些庞大的日志文件。 既然知道了问题,那么就好解决了,为了偷懒,还是动用OpenShift 的定时任务吧,之前不是提到《小记配置OpenShift 网站数据和Mysql 数据库到Dropbox的自动备份》吗,那么我们只需按照同样的思路制作一个定时清理日志的cron即可。 首先添加一个cartridge (rhc app cartridge add -a $app -c cron-1.4 ) 到应用下,然后添加一个日常任务到.openshift/cron/daily/cleanup-old-logs 就可以了。 下面是脚本内容,例子中是保存180 天内的日志文件,这个根据需要可以自己修改:

cd $OPENSHIFT_PHP_LOG_DIR

find . -type f \( -name access_log-\ , -name error_log-\ \) -mtime +180

Add this to the above command to backup as a gzipped tarball: | xargs tar -czvf backup-logs-$(date +%Y%m%d).tar.gz

Add this to the above command to delete ‘em: -exec rm {} \; or | xargs rm)

如我的设置为:

find . -type f \( -name access_log-\ , -name error_log-\ \) -mtime +3 -exec rm {} \;

关于find 的语法,需要的朋友可参考《收集整理了一下linux下find命令的用法

Read More

2013-01-21
OpenShift 绑定域名 间接解决SSL证书错误

最近小博访问出现了点意外,确实也没有动过什么东西,不曾增减wordpress 的插件也没有动过.htaccess,但是博客就是会自动跳转到https ,而且这现象在google 的chrome 下更为严重,各种css、js无法加载,页面乱的一团糟,MacBook 下还友好点,起码也提示是否继续加载不安全的内容 - -,之前甚至连多说评论都无法使用了。Oh ~~ 鉴于google 有关OpenShift ssl证书问题依然无果,暂时也不想继续折腾了,所以只能通过绑定独立域名来解决问题了,现在小博正式启用域名laifuying.com了。域名还真是刚刚注册的,名字有点小长,但是自己能记住就好! 回顾下使用rhc 绑定OpenShift 域名的过程:

rhc alias add lai laifuying.com -d –timeout=20

rhc alias add lai www.laifuying.com -d –timeout=20

嗯,带与不带www 的都给绑定了,还在.htaccess 下做了个之前的 http://www.laifuying.com 301重定向,域名管理哪里也添加了@ 的 cname 到 www.laifuying.com ,现在小博基本是正常了。就是域名注册消耗了50刀,话说godaddy 现在还自动判断国内ip 了,连货币格式都给自动转换为“¥”了,可惜“¥”下看不到支付宝付款,当时还真吓我一跳,幸好度娘了一下(习惯真不好),结果将货币调整为usa 就好了。 上面之所以加了-d 和 –timeout=20,是因为rhc 老是不能正常完成任务,经常timeout 等等。暂且加上-d 调试和设置 –timeout=20 加长超时时间,这样子运行起来顺利了很多。 现在知道css js 不加载的原因了,是插件WP Super Cache 启动了mod_rewrite 缓存模式导致https协议下页面出错,现在切换为基本的PHP 缓存模式了。

Read More

2012-12-31
OpenShift 超出资源配额导致503错误 SSH管理提示Disk quota exceeded

近段时间使用OpenShift 再次出现503错误,登陆ssh 也提示Disk quota exceeded,可能确实超出了资源配置,所以即使通过使用rhc app restart $appctl_all restart 来重启应用都无法解决问题,赶忙上OpenShift社区看看。 我那个应用全部都是静态页面,但我的Cartridges依然是使用了PHP,不知道会不会有负面影响。下面是出现503错误时使用quota输出的使用情况:

quota -s
quota: Cannot resolve mountpoint path /tmp (deleted): No such file or directory
quota: Cannot resolve mountpoint path /var/tmp (deleted): No such file or directory
Disk quotas for user 43be8375e7ef43009305a7683749fa32 (uid 4341):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/EBSStore01-user_home01
100812 0 1024M 1280 0 40000

OpenShift, Inc 工作人员Nam Duong在社区上提到:

How can we see how much is left? I have scheduled a cron job to delete all log files > 3 days now, which leaves ~90MB of logs for 3 days. Would that be a problem? That shouldn’t be the problem. You can use rhc app tidy `instead。`

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

> When JBoss starts up, it will need to process the war file using temporary diskspace. If you application war file is large, temporary disk will be consumed proportionally to the size of your war file. In the case above, the user had a large war file which consumed a total of 700MB on startup thereby surpassing the 1GB diskspace limit before completely starting up.

([原文链接](https://openshift.redhat.com/community/kb/kb-e1063-jboss-app-fails-to-start-and-throws-javaioioexception-disk-quota-exceeded-but-quota-s)) 也就是说是用`rhc app tidy`整理清除应用的日志文件和临时目录即可,然后使用`rhc app force-stop $app`和`rhc app start $app`或者登陆ssh 使用`ctl_all restart`重启应用。 _小插`rhc help app` 输出的tidy帮助说明:Clean out the application's logs and tmp directories and tidy up the git repo on the server_ 执行

rhc app tidy $app

使用

quota -s

查看当前资源使用,输出如下:

quota: Cannot resolve mountpoint path /tmp (deleted): No such file or directory
quota: Cannot resolve mountpoint path /var/tmp (deleted): No such file or directory
Disk quotas for user 43be8375e7ef43009305a7683749fa32 (uid 4341):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/EBSStore01-user_home01
162M 0 1024M 1280 0 40000

现在应用已经恢复正常,503错误已经消失了。``
Read More

2012-11-09
小记配置OpenShift 网站数据和Mysql 数据库到Dropbox的自动备份

由于在OpenShift 创建的 Application 有几个,对于自己来说,每个每天准时备份一次全部数据,确实有点吃力。如果一次都可以自动化,那就实在太好了。真的,后来看了看freehao123 博主的《OpenShift免费空间全自动定时备份网站数据和MysqL数据到Dropbox》(原文链接:http://www.freehao123.com/openshift-dropbox/),决定着手试试。下面记录下我在配置过程中遇到的一点小问题和自己的解决方法。 前面配置Dropbox 基本是很顺利的,没有什么大问题,freehao123 博主的教程很详细,按部就班很容易就成功了。主要是配置使用Dropbox uploader执行OpenShift空间自动备份bak_openshift_to_dropbox.sh的配置有点小出入,可能是因为OpenShift 最近做了小调整的原因吧。附上脚本下载地址,再次感谢 freehao123 博主。

1、下载:http://www.zhujis.com/myvps/bak\_openshift\_to\_dropbox.sh 2、备用:http://uploads.shuyz.com/2012/08/bak\_openshift\_to\_dropbox.tar.gz

懒得打字了,继续借用freehao123 博主原话:

7、你可以用上面两种方法将该备份脚本上传到OpenShift空间上,不过你还需要打开bak_openshift_to_dropbox.sh。 8、主要是要设置你的应用名称、数据库地址、端口、用户名、密码等,请注意下面的划红线的地方。 9、完成上面的设置后保存,执行以下命令,给脚本加上可执行权限和执行首次自动备份。

chmod +x bak_openshift_to_dropbox.sh
./bak_openshift_to_dropbox.sh

10、如果你能看到下图所示就表示你的配置正确,备份没有问题了。 11、回到你的Dropbox就可以看到刚刚备份过来的打包文件了,里面有数据文件和数据库文件。你现在可以直接下载到本地作再次备份了。

好!问题来了。首先是bak_openshift_to_dropbox.sh 里面的appname,OpenShift 可能是近几天才改的吧,我们的~/目录下不再是我们创建应用的名字了,OpenShift 已经用”app-root”取而代之了,也就是appname这里必须更改为”app-root”而不是你应用的名字,当然你也可以直接更改${appname}的为”app-root”,不过肯定不够上面的方面吧。简而言之,设置appname=app-root就对了。 完全正确设置了自己的参数后,执行:

./bak_openshift_to_dropbox.sh

出现错误:

bash: ./bak_openshift_to_dropbox.sh: /bin/sh^M: bad interpreter: 没有那个文件或目录

这错误是因为不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。 解决方法: 解决:1)在windows下转换: 利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File–>Conversions–>DOS->UNIX即可。 如果是 Notepad++ 则是在: 编辑 -> EOL Conversion -> 转换为 UNIX 格式 中。 2)也可在Linux中转换: 首先要确保文件有可执行权限

chmod a+x bak_openshift_to_dropbox.sh

然后修改文件格式

vi bak_openshift_to_dropbox.sh

利用如下命令查看文件格式

:set ff 或 :set fileformat

可以看到如下信息

fileformat=dos 或 fileformat=unix

利用如下命令修改文件格式

:set ff=unix 或 :set fileformat=unix

:wq (存盘退出)

最后再执行文件

./bak_openshift_to_dropbox.sh

此时,终于看到进度条了,回到Dropbox,文件已经成功备份。 差不多就是这些小问题了,还有一点,~/app-root/ 目录下不具有写入权限,各位留意下bak_openshift_to_dropbox.sh 里面有关文件夹的创建,我是全部更改到新建的dropbox下的,也就是~/app-root/repo/dropbox/ 下面。文件夹需要手动创建,只需创建tmp和logs两个目录即可:

cd ~/app-root/repo/dropbox/
mkdir tmp logs

上面是我自己的目录路径,你也可以直接下载我的bak_openshift_to_dropbox.sh

Read More

2012-11-06
OpenShift 503 Service Temporarily Unavailable 解决方案

今天不知道为什么WP打不开了,就一个503错误。

Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

本来以为是服务器出现了小小错误,临时出现问题,稍等即可恢复。谁知一直都还是503,后来逛了逛官方的论坛,在帖子《503 errors are back》找到了解决方案,帖子地址:https://openshift.redhat.com/community/forums/express/503-errors-are-back。但是就像论坛中的那位朋友说道“I haven’t done anything to make it stop, and the errors are intermittent”,所以我也不知道这个503是怎么出现的,毕竟我也没有手动去stop 它。 暂时通过以下方法重新start了,不知道有没有后遗症。

rhc-ctl-app -a log -c start

如果看了这篇文章恰好知道这个问题是怎么出现的,麻烦留个回复哈~ 贴上terminal 执行过程:

ying@ying-desktop:~$ rhc-ctl-app -a AppName -c start
Password: **

RESULT:
Success

Read More