在Redis共享主机帐户上设置Webfaction数据库需要执行哪些步骤?
答案 0 :(得分:105)
由于Webfaction服务器的特殊环境限制,安装说明并不像它们那样简单。尽管如此,最终您将拥有一台功能齐全的Redis服务器,即使重启后也能保持正常运行。我大约半年前通过以下程序亲自安装了Redis,从那以后它一直运行完美。虽然有一点警告,半年不是很长时间,特别是因为服务器没有被大量使用。
说明书由五部分组成:安装,测试,启动服务器,管理服务器和保持服务器运行。
登录您的Webfaction shell
ssh foouser@foouser.webfactional.com
从Redis download site下载最新的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位环境at least on Webfaction's CentOS 5 machines。位命令为uname -m
。如果Linux是32位,结果将是i686,如果64位则是x86_64。有关详细信息,请参阅此answer。
> 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 installation notes和compiling notes。
> 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
测试Tcl需要时间,并且由于WebFaction的环境限制也会失败。我建议你跳过这个。
现在我们安装了Tlc,我们可以运行Redis测试。测试需要很长时间,并暂时使用相当大的内存。
> cd ~/src/redis-2.6.16/
> make test
测试结束后,您可以继续。
首先,通过Webfaction Control Panel创建自定义应用程序(自定义应用程序(侦听端口))。将其命名为例如 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能够在the daemon mode中自行运行。为此,您需要设置一个守护进程存储其进程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在服务器重新启动后立即启动,并且在第一个规则启动之前很久就已启动。
可以使用更多的解析方法,例如forever。有关该主题的更多信息,请参阅此Webfaction Community thread。
现在你拥有它。很多事情已经完成,但可能还会有更多。您可能希望将来做的事情包括以下内容:
任何想法,评论或更正?
答案 1 :(得分:5)
总结Akseli的优秀答案:
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!
答案 2 :(得分:1)
仅供参考,如果您正在安装redis 2.8.8+
,则在编译时可能会收到错误,未定义对__sync_add_and_fetch_4
的引用。有关信息,请参阅http://www.eschrade.com/page/undefined-reference-to-__sync_add_and_fetch_4/。
我已经粘贴了以下页面中的相关部分,以防页面脱机。基本上,您需要导出CFLAGS变量并重新启动构建过程。
[root@devvm1 redis-2.6.7]# export CFLAGS=-march=i686
[root@devvm1 redis-2.6.7]# make distclean
[root@devvm1 redis-2.6.7]# make