分页: 1 / 1

[分享]在Ubuntu上部署Rails(Apache mod_proxy mongrel_cluster)

发表于 : 2007-08-09 23:53
kofcom007
在Ubuntu上部署Rails(Apache mod_proxy mongrel_cluster)

最近需要把Rails的程序发布出去,在发布的过程中遇到了一些问题,虽然都用Google解决了,不过也注意到,在Ubuntu下部署Rails和其它Linux环境有所不同,为了以后少走弯路,把最近部署的过程记了下来。
以下环境为7.04
一:以Server的形式安装Ubuntu,安装完成后,设置IP、软件安装源。(这点就不说了,论坛有很多教程)
二:安装必须的软件
1.安装OpenSSH,方便远程管理:

代码: 全选

sudo apt-get install openssh-client openssh-server
2.安装Screen,方便远程连接后运行后台程序(参见: linux 技巧:使用 screen 管理你的远程会话)

代码: 全选

sudo apt-get install screen
3.安装Mysql 5.0

代码: 全选

sudo apt-get install mysql-server-5.0
4.安装Apache

代码: 全选

sudo apt-get install apache2
安装完成后,在别的机器上打开FireFox输入http://服务器的IP地址/apache2-default/ 如果屏幕显示It Works! 则表示安装成功
5.安装版本控制系统,方便在服务器上签出开发机器上的Rails程序,这里安装的是SVN(可选安装)

代码: 全选

sudo apt-get install subversion
6.安装基本的编译环境,在后面安装mongrel时要用到

代码: 全选

sudo apt-get install build-essential
7.安装ruby

代码: 全选

sudo apt-get install ruby1.8 ruby1.8-dev ri1.8 rdoc1.8 irb1.8 libtermios-ruby1.8 libmysql-ruby1.8
注: Rails 升级到2.0.1后,还需要安装libopenssl-ruby1.8, 否则Mongrel启动时会报错

代码: 全选

sudo apt-get install libopenssl-ruby1.8
然后:

代码: 全选

      cd /usr/bin/
      sudo cp ruby1.8 ruby
      sudo cp irb1.8 irb  # 这是为了能够正常启动rails的Control
8.安装rubygems
由于源里的版本比较低,可以到 http://rubyforge.org/frs/?group_id=126&release_id=11889 去下载最新版本;
下载tgz格式的,解压后,进入解压目录,然后运行:

代码: 全选

sudo ruby ./setup.rb
9.安装Rails、mongrel、termios程序库

代码: 全选

      sudo gem update
      sudo gem install --include-dependencies rake
      sudo gem install --include-dependencies rails
      sudo gem install --include-dependencies termios
      sudo gem install --include-dependencies mongrel
      sudo gem install --include-dependencies mongrel_cluster
安装mongrel时,会看到如下选择:

Select which gem to install for your platform (i486-linux)
1. mongrel 1.0.1 (mswin32)
2. mongrel 1.0.1 (ruby)
3. mongrel 1.0 (mswin32)
4. mongrel 1.0 (ruby)
5. Skip this gem
6. Cancel installation
> 2
选第二个,mongrel1.0.1好像修复了一个漏洞,然后还会有另一个选择:

Select which gem to install for your platform (i486-linux)
1. fastthread 1.0 (ruby)
2. fastthread 1.0 (mswin32)
3. fastthread 0.6.4.1 (mswin32)
4. fastthread 0.6.4.1 (ruby)
5. Skip this gem
6. Cancel installation
>1
选第一个

以上,部署的必要软件基本上都装齐了

注:在710里用Gem安装Rails、mongrel等软件时,有提示安装成功, 但在命令行下运行却提示找不到命令,这是因为Gem没有把命令链接到/usr/bin/ , 这时可以手动把/var/lib/gems/1.8/bin/下的文件cp到/usr/bin/。

代码: 全选

