Ubuntu8.04 nginx mongrel mongrel_cluster 架设集群服务器
搞了一天,终于弄完了,也稍懂了一些utuntu命令。
架设一台nginx+mongrel服务器,使用mongrel_cluster来配置集群。
得益于以下几篇文章。谢谢rushairer 及slicehost
http://articles.slicehost.com/2008/5/27/ubuntu-hardy-nginx-rails-and-mongrels
http://forum.ubuntu.org.cn/viewtopic.php?f=63&t=82685&p=479103&hilit=mongrel+nginx+%E6%9E%B6%E8%AE%BE#p479103
在我的配置中,试把集群的几台服务器架设在内网的win机器上,也能够跑起来,但效率怎么样就不知道了
再看看是否可以让这几个服务器共用一个mysql库就OK。
引用如下:
=======
在终端输入并运行
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份当前的源列表,以便日後需要时恢复)
sudo gedit /etc/apt/sources.list (修改sources.list文件中源的列表)
我是选的北方网通的源,具体源内容 大家参照上面的帖子吧,人家写的很好,所以还是去捧场吧.
帖子中也提到deb http://archive.ubuntu.org.cn/ubuntu-cn/ feisty main restricted universe multiverse要加上.
我常识过弄更高级的3D桌面,换主题,结果好像少什么文件,启动不了,所以放弃了.华而不实的东西,暂时没兴趣考虑.
闲话少说,安装Ruby RubyGems Rails Mongrel Nginx .
这次Ubuntu7.10的源里都有了,所以用新立得安装就行了,Ruby要选上ruby1.8和ruby1.8-dev.
但是好像还缺东西,补充上sudo apt-get install libssl-dev(必须)
sudo apt-get install libzlib-ruby rdoc ri irb (我不记得新立得选ruby的话会不会安装这些了,写多了也没事,不会重复安装的)
下面再装mongrel_cluster来管理多个mongrel 服务
sudo gem install daemons gem_plugin mongrel mongrel_cluster
记得选的版本里面是ruby编译的.如果报错就是ruby开发包少装了.
建立mogrel用户 sudo /usr/sbin/addusr mongrel
密码也mongrel 吧
用rails 建立个站点 比如在 /home/abendas/www/www.abendas.com
给站点目录加上刚才mongrel 用户的权限吧 sudo chown -R mongrel :mongrel /home/abendas/www.abendas.com/
然后设置站点mongrel 配置
cd /home/abendas/www/www.abendas.com
sudo mongrel_rails cluster::configure -e development -p 8000 -N 2 -c /home/abendas/www.abendas.com/ -a 127.0.0.1 --user
mongrel --group mongrel
说明下 -e development 是rails的development模式,可以跟自己需要改其他模式.-p 8000 开始用的端口号 -N 2 是开的mongrel 进程数量(我
现在开了2个线程,每个都要用单独端口,向后排,那就是8000 和 8001端口分给它们俩使用了) -c /home/abendas/www.abendas.com/ 站点的路
径 -a 127.0.0.1 mongrel 服务所在的电脑的IP. --user mongrel --group mongrel 注意是两个-,用户名和组,就是刚才我们建立的
mongrel 用户.
这时候在站点的config里面生成了一个mongrel_clueter.yml文件,可以看看里面是怎么写的,回头可以自己方便的改.
下面的工作就是把配置文件放到统一的一个地方来.
sudo mkdir /etc/mongrel_cluster
sudo ln -s /home/abendas/www/www.abendas.com/config/mongrel_cluster.yml /etc/mongrel_cluster/abendas.yml
意思就是从站点目录把yml文件链接到 /etc/mongrel_cluster/下 重新命名,可随意,我是命名为abendas.yml了.
下面,不同与7.04的地方出现了
要找mongrel_cluster,
sudo find / -name mongrel_cluster
结果在/var/lib/gems/1.8/gems/mongrel_cluster-1.0.2/resources/mongrel_cluster找到了,我记得是跟7.04不一样.
放到启动文件夹去.
cd /etc/init.d/
sudo cp /var/lib/gems/1.8/gems/mongrel_cluster-1.0.2/resources/mongrel_cluster mongrel_cluster
给它可执行的属性
sudo chmod +x /etc/init.d/mongrel_cluster
然后设为随机启动
sudo update-rc.d mongrel_cluster defaults
然后我们可以启动了吧?sudo /etc/init.d/mongrel_cluster start
没反应.....
2B的现象发生了........
我查看mongrel_cluster的代码,每个语句执行发现mongrel_cluster_ctl 找不到...
恍然大悟
sudo find / -name mongrel_cluster_ctl
在/var/lib/gems/1.8/bin/mongrel_cluster_ctl
那我们就
####################################################################
sudo ln -s /var/lib/gems/1.8/bin/mongrel_cluster_ctl /usr/bin/
####################################################################
再sudo /etc/init.d/mongrel_cluster 就ok了,这地方一开始不知道,重装了一次还是出错,所以我觉得是这个版本的mongrel_cluster安装默认
设置漏掉把它链接到/usr/bin/了吧.
如果米有给mongrel 帐号在站点目录的权限,或者站点目录在/var/www里,可能会报 mongrel8000.pid什么的错误,那是权限的问题.自行解决吧:)
刚才在新立得里就已经安装nginx 了,不错的很.
配置nginx 在/etc/nginx /nginx .conf
默认里面有句 include /etc/nginx /sites-enabled/*;
那就去 /etc/nginx /site-enabled里面找文件打开
我的配置如下
#后面的注释后来打的,不知道会不会影响,不行就去掉注释哈.
upstream abendas {
#命名为abendas了 再复制一份 改个名字就是另一个站点的mongrel 群,注意端口号.
server 127.0.0.1:8000;
server 127.0.0.1:8001;
}
server {
listen 80;
listen www.abendas.com:80;
server_name www.abendas.com;
#加上 server_name www.abendas.cn; 就是多域名指向同一个站点
access_log /var/log/nginx /localhost.access.log;
location / {
root /home/abendas/www/www.abendas.com/public;
#rails站点目录的public目录
index index.html index.htm;
}
location / {
proxy_pass http://abendas;
#跟对应的mongrel 群名字要对上
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* ^.+\.
(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov)$ {
#以上后缀名的文件直接走nginx 不走mongrel 了
root /home/abendas/www/www.abendas.com/public;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx -default;
}
}
记得以后重启mongrel 和nginx 就在
sudo /etc/init.d/mongrel start|restart|stop
sudo /etc/init.d/nginx start|restart|stop
nginx 的设置里面 server {
listen 80;...
如果米有,就会开机启动不了nginx ,在nginx 的日志里说无法解析ip...
可想而知,nginx 的启动顺序比name等服务要靠前了...
sudo update-rc.d nginx remove 删除nginx 自动启动
sudo update-rc.d nginx start 99 1 2 3 4 5 6 .
#99是顺序,你可以看看其他启动项的顺序,然后把nginx 放后面就行了