Young87

当前位置:首页 >个人收藏

在Amazon EC2上配置Thin+NginX+Rails全攻略 (Linux环境)

最近在跟朋友倒腾一个网站( http://www.realthematics.com ),出于成本考虑,前期准备把Server放在亚马逊云上.于是折腾着注册,配置,上线,弄了两天终于搞定了.在过程中遇到了一些问题,有些也确实是花了好一会儿才解决.在这里把经验分享一下,顺便也当做一个自己的纪录吧.

  1. 要想使用Amazon EC2服务,第一件事当然是注册Amazon会员啦.
  • 登陆 http://aws.amazon.com 并且注册,第一年Amazon为新会员提供了很实惠的Free Tier,大家可以参考这里http://aws.amazon.com/free/ 看看是否符合自己初期的需要.
  • 注册完成之后,我们就可以通过点击右上角的 My Account/Console 弹出下拉框来进入 AWS Management Console.
  • 在Management Console里面,我们可以点选左上角的Region来选择Server所在地,目前我的网站是放在新加坡站点,据消息人士透露,在天朝访问日本结点也很快.不过注意如果你把站点放在美国的话,就很有可能访问不了或者访问速度很慢.原因你懂的.
  • 要启动自己的实例需要进入EC2选项卡,然后猛击页中的Launch Instance.
  • 进入Launch Instance页面后选择Classic Wizard. 然后选择Basic 64-bit Amazon Linux AMI 2011.09作为实例主机.经测试目前Free Tier里必须选择此主机才能免费,如果你选择的是SUSE的话,从一上线就要开始扣费了.
  • 选好之后一路continue.在中间很重要的一步就是要下载自己的.pem文件,这个是通过SSH访问你Instance的秘钥,一定要妥善保存好.
  • 牢记,在设置Security Group的时候要将0.0.0.0/80添加进去,否则的话HTTP将会无法访问.当然这一步也可以在我们的RoR环境搭建完毕之后再做.
  • OK,在完成上面步骤之后,你应该就会有一个实例运行了.但是在Amazon的工作还没有做完,我们还需要注册一个Elastic IP来绑定我们的实例以便随后的HTTP访问.
  • 我们回到EC2 Dashboard, 在Network&Security下面选择Elastic IP.然后点击Allocate New Address,系统就会分配一个随机的固定IP给你.分配完成之后在列表之中右键点击他,将这个IP associate到你的实例上去.如果你申请了IP但是不进行这一步绑定的话,系统会按每小时0.01刀的价格向你收费.
  • OK,大功告成.可以进行下一步的连接配置了.

2.通过SSH连接到Server
   如果你是*nix用户的话,SSH连接将非常简单,只需要回到你的Instance Page,右键点击你的Instance选择connect,然后系统会生成类似
ssh -i yourkey.pem ec2-user@46.137.220.238
      其中yourkey.pem是刚刚我们在启动实例时下载的秘钥文件,ec2-user是你的初始用户名,后面尾随的IP是我们刚刚申请的Elastic IP.
通过在Terminal中输入此命令,我们就可以连接到Amazon的Server了.

但是如果很不幸地你在使用windows浏览本文的话,你就需要下载两个工具来完成这一步登陆.分别是Putty和Puttygen
(作者很良善地提供下载链接在此: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)
其中Puttygen是为了让你能够生成Putty能识别的秘钥文件,Putty则是我们的访问工具.
在Puttygen里面选择File->Open打开yourkey.pem,然后选择Generate Private Key将生成的文件保存好.
在Putty里,我们需要做三步.1. 在Session里面输入我们刚刚注册的Elastic IP. 2. 在Connection->SSH->Auth里面把我们刚刚生成的Private Key文件包含进去. 3. 在Connection->Data里的Auto-login username输入ec2-user.
然后点击Open,大功告成.

3.配置Rails
在连接上Server之后我们可以通过
sudo su -
命令来切换到root用户进行配置.

我们首先可以建立一个/sysprep目录来放置我们需要用到的东西.然后按照以下步骤完成我们的配置:
mkdir /sysprep
cd sysprep
wget ftp://ftp.ruby-lang.org//pub/ruby/1.9/ruby-1.9.2-p180.tar.gz
tar xzvf ruby-1.9.2-p180.tar.gz
yum groupinstall 'Development Tools'
yum install readline-devel
cd ruby-1.9.2-p180
./configure
make && make install
cd ..
wget http://rubyforge.org/frs/download.php/74922/rubygems-1.8.4.tgz
tar xzvf rubygems-1.8.4.tgz
cd rubygems-1.8.4
ruby setup.rb
yum install zlib-devel>
cd /sysprep/ruby-1.9.2-p180/ext/zlib
ruby extconf.rb
make && make install
gem install rails
yum install httpd
yum install httpd-devel
yum install openssl-devel
yum groupinstall development-libs
cd /sysprep/ruby-1.9.2-p180/ext/openssl
ruby extconf.rb
make && make install

  OK,到这里Ruby+Rails已经配置完毕了.

4. 安装配置Thin
  Thin是一个Rails Server,简单已用,安装起来也很方便. 只需要键入:
gem install thin
gem就会为你完成安装工作.但是安装之后我们还要配置一下这个server. 首先输入
sudo thin install
sudo /sbin/chkconfig --level 345 thin on
之后我们要生成一个thin的配置文件,通过以下命令来完成
sudo thin config -C /etc/thin/<config-name>.yml -c <rails-app-root-path> --servers <number-of-threads> -e <environment>
可以通过这条命令来查看生成的文件内容
cat /etc/thin/<config-name>.yml
文件内容类似于下面:
pid: tmp/pids/thin.pid
timeout: 30
log: log/thin.log
max_conns: 1024
require: []

environment: production
max_persistent_conns: 512
servers: 5
daemonize: true
socket: /tmp/thin.myapp.sock
chdir: /var/rails/myapp
  OK,到这里thin就配置成功了.


5. 安装配置NginX

  Nginx我也不是很熟,在安装过程中也遇到了很多问题,大家可以参考
http://kdn2.info/2011/05/install-nginx-on-amazon-ec2/

2012.07.05 update
使用NginX官网提供的ec2 installation script,安装NginX轻松又快捷。
http://nginx.org/en/docs/howto_setup_development_environment_on_ec2.html

安装完成之后,我们要编写/etc/nginx/niginx.conf配置文件来配合Thin的运行.
我的配置文件如下,大家可以做一个参考.
 
upstream domain1 {
        server 0.0.0.0:3000;
        server 0.0.0.0:3001;
        server 0.0.0.0:3002;
    }

server {
            listen   80;
            server_name  www.realthematics.com;
            rewrite ^/(.*) http://domain.com permanent;
       }


server {
            listen   80;
            server_name www.realthematics.com;

            access_log /home/demo/public_html/railsapp/log/access.log;
            error_log /home/demo/public_html/railsapp/log/error.log;

            root   /home/demo/public_html/railsapp/public/;
            index  index.html;

            location / {
                          proxy_set_header  X-Real-IP  $remote_addr;
                          proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
                          proxy_set_header Host $http_host;
                          proxy_redirect false;

                          if (-f $request_filename/index.html) {
                                           rewrite (.*) $1/index.html break;
                          }

                          if (-f $request_filename.html) {
                                           rewrite (.*) $1.html break;
                          }

                          if (!-f $request_filename) {
                                           proxy_pass http://domain1;
                                           break;
                          }
            }

}

  写好配置文件要通知Nginx知道,使用:
nginx -s reload
来更新配置.

  在这里要注意的一点是,你的Rails App文件夹最好是放到/var下面去,因为Nginx要求这个文件夹有所有人都可以读的权限.
  因为我在这个地方卡了很久,所以希望同样是Nginx初学者的你不要犯同样的错误了.

大功告成了.如果一切顺利的话,我们现在就可以通过Elastic IP来访问我们搭建的站点了.
如果在安装过程中遇到了什么问题,欢迎跟我交流!
另外欢迎访问我的站点: http://www.realthematics.com



除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: 浅谈屏蔽搜索引擎爬虫(蜘蛛)抓取/索引/收录网页的几种思路

下一篇: shell脚本赋值的5种方法

精华推荐