在Webfaction共享主机帐户上设置Redis数据库需要哪些步骤?
由于Webfaction服务器的特殊环境限制,安装说明并不像它们那样简单.尽管如此,最终您将拥有一台功能齐全的Redis服务器,即使重启后也能保持正常运行.我大约半年前通过以下程序亲自安装了Redis,从那以后它一直运行完美.虽然有点警告,半年不是很长时间,特别是因为服务器没有被大量使用.
说明包含五个部分:安装,测试,启动服务器,管理服务器和保持服务器运行.
安装登录您的Webfaction shell
ssh foouser@foouser.webfactional.com
从Redis下载站点下载最新的Redis .
> mkdir -p ~/src/ > cd ~/src/ > wget http://download.redis.io/releases/redis-2.6.16.tar.gz > tar -xzf redis-2.6.16.tar.gz > cd redis-2.6.16/
在make之前,请参阅您的服务器Linux 32或64位.安装脚本不能很好地处理32位环境,至少在Webfaction的CentOS 5机器上是这样.位命令是uname -m
.如果Linux是32位,结果将是i686,如果64位则是x86_64.有关详情,请参阅此答案.
> uname -m i686
如果您的服务器是64位(x86_64),那么只需简单.
> make
但如果你的服务器是32位(i686)那么你必须做一些额外的东西.有一个命令,make 32bit
但它会产生错误.编辑安装脚本中的一行以使其make 32bit
正常工作.
> nano ~/src/redis-2.6.16/src/Makefile
从这里改变第214行
$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"
对此
$(MAKE) CFLAGS="-m32 -march=i686" LDFLAGS="-m32 -march=i686"
并保存.然后使用32位标志运行make.
> cd ~/src/redis-2.6.16/ ## Note the dir, no trailing src/ > make 32bit
可执行文件已创建到目录中~/src/redis-2.6.16/src/
.该可执行文件包括redis-cli
,redis-server
,redis-benchmark
和redis-sentinel
.
正如安装的输出所示,通过运行测试确保一切正常工作会很好.
Hint: To run 'make test' is a good idea ;)
不幸的是,测试需要安装tlc8.6.0,这至少在机器web223上不是默认值.所以你必须先从源代码安装它.请参阅Tcl/Tk安装说明和编译说明.
> cd ~/src/ > wget http://prdownloads.sourceforge.net/tcl/tcl8.6.0-src.tar.gz > tar -xzf tcl8.6.0-src.tar.gz > cd tcl8.6.0-src/unix/ > ./configure --prefix=$HOME > make > make test # Optional, see notes below > make install
make test
由于WebFaction的环境限制,测试Tcl 将花费时间并且也将失败.我建议你跳过这个.
现在我们安装了Tlc,我们可以运行Redis测试.测试需要很长时间,并且还会临时使用大量内存.
> cd ~/src/redis-2.6.16/ > make test
测试完成后,您就可以继续了.
启动服务器首先,通过Webfaction控制面板(自定义应用程序(侦听端口))创建自定义应用程序.将其命名为fooredis.请注意,如果Redis仅在本地使用(即来自同一主机),则无需为应用程序创建域或网站.
其次,记下为应用程序提供的套接字端口号.让这个例子是23015.
将以前编译的可执行文件复制到应用程序的目录中.您可以选择复制全部或仅复制所需的复制.
> cd ~/webapps/fooredis/ > cp ~/src/redis-2.6.16/src/redis-server . > cp ~/src/redis-2.6.16/src/redis-cli .
复制样本配置文件.你很快就会修改它.
> cp ~/src/redis-2.6.16/redis.conf .
现在Redis已经可以运行了.但是有几个问题.首先,默认的Redis端口6379可能已在使用中.其次,即使端口是空闲的,是的,您可以启动服务器,但在退出shell的同一时刻它会停止运行.首先必须编辑redis.conf,而对于第二个,你需要一个守护进程,它也可以通过编辑redis.conf来解决.
Redis能够在守护进程模式下运行.为此,您需要设置一个守护进程存储其进程ID PID的位置.通常pidfiles存储在/ var/run /中,但由于环境限制,您必须在主目录中为它们选择一个位置.由于稍后在管理服务器部分中解释的原因,一个很好的选择是将pidfile放在与可执行文件相同的目录下.您不必自己创建文件,Redis会自动为您创建文件.
现在打开redis.conf进行编辑.
> cd ~/webapps/fooredis/ > nano redis.conf
按以下方式更改配置.
daemonize no
- > daemonize yes
pidfile /var/run/redis.pid
- > pidfile /home/foouser/webapps/fooredis/redis.pid
port 6379
- > port 23015
最后,启动Redis服务器.指定conf文件,以便Redis侦听正确的端口并作为守护程序运行.
> cd ~/webapps/fooredis/ > ./redis-server redis.conf >
看它运行.
> cd ~/webapps/fooredis/ > ./redis-cli -p 23015 redis 127.0.0.1:23015> SET myfeeling Phew. OK redis 127.0.0.1:23015> GET myfeeling "Phew." redis 127.0.0.1:23015> (ctrl-d) >
如果您愿意,请停止服务器.
> ps -u $USER -o pid,command | grep redis 718 grep redis 10735 ./redis-server redis.conf > kill 10735
要么
> cat redis.pid | xargs kill管理服务器
为了便于使用并作为下一部分的准备工作,请创建一个脚本,以帮助打开客户端并启动,重新启动和停止服务器.一个简单的解决方案是编写一个makefile.编写makefile时,请记住使用制表符而不是空格.
> cd ~/webapps/fooredis/ > nano Makefile # Redis Makefile client cli: ./redis-cli -p 23015 start restart: ./redis-server redis.conf stop: cat redis.pid | xargs kill
规则是不言自明的.关于第二条规则的特殊之处在于,在守护进程模式下,如果已经运行了一个新进程,则调用./redis-server不会创建新进程.
第三条规则有一些安静的智慧.如果redis.pid没有存储在fooredis目录下,例如存储在/var/run/redis.pid下,那么停止服务器就不那么容易了.如果同时运行多个Redis实例,尤其如此.
执行规则:
> make start保持服务器运行
您现在有一个以守护进程模式运行的Redis实例,它允许您在不停止的情况下退出shell.这还不够.如果进程崩溃怎么办?如果重新启动服务器计算机怎么办?要涵盖这些,你必须创建两个cronjobs.
> export EDITOR=nano > crontab -e
添加以下两行并保存.
*/5 * * * * make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start @reboot make -C ~/webapps/fooredis/ -f ~/webapps/fooredis/Makefile start
第一个确保fooredis运行的每五分钟.如上所述,如果已经运行,则不会启动新进程.第二个确保fooredis在服务器机器重新启动后立即启动,并且在第一个规则启动之前很久.
可以使用一些更多的deligate方法,例如永远.有关该主题的更多信息,另请参阅此Webfaction社区线程.
结论现在你拥有它.很多事情已经完成,但可能还会有更多.您可能希望将来做的事情包括以下内容.
设置密码,防止其他用户刷新您的数据库.(见redis.conf)
限制内存使用(请参阅redis.conf)
记录使用情况和错误(请参阅redis.conf)
偶尔备份数据.
任何想法,评论或更正?
总结阿克塞利的出色答案:
assume your user is named "magic_r_user" cd ~ wget "http://download.redis.io/releases/redis-3.0.0.tar.gz" tar -xzf redis-3.0.0.tar.gz mv redis-3.0.0 redis cd redis make make test create a custom app "listening on port" through the Webfaction management website assume we named it magic_r_app assume it was assigned port 18932 cp ~/redis/redis.conf ~/webapps/magic_r_app/ vi ~/webapps/magic_r_app/redis.conf daemonize yes pidfile ~/webapps/magic_r_app/redis.pid port 18932 test it ~/redis/src/redis-server ~/webapps/magic_r_app/redis.conf ~/redis/src/redis-cli -p 18932 ctrl-d cat ~/webapps/magic_r_app/redis.pid | xargs kill crontab -e */1 * * * * /home/magic_r_user/redis/src/redis-server /home/magic_r_user/webapps/magic_r_app/redis.conf &>> /home/magic_r_user/logs/user/cron.log don't forget to set a password!