在Amazon EC2上配置Thin+NginX+Rails全攻略 (Linux环境)
日期: 2012-03-04 分类: 个人收藏 360次阅读
最近在跟朋友倒腾一个网站( http://www.realthematics.com ),出于成本考虑,前期准备把Server放在亚马逊云上.于是折腾着注册,配置,上线,弄了两天终于搞定了.在过程中遇到了一些问题,有些也确实是花了好一会儿才解决.在这里把经验分享一下,顺便也当做一个自己的纪录吧.
- 要想使用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
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/myappOK,到这里thin就配置成功了.
5. 安装配置NginX
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
精华推荐