今天新配了服務器ubuntu +lighttpd + rails + mysql4

[b]文章選自:http://www.ruby-lang.org.cn/forums/viewthread.php?tid=1322[/b]
最近因爲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
啓用本地帳戶登錄,寫入,禁用匿名帳號就可以了。


由於需要安裝的mysql版本是4.0的,懶得再編譯了,所以,我索性直接從一臺編譯好的機器上scp過來用。居然能用,嘎嘎。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章