Category Archives: Cloud

Windows下git文件可执行属性的处理

在使用openshift的过程中,.openshift\action_hooks\下面的脚本,在deploy的时候没有自动执行。研究了半天,才发现是windows平台下,文件的可执行属性没有加上,所以到了server端之后,这些脚本都没有成功的执行,解决的方法如下:

D:\workspaces\hrm\.openshift\action_hooks>git update-index --chmod=+x build

D:\workspaces\hrm\.openshift\action_hooks>git update-index --chmod=+x deploy

D:\workspaces\hrm\.openshift\action_hooks>git commit -a -m "update permission"
[master 69a5e52] update permission
 0 files changed
 mode change 100644 => 100755 .openshift/action_hooks/build
 mode change 100644 => 100755 .openshift/action_hooks/deploy

D:\workspaces\hrm\.openshift\action_hooks>git push

这样action_hooks下面的脚本就可以正确的被执行了

使用CDN来为自己的网站加速

在openshift上为丁丁做了一个在线的相册,可是openshift在国内的访问总是时断时续,速度很慢

怎么办?CDN加速吧,国内有不少的加速服务,比如安全宝等,但是因为要求网站登记,我就懒得折腾了。

国外的有cloudflare, 还有incapsula。cloudflare需要把网站的NS指到它提供的域名服务器上去,风险太大了;incapsula可以针对某个子域名做CNAME的更改就可以了。所以就选择了incapsula

D:\workspaces\tools>python dnslookup.py -h tintin.zfdang.com
QUERY Host=tintin.zfdang.com, Type=CNAME
tintin.zfdang.com CNAME 4ron5.x.incapdns.net.
4ron5.x.incapdns.net. IP 199.83.129.82

试用了一下,效果还可以

迁移openshift的主机

openshift提供了3个free gears可以来做一些自己的服务,但是问题是openshift使用的IaaS是amazon的云平台,amazon的云平台在国内,有时候访问会有些问题。但是不是所有的amazon的服务器都有问题。

遇到这种问题,最好的方法就是将openshift提供的gear删除了,然后再重现建一个gear, 这个新的主机和原来的主机使用不同的amazon的服务器,或许在国内访问就没有问题了。rhc snapshot提供了save snapshot和restore的功能,使得这个过程变得非常容易。下面是操作wordpress的具体过程:

1) Take a snapshot:
> rhc snapshot save -a blog
This should save a file called blog.tar.gz to current working dir.

2) Make sure your snapshot is saved, then delete your app:
> rhc app delete -a blog

3) Recreate your app:
> rhc app create -a blog -t php-5.3
> rhc cartridge add -a blog -c mysql-5.1
这个cartridge一定要先加好了,否则restore的时候会出问题。

4) add alias for the app
> rhc alias add blog blog.zfdang.com

5) Restore your snapshot:
> rhc snapshot restore -a blog -f blog.tar.gz

输出结果如下:

Restoring from snapshot blog.tar.gz...
restart_on_add=false
Waiting for stop to finish
Done
Removing old git repo: ~/git/blog.git/
Removing old data dir: ~/app-root/data/*
Restoring ~/git/blog.git and ~/app-root/data
Running extra restore for mysql-5.1
restart_on_add=false
Running .openshift/action_hooks/pre_build
Running .openshift/action_hooks/build
MySQL already running
Running .openshift/action_hooks/deploy
Database server found at xxx.xxx.xxx.xxx. initializing...
Database found, skipping import.
hot_deploy_added=false
MySQL already running
Done
Running .openshift/action_hooks/post_deploy
Terminating...

RESULT:
Success

 

免费的网站监控服务

openshift的服务和连接都不是太稳定。所以推荐大家用监控宝对自己的网站做一个监控,啥时候连接不上的话,也可以及时去处理。

昨天就发现了这个blog无法连接了,ssh到主机,发现文件系统变成read-only了。再看uptime, 貌似是刚刚有过一个重启,之后系统就出问题了。今天上午才好,监控宝检测的宕机时间是8个小时

监控项目 开始时间 恢复时间 故障持续时间 故障原因 故障分类
2013-02-03
blog.zfdang.com 19:55:13 03:55:28 8小时0分钟 无法连接服务器

 

目前国内提供监控服务的网站主要有:

  • 监控宝 http://www.jiankongbao.com/
  • 盛大云监控 http://cms.grandcloud.cn/
  • 阿里云监控 http://jiankong.aliyun.com/
  • Webluker http://www.webluker.com/
  • 运行宝 http://www.yunxingbao.cn/

国外也有类似的服务,比如

Uptime Robot

号称全免费(Totally Free),并且提供5分钟的监控频率,每账户可监控50个站点,通过邮件、短信、RSS和Twitter发送提醒信息

Mon.itor.us

 

openshift里可用的端口

It is possible to bind to the internal IP with port range: 15000 – 35530. All other ports are reserved for specific processes to avoid conflicts. Since we’re binding to the internal IP, you will need to use port forwarding to access it: https://openshift.redhat.com/community/blogs/getting-started-with-port-forwarding-on-openshift

Here are a list of externally addressable ports:
http (80/443)
ssh (22)
SMTP/submission (25, 465, 587)
IMAP (143, 220, 993)
POP (109, 110, 995)
Besides 15000 - 35530 (which aren't externally addressable), you can also bind to port $OPENSHIFT_INTERNAL_PORT (8080) for http connectivity. It will get routed externally through port 80.

所以如果要自己起一个memcached的话,只能bind在内部的ip上,如下命令:

./memcached  -l $OPENSHIFT_INTERNAL_IP -p 22322 -d

 

在php@openshift里获取用户的真实IP

做了一个ip.zfdang.com来查询ip的地理位置信息。可是做完之后,发现得到的用户IP总是127.xxx.xxx.xxx.

后来发现,openshift在你的服务器和用户之间,增加了一个转发层。这个转发层的IP被记录成$_SERVER[‘REMOTE_ADDR’]了,但是用户的真实IP却被隐藏了。但是有另外一个变量记录了用户的真实IP:$_SERVER[‘HTTP_X_FORWARDED_FOR’]。 所以把代码里的REMOE_ADDR换成HTTP_X_FORWARDED_FOR就好了。

对于 wordpress的blog系统来讲,最简单的方法是在wp-config.php里将$_SERVER[‘REMOTE_ADDR’]重新赋值:

/** Restore visitor's real ip when run on openshift */    
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))   
   $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];

 

 

 

OpenShift里的FreeShift和MegaShift

OpenShift提供了免费的FreeShift和增值的MegaShift. FreeShift提供了3个small gears, 对于一般的小应用,应该也足够用了
下面来自OpenShift的FAQ:

FreeShift is the name of the free tier that is offered on OpenShift Online.

3 small gears per user account per month and use of the available cartridges.

We plan to offer small gears for FreeShift and small and medium gears for MegaShift. In the future we may offer larger gears at other tiers.

RAM Disk Cost / hour
Small 512 MB RAM 1 GB disk $0.05 / hour
Medium 1 GB RAM 1 GB disk $0.12 / hour

We plan to offer MegaShift as a paid tier on OpenShift Online that provides larger capacity. Please see the pricing page for more information.