打印

ubuntu 7.04 server + lighttpd 1.4.13 + rails 配置

本帖已经被作者加入个人空间

ubuntu 7.04 server + lighttpd 1.4.13 + rails 配置

最近因为php?name=Ruby" onclick="tagshow(event)" class="t_tag">Rubyist项目的问题,需要一个地方来做演示。当然我们有自己的服务器,但是上面安装的是windows 2003 server,因为我还需要服务器支持asp.net。本来也可以开在国外的,但是想到演示空间经常需要更新,速度上可能还是不太理想,而且国内的服务器其实也已经配置好了支持rails运行的,目前采用的有两种方式,一种是Apache + FastCGI,而另外一种是使用mongrel运行,由防火墙转发请求。在我看来后面一种性能较好。

以前的项目都是我直接远程连接到服务器上操作的,因此也没有感到什么不便。这次要提供项目的演示空间,不可能提供远程管理权限,呵呵。这样不太方便。但是rake之类的功能就不能执行了,其实这也是我考虑的一个问题,如果程序免费发布了,不可能每个使用者都可以有权限在服务器上执行rake的,我们应该写一个页面,像传统的ASP/PHP那样的方式来执行数据库安装。

言归正传,martin要求我提供ssh或者telnet,ssh在windows上怎么弄我不知道,telnet倒是可以开,但是权限管理应该非常不好弄,至少在我管理使用windows server接近七年时间里没有使用过telnet server上面就可以看出来telnet server有多么的不普及了。看来 linux + ssh 才是最好的解决之道。本来rails推荐的生产环境也是*nix,支持较好,而我因为自己用的电脑无法使用windows的原因,最近对linux也有一点点的了解,网上的文章看多了,于是就产生了一个装个ubuntu server来提供支持的想法。

装操作系统倒不是什么难事,特别是对于ubuntu 这种比较智能的操作系统来说,有过几次安装desktop的经验,安装server版也是手到擒来。安装到后面的时候我选择了安装LAMP Server,系统就自己装上了apache 2.23及mysql 5, python 2.5,但是后来我想可能lighttpd的性能更好,而且现在都是在重装操作系统,干脆就弄个更好一点儿的吧。然后就想卸载apache2,sudo apt-get remove apache2,居然卸不了,呵呵,知识还是有限啊。没办法只好再重新安装一次了。这次我选择了只安装操作系统核心,要安装什么东西都由自己定制。聪明了吧。呵呵。

好,十多分钟后我得到了一个正常运行的,没有安装任何东西的ubuntu 7.04 server,首要的事情是改更新源。原来我一直是使用台湾那个源的,速度非常快,但是最近老是出现connection reset的错误,所以改而使用了国内lupa提供的源。

 deb http://cn.archive.ubuntu.com/ubuntu feisty main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu feisty-security main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu feisty-updates main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu feisty-backports main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu feisty-proposed main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu feisty main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu feisty-security main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu feisty-updates main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu feisty-backports main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu feisty-proposed main restricted universe multiverse


然后sudo apt-get update && sudo apt-get upgrade,等几分钟就更新完了。

现在下面正式开始安装之路,首先我们需要的是Ruby环境,源里面自还的比较旧,才1.8.2,现在都1.86了,我们自己编绎吧。先安装编绎环境:sudo apt-get install build-essential,然后去ruby的官方主页下载安装包:

wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.6.tar.gz
tar xzvf ruby-1.8.6.tar.gz
cd ruby-1.8.6
./configure
make
sudo make install

这里应该很顺利的通过,下一步就是安装rubygems,同样的原因,源里的版本不太匹配,还是自己编绎吧。
先下载:
wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz
tar xzvf rubygems-0.9.4.tgz
cd rubygems-0.9.4
sudo ruby setup.rb

出错了。说找不到zlib. 我们得先安装zlib.
wget http://www.zlib.net/zlib-1.2.3.tar.gz
tar xzvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
make
sudo make install

没问题,编绎通过。还需要rubyzlib。
wget http://www.blue.sky.or.jp/atelier/ruby/ruby-zlib-0.6.0.tar.gz
tar xzvf ruby-zlib-0.6.0.tar.gz
cd ruby-zlib-0.6.0
ruby extconf.rb
make
sudo make install

