Ubuntu Server配置Ruby企业版+Nginx+passenger+rails3+PHP+FPM运

rails的很多资料,都是用Apache做的举例,我还是比较喜欢性能更高的Nginx,于是找了一番资料并亲手逐步试验之下,修正了资料中的一些错误,形成了下面正式的文档。感谢网络、感谢众多资料文档原作者:)

实际安装与测试版本为Ubuntu Server 10.04 32位X86版,不过理论上,以下步骤也适用于Ubuntu Server 9.04与桌面版。主要安装目标是搭建一个基于ruby企业版的rails3的高速运行环境,同时在该台服务器上支持php及相关工具。为什么要用ruby企业版呢?唔,根据官网资料,ruby企业版更加稳定,而且内存性能有33%以上的提升。
主要安装步骤如下所述:

1 安装ubntun

创建一个非root用户

adduser shuqi888
更新源

sudo apt-get update
sudo apt-get upgrade
校正时区

sudo dpkg-reconfigure tzdata
选择Asia,然后再选择自己所在的时区【chongqing】。再查看是否设置正确:

date
2 安装一些通用包

passenger等很多程序安装的时候都需要,干脆提前安装好.

最重要的是gcc等编译环境。

sudo apt-get install gcc
sudo apt-get install build-essential
其次重要的是git.

sudo apt-get install git-core
还有先下载,解压等功能的包。

sudo apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev libreadline5-dev
最后是图片库imagemagick

sudo apt-get install imagemagick
创建管理下载文件的目录

进入自己的home目录,并且创建一个临时文件夹,用于管理未来下载的一些文件。

cd /home/shuqi888
mkdir download

3 安装mysql

sudo apt-get install mysql-server mysql-client
请牢记安装过程中输入的密码。

4 安装ree

进入之前创建的下载目录,

cd /home/shuqi888/download
登陆ree官方网站 http://www.rubyenterpriseedition.com/download.html

找到最新版本的下载地址,然后使用wget直接下载到刚才的目录:

wget http://rubyforge.org/frs/download.php/71100/ruby-enterprise_1.8.7-2010.02_i386_ubuntu10.04.deb
然后开始安装

sudo dpkg -i ruby-enterprise_1.8.7-2010.02_i386_ubuntu10.04.deb
检查安装是否成功:

ruby -v
正常应输出:

ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-linux], MBARI 0x8770, Ruby Enterprise Edition 2010.02
同时使用

gem list
可以看到,ree默认添加了一些老版本的gem,比如rails (2.3.8),passenger (2.2.14)等。在后续步骤中,我们将更新掉这些gem。

5 安装rail并更新已经被ree默认安装的gem //这一步联网对网速要求有点高,有时候会失败,重新执行一遍命令就好了

gem update --system
gem install rake
gem install rails
gem update

6 安装nginx and passenger

请务必注意,安装passenger之前,请使用gem list命令检查已经安装的passenger的版本。如果不是最新的版本,请务必使用gem install passenger而非gem update命令更新掉之后,才执行以下步骤。

遵从passenger官方安装指南的提示,开始安装:

passenger-install-nginx-module
按照界面提示,默认安装即可。安装成功之后,检查nginx是否成功安装:

打开nginx的默认安装目录:

sudo nano /opt/nginx/conf/nginx.conf
确保如下所示:

http {
    ...
    passenger_root /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.0;
    passenger_ruby /usr/local/bin/ruby;
    ...
}
passenger_ruby如果不是指向ree的ruby解释器,会导致之后的gem源丢失问题,请务必确保此处指向的ruby与你所使用的ruby环境中的一致。

passenger如果不是指向3.0版本,则会报Unable to start the Phusion Passenger watchdog 错误。

启动nginx

sudo /opt/nginx/sbin/nginx
重启可以使用:

sudo /opt/nginx/sbin/nginx -s reload
刷新首页,应能出来nginx的欢迎界面,如不能,则往往是需要reboot

7 配置nginx随机启动

passenger默认会将nginx安装到/opt/nginx下,与直接安装nginx的路径略有差异,请特别注意。

参考Gist525330写一个脚本到:/etc/init.d/nginx,命令如下:

cd /home/anrenserver/download/
git clone git://gist.github.com/525330.git
sudo mv 525330/nginx.sh /etc/init.d/nginx
chmod +x /etc/init.d/nginx 
#此处不能使用sudo chown等其他更改权限方式
让启动脚本随机启动:

sudo /usr/sbin/update-rc.d -f nginx defaults
sudo /etc/init.d/nginx start
如果成功,则可以直接使用start,stop,restart,reload控制nginx

更多关于passenger的nginx用法,可以参考向导文件

更多关于nginx的配置文件写法可以参考这里

8 测试rails应用

Rails3默认使用SQLite3,所以如果没有,需要先安装一下。
sudo apt-get install sqlite3 libsqlite3-dev
sqlite3 --version
看到3.6.22,正常安装了。

上传一个本地的rails应用,

tar -cpzf /backup/home.bak.tar.gz /home
然后解压,

tar -xvf home.bak.tar.gz
再bundle install,再运行migrate任务。

rake db:migrate RAILS_ENV=production
对于有些应用来说,比如将静态文件写入到public目录,则需要赋予public目录权限:

chmod 777 public
按照安装提示修改nginx的配置文件,

sudo vi /opt/nginx/conf/nginx.conf
在server配置节,倒数第二行增加:

   server {
      listen 80;
      server_name www.yourhost.com;
      root /somewhere/public;   # <--- be sure to point to 'public'!
      passenger_enabled on;
   }
nginx的passenger模块默认是生产模式,如果是在本机进行开发,请更改。示范如下:


   server {
      listen 80;
      server_name www.yourhost.com;
      root /users/shuqi888/projects/demo/public;   # <--- be sure to point to 'public'!
      passenger_enabled on;
      rails_env development;
   }
如果是在本机而不是服务器调试,记得修改host文件,

sudo vi /etc/hosts
增加:

127.0.0.1 www.yourhost.com

相关推荐