cp -i /var/lib/gems/1.8/bin/* /usr/bin/
但这样以后升级软件的时候会比较麻烦,要重新cp一份,也可以做一个符号链接如: ln -s /var/lib/gems/1.8/bin/rails /usr/bin/rails
gem安装软件的目录可以通过命令 gem install --help 查看到。


------------------------ 以下是软件的设置部分 --------------------------------

三:软件设置
1.mysql 的设置
参考了论坛里的这篇文章:viewtopic.php?t=1320
在终端运行:

代码: 全选

mysql -u root

mysql>delete from mysql.db;   <- 清空db表中默认对test数据库的权限设置
mysql>delete from mysql.user where not(host="localhost") and user="root";   <- 清除多余的root用户
mysql>update mysql.user set user="ubuntu" where user="root";  <- 为了安全,将默认的root用户名更改为ubuntu。
mysql>update mysql.user set Password=PASSWORD('ubuntu_cn') where user='ubuntu'; <- 给ubuntu用户加上密码"ubuntu_cn"
mysql>flush privileges;
mysql>exit
清除之前对数据库的操作日志,这样别人就不知道刚刚改的密码啦

代码: 全选

rm ~/.mysql_history
touch ~/.mysql_history
2.Mongrel_cluster配置
Mongre_cluster的设置比较简单,在你的Rails应用的根目录下运行,以下假设Rails的应用程序目录为/home/ubuntu/railsapp/demo/

代码: 全选

mongrel_rails cluster::configure -e production -p 8000 -a 127.0.0.1 -N 2 -c /home/ubuntu/railsapp/demo/
解释一下:
-e 指定运行环境,有production(生产)、development(开发)、test(测试)三个选项。
-p 指定监听端口
-a 127.0.0.1 指定Mongrel在localhost下监听
-N 2 启动两个Mongrel进程,端口从8000~8001

运行后,会在应用程序目录 config/mongrel_cluster.yml, 以后有什么变化,直接修改这个文件就可以了。
在终端下输入以下命令启动Mongrel:

代码: 全选

mongrel_rails cluster::start

要停止则输入:

代码: 全选

mongrel_rails cluster::stop
2.Apache 的设置
首先要启动mod_proxy模块.

代码: 全选

cd /etc/apache2/mods-enabled/
sudo ln -s ../mods-available/proxy_balancer.load proxy_balancer.load
sudo ln -s ../mods-available/proxy_http.load proxy_http.load
sudo ln -s ../mods-available/proxy.load proxy.load
sudo ln -s ../mods-available/proxy.conf proxy.conf
接着要修改一下proxy.conf文件

代码: 全选

sudo vim /etc/apache2/mods-available/proxy.conf
大概是在11行:

代码: 全选

#Allow from .example.com
改为

代码: 全选

Allow from all
修改 /etc/apache2/apache2.conf 文件(默认是在最后一行):

代码: 全选

Include /etc/apache2/sites-enabled/
改为:

代码: 全选

#Include /etc/apache2/sites-enabled/
然后在/etc/apache2/httpd.conf里添加以下部分:

代码: 全选

<Proxy balancer://mongrel>
  BalancerMember http://127.0.0.1:8000
  BalancerMember http://127.0.0.1:8001
</Proxy>

<VirtualHost *:80>
  ProxyPass / balancer://mongrel/
  ProxyPassReverse / balancer://mongrel/
</VirtualHost>
重启Apache以使设置生效:

代码: 全选

sudo /etc/init.d/apache2 restart
在Firefox里输入http://服务器的IP地址/ 进行测试,检查Rails程序是否能够正常运行。

这样一个Rails的生产环境就配置好了。 :D

发表于 : 2007-08-18 2:39
insub
kofcom007
在启动Apache2时出现如下错误:
apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.1.250 for ServerName
在httpd.conf的<VirtualHost *:80> 里面设了serverName也没有用

在启动mongrel_rails cluster::start时出现如下错误:
* Ruby version is not up-to-date; loading cgi_multipart_eof_fix

能够访问app,并且应用程序可以跑,但是点击app的About your application’s environment时出现错误:
The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved.


我是完全按照你的说明装的,环境是:
Ubuntu 7.0.4 server,安装时选择了lamp的安装
ruby -v 是 1.8.5
rails -v 是 1.2.3
gem -v 是 0.9.4

程序路径: /home/insub/apps/test_app

请帮忙看看是什么问题,谢谢!

发表于 : 2007-08-21 19:02
kofcom007
Mongrel在我这里也有这个问题,冒似不影响使用,所以一直没理他 :twisted:
Apache的问题,在我这里,是因为DNS服务器里面没有我的电脑的记录,现在Windows是靠Wins的记录来访问我的服务器的。
:)
至于About your application’s environment出现的问题,出于安全的原因,About your application’s environment的信息只有在本地才能正常显示, 这是原话:

代码: 全选

For security purposes, this information is only available to local requests.

发表于 : 2007-08-31 15:36
leondu
安装mongrel,还要选择:
Select which gem to install for your platform (i486-linux)
1. fastthread 1.0 (ruby)
2. fastthread 1.0 (mswin32)
3. fastthread 0.6.4.1 (mswin32)
4. fastthread 0.6.4.1 (ruby)
5. Skip this gem
6. Cancel installation
> 1

发表于 : 2007-08-31 23:02
kofcom007
已经更新,谢谢4楼的兄弟

发表于 : 2007-09-02 9:25
leondu
kofcom007 写了:已经更新,谢谢4楼的兄弟
举手之劳,何足... ... :D

另外,我现在使用gem远程安装时,速度特别慢,不知道是不是网络原因还是gem的服务器负载太重了?
反正现在都是下载了以后本地安装了。

发表于 : 2007-09-02 11:33
kofcom007
我这边用Gem安装,也比较慢,一般输入了安装命令后,要过3~4分钟左右才有反应,不过,安装完第一个包,紧接着再安装另一个的时候,反应就比较快了。
我也试过本地安装,不过在安装Rails的时候,还要去下载相应的包,如activerecord、activesupport、actionwebservice 等,比较麻烦。不过,把包都下载下来,以后再安装就很方便。 :D

Re: [分享]在Ubuntu上部署Rails(Apache mod_proxy mongrel_cluster)

发表于 : 2007-09-06 15:07
rubyway
kofcom007 写了: 然后:

代码: 全选

      cd /usr/bin/
      sudo cp ruby1.8 ruby
      sudo cp irb1.8 irb  # 这是为了能够正常启动rails的Control
楼主别再害人了!apt装的不用cp /usr/bin/ruby1.8 /usr/bin/ruby 编译安装时才需要cp一下

你自己搞清楚了再发这样的帖子!

真是太垃圾!!!

Re: [分享]在Ubuntu上部署Rails(Apache mod_proxy mongrel_cluster)

发表于 : 2007-09-06 21:16
kofcom007
rubyway 写了:
kofcom007 写了: 然后:

代码: 全选

      cd /usr/bin/
      sudo cp ruby1.8 ruby
      sudo cp irb1.8 irb  # 这是为了能够正常启动rails的Control
楼主别再害人了!apt装的不用cp /usr/bin/ruby1.8 /usr/bin/ruby 编译安装时才需要cp一下

你自己搞清楚了再发这样的帖子!

真是太垃圾!!!
我不见得这样写是在害人,把ruby1.8 cp成 ruby ,运行ruby代码的时候,不是会更方便一点吗?很多新手在安装完ruby后,可能会试验有没有安装成功,如果输入命令:ruby helloworld.rb 程序没有运行起来,会不会很郁闷?

发表于 : 2007-09-23 21:43
mifly
Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

照着你的教程,出现上面的错误,为什么?哪里不对呢?

发表于 : 2007-10-05 22:02
kofcom007
mifly 写了:Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

照着你的教程,出现上面的错误,为什么?哪里不对呢?

你是做到那一个步骤的时候出现的?这应该是apache的错误,需要检查一下Apache的配置文件....

发表于 : 2007-11-23 17:15
vicker
这样的设置是否php和rails不能兼容了?我有些应用需要用到php的。

发表于 : 2008-03-13 22:29
alvin2ye
测试成功

感谢楼主

发表于 : 2008-06-19 23:33
qianjigui
谢谢!

Re: [分享]在Ubuntu上部署Rails(Apache mod_proxy mongrel_cluster)

发表于 : 2008-12-05 22:28
benjaminz
测试成功!感谢楼主的辛苦工作! :em11 :em11