互联网服务 2014 年 6 月 6 日

在OpenShift应用平台上编译和部署Redis

本文介绍了如何在OpenShift上编译和安装Redis,以使OpenShift支持Redis。虽然OpenShift官方的Application不支持Redis,但是由于OpenShift开放了SSH权限和编译环境,通过编译和部署源代码,可以将任何喜欢的应用部署到OpenShift。文章详细介绍了编译和安装Redis的步骤,其中包括下载源代码、解压文件、编译、安装等操作。最终,Redis将被安装在OpenShift应用的data目录中,并且可执行文件、配置文件、数据库缓存等也将被放置在相应的目录中。
OpenShift官方的Application没有支持Redis,但是由于OpenShift开放了SSH权限,并且所有类型的Application都有编译环境,所以我们可以将带源码的软件编译和部署到OpenShift。也就是说,只要有充分的想象力,就可以将任何喜欢的应用部署到OpenShift,这样我们就可以让OpenShift支持Redis了。

编译Redis

Redis的编译过程非常简单,先通过SSH登陆到OpenShift,然后几条命令就搞定了:
# 切换到临时目录
cd /tmp
# 下载源代码
wget http://download.redis.io/releases/redis-2.8.9.tar.gz
# 解压文件
tar -xzvf redis-2.8.9.tar.gz
# 进入工作目录
cd redis-2.8.9
# 编译
make
# 等待1分钟左右编译完成
933744161.png
933744161.png

安装Redis

由于没有权限,我们当然不能期望通过make install这样一条简单的命令来自动安装。这里说的“安装”,其实就是把可执行文件拷贝到指定的目录,这里我们假定为${OPENSHIFT_DATA_DIR}目录,即OpenShift应用的data目录。
# 继续上一步的工作
# 先在${OPENSHIFT_DATA_DIR}目录下建立redis文件夹,我们将redis安装在这里
mkdir ${OPENSHIFT_DATA_DIR}/redis
# 这个目录用来放数据库缓存
mkdir ${OPENSHIFT_DATA_DIR}/redis/db
# 这个目录用来放配置文件
mkdir ${OPENSHIFT_DATA_DIR}/redis/conf
# 这个目录用来放可执行文件
mkdir ${OPENSHIFT_DATA_DIR}/redis/sbin

#拷贝配置文件模板到安装目录
cp redis.conf ${OPENSHIFT_DATA_DIR}/redis${OPENSHIFT_DATA_DIR}/redis/redis.conf.erb
# Redis编译后的可执行文件在src目录
cd src
# 拷贝可执行文件到安装目录
cp redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server ${OPENSHIFT_DATA_DIR}/redis/sbin

# 到这里安装已经完成了,记得删掉临时文件
rm -rf /tmp/redis*

# 去安装目录看看成果吧
cd ${OPENSHIFT_DATA_DIR}/redis
tree
3679874936.png
3679874936.png
到这里Redis已经在OpenShift安装完成了,但是还不能直接运行,我们需要先配置一下。

配置Redis

由于配置项比较多,直接放出我的配置文件模板,点此下载
下载后上传到redis安装目录下的conf目录,覆盖掉原来的文件。
为了方便通用,模板文件里使用了OpenShift的环境变量来配置参数,使用时,只需要使用erb命令就可以生成适合你应用的配置文件:
erb ${OPENSHIFT_DATA_DIR}/redis/conf/redis.conf.erb > ${OPENSHIFT_DATA_DIR}/redis/conf/redis.conf
注意:
  1. 对于OpenShift,关键的一个配置就是bind项。由于Redis默认绑定127.0.0.1,而OpenShift应用的local ip并不是这个,所以必须修改为bind <%= ENV['OPENSHIFT_PHP_IP'] %>,我在刚开始测试时,就是由于这个配置项没注意导致客户端一直不能连接。

  2. 测试时,将logfile设为空,这样可以看到redis-server的输出;测试后,设为日志文件路径就行了。

测试Redis

服务端测试

使用下面的命令来启动Redis服务端,如果没有错误提示就说明启动成功了。这时候redis-server运行在前台,所有的日志都显示在控制台上。
${OPENSHIFT_DATA_DIR}/redis/sbin/redis-server ${OPENSHIFT_DATA_DIR}/redis/conf/redis.conf
2169931091.png
2169931091.png

客户端ping测试

保持redis-server的窗口一直运行,这时我们需要启动另一个SSH窗口启动redis-cli命令行客户端。 先用ping命令测试一下连接是否通畅:
${OPENSHIFT_DATA_DIR}/redis/sbin/redis-cli -h ${OPENSHIFT_PHP_IP} -p 6379 ping
如果服务端回复PONG,说明连接没有问题。
572957800.png
572957800.png

客户端命令测试

这时候我们就可以使用命令行客户端连接服务器了:
# 连接
${OPENSHIFT_DATA_DIR}/redis/sbin/redis-cli -h ${OPENSHIFT_PHP_IP} -p 6379
# 保存测试
set testkey 123
# 读取测试
get testkey
2638294778.png
2638294778.png
测试完成之后,我们就可以将将配置模板里的logfile设为具体的文件,让Redis服务端后台运行时将日志输出到文件。

Redis应用i

Redis经常被用来做缓存,如果你的博客是Typecho或WordPress,你可以参考下面的文章将Redis作为网站缓存来加速网站:

参考资料