为了试验一下是否已经安装好,可以照以下步骤测试
irb(main):001:0> require 'zlib'
=> true

这样就说明成功了。再运行rubygems的安装。
cd ../rubygems-0.9.4
sudo ruby setup.rb

成功了。

接下来就比较简单了。安装rails
sudo gem install rails --include-dependencies

这样ruby 和 rails都安装好了。可以运行一些命令来测试一下:irb, rake, ri, rails等。

下面来安装server.
数据库服务:

sudo apt-get install mysql-server phpmyadmin php5-cgi

本来想使用最新的lighttpd的,可是无奈能力有限,始终没有办法搞定编绎不通过的问题,只好使用源里的lighttpd 1.4.13了,特性少了些还能应付。将就一下吧。

sudo apt-get install lighttpd lighttpd-mod-mysql-vhost

这样就安装好了,现在要启用fastcgi.

sudo lighty-enable-mod fastcgi

这样就启动了fastcgi了。

先配置一下php看看fastcgi运行正常不。

sudo vim /etc/lighttpd/conf-enabled/10-fastcgi.conf

server.modules   += ( "mod_fastcgi" )

## Start an FastCGI server for php4 (needs the php4-cgi package)
fastcgi.server    = ( ".php" =>
        ((
                "bin-path" => "/usr/bin/php5-cgi",
                "socket" => "/tmp/php5-cgi.socket",
                "max-procs" => 2,
                "idle-timeout" => 20,
                "bin-environment" => (
                        "PHP_FCGI_CHILDREN" => "4",
                        "PHP_FCGI_MAX_REQUESTS" => "10000"
                ),
                "bin-copy-environment" => (
                       "PATH", "SHELL", "USER"
                ),
                "broken-scriptfilename" => "enable"
        ))
)

再在/var/www 下写个<?phpinfo();?>的文件命名为info.php,执行一下。呵呵,正常了。

试试rails工作不? 加段代码:
 server.document-root = "/var/ror/dev/public"
 server.error-handler-404 = "/dispatch.fcgi"
 url.rewrite += ( "^/$" => "/index.html" )
 url.rewrite += ( "^([^.]+)$" => "$1.html" )
 fastcgi.server = (".fcgi" =>
    ("localhost" =>
      ("min-procs" => 1,
       "max-procs" => 4,
       "socket" => "/var/ror/dev/tmp/sockets/fcgi.socket-0",
       "bin-path" => "/var/ror/dev/public/dispatch.fcgi",
       "bin-environment" => ("RAILS_ENV" => "production")
      )
    )
 )

配置好数据库连接后满怀信心的打开FF,却发现只给了我们一个500内部错误的页面,而且这页面看来还不是rails给出的,是属于lighttpd的内部出错页面。这可糟了。

开始检查:

sudo chown www-data.www-data /var/ror/dev -R
sudo chmod 777 /var/ror/dev/tmp /var/ror/dev/log /var/ror/dev/public

还是一样的错误,会不会是文件换行格式的问题呢 ?
vi打开文件,set ff=unix :wq全部保存过,还是有问题。

是不是要重新启动一下lighttpd?肯定是的。
sudo /etc/init.d/lighttpd restart
这下糟了,都启动不了了。
 2007-07-04 22:32:53: (mod_fastcgi.c.998) execve failed for: /www/railsapp/mydoc/public/dispatch.fcgi No such file or directory
2007-07-04 22:32:53: (mod_fastcgi.c.1024) the fastcgi-backend /www/railsapp/mydoc/public/dispatch.fcgi failed to start:
2007-07-04 22:32:53: (mod_fastcgi.c.1028) child exited with status 2 /www/railsapp/mydoc/public/dispatch.fcgi
2007-07-04 22:32:53: (mod_fastcgi.c.1031) if you try do run PHP as FastCGI backend make sure you use the FastCGI enabled version.
You can find out if it is the right one by executing 'php -v' and it should display '(cgi-fcgi)' in the output, NOT (cgi) NOR (cli)
For more information check http://www.lighttpd.net/documentation/fastcgi.html#preparing-php-as-a-fastcgi-program
2007-07-04 22:32:53: (mod_fastcgi.c.1333) [ERROR]: spawning fcgi failed.
2007-07-04 22:32:53: (server.c.849) Configuration of plugins failed. Going down.

从网上查了下就知道了,这是dispatch.fcgi不存在或者没有执行权限。试试。
sudo chmod +x /var/ror/dev/public/dispatch.*

现在lighttpd可以正常重新启动了,可是还是显示错误的页面。我们还少了什么呢?看看error.log
sudo vim /var/log/lighttpd/error.log

大部分信息像下面这样的:
 2007-09-15 19:06:09: (mod_fastcgi.c.1741) connect failed: Connection refused on unix:/var/ror/dev/tmp/sockets/fcgi.socket-0-3
2007-09-15 19:06:09: (mod_fastcgi.c.2852) backend died, we disable it for a 5 seconds and send the request to another backend instead: reconnects: 0 load: 1
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- fcgi (MissingSourceFile)
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
        from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in `require'
        from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:342:in `new_constants_in'
        from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in `require'
        from /usr/local/lib/ruby/gems/1.8/gems/rails-1.2.3/lib/fcgi_handler.rb:1
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in `gem_original_require'
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in `require'
        from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in `require'
        from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:342:in `new_constants_in'
        from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in `require'
        from /var/ror/dev/public/dispatch.fcgi:22



对了,我们忘记了两件重要的事情, FCGI.搞清楚了就好办了。

FastCGI

wget http://www.fastcgi.com/dist/fcgi.tar.gz
tar zxvf fcgi-2.4.0.tar.gz
cd fcgi-2.4.0
sudo ./configure
sudo make
sudo make install

RubyFCGI

wget http://sugi.nemui.org/pub/ruby/fcgi/ruby-fcgi-0.8.6.tar.gz
tar zxvf ruby-fcgi-0.8.6.tar.gz
cd ruby-fcgi-0.8.6
sudo ruby install.rb config
sudo ruby install.rb setup
sudo ruby install.rb install

测试一下:
irb(main):001:0> require 'fcgi'
=> true

成功了,再重新启动一下lighttpd,成功启动。再看看网站,呵呵。可以正常运行了。

接下来装一下ssh和FTP就算完成了。

sudo apt-get install openssh-server vsftpd

sudo vim /etc/vsftpd.conf
启用本地帐户登录,写入,禁用匿名帐号就可以了。


本帖最近评分记录
  • drive2me R币 +5 原创内容 2007-9-19 11:29
谢谢大家加入Ruby中文社区!
[寻找您身边的Rubyist.]

TOP

现在唯一有点不好的就是,lighttpd没有mod_svn这样的模块,从而使得svn没办法从apache移植到lighttpd上面。

TOP

你昨天一天就干这个呢,哈哈!

TOP

简单啊,我现在提交到论坛去。

TOP

我也建议换用apache到nginx,顺应潮流。
另ubuntu 7.04自带的nginx版本较低,不支持ssl,需重新编译安装,
下个月18日发布的7.10就非常不错,版本到位,支持到位,我已经在测试版中试用过。
本帖最近评分记录
  • drive2me R币 +2 Thanks for supporting. 2007-9-19 11:34

TOP

嗯,也许可以试下nginx了。
谢谢大家加入Ruby中文社区!
[寻找您身边的Rubyist.]

TOP

将svn配到apache下,然后在lighttpd下面加载,也行

$HTTP["host"] == "svn.ruby-lang.org.cn" {
        server.document-root = "/home/SVNRepos/"
        proxy.server = (
                "" => (("host" => "127.0.0.1", "port" => 8080 ))
        )
}


本帖最近评分记录
  • drive2me R币 +2 Thanks for supporting. 2007-9-19 11:33

TOP

那lighttpd只是一个proxy功能了。本来用lighttpd就是不想装apache了。呵
谢谢大家加入Ruby中文社区!
[寻找您身边的Rubyist.]

TOP

2008-11-22 16:47 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61