AWSのAmazon Linux AMI にrailsサーバーをたてて外部に公開する方法。
今回はrvmを使わない。
[前提条件]
AWSのインスタンスを確保している。
SecurityGroupsの設定が完了している。
##yumのアップデート
sudo yum update
##必要なパッケージのインストール
sudo yum -y install gcc
sudo yum -y install gcc-c++
sudo yum -y install zlib-devel
sudo yum -y install httpd-devel
sudo yum -y install curl-devel
sudo yum -y install sqlite-devel
##ruby1.9.3のインストール
mkdir src
cd src
wget ftp://core.ring.gr.jp/pub/lang/ruby/1.9/ruby-1.9.3-p392.tar.gz
tar xzf ruby-1.9.3-p392.tar.gz
cd ruby-1.9.3-p392
./configure
make
make test
sudo su - root
make install
ruby -v
AWSに元々インストールされているrubyは1.8.7。
homeのsrcとか適当にディレクトリ作ってダウンロードしたファイルはそこに入れる。
##railsインストール
gem install bundler
gem install rdoc
gem install rails
rails -v
※sudo gemができないのでrootユーザーに変更して行う。
##sqlliteインストール
gem install sqlite3
##Unicornインストール
gem install unicorn
##nginxインストール
sudo yum -y install nginx
sudo /etc/init.d/nginx start
nginx起動後にアクセスしてnginxのページが出れば成功
http://XX.XXX.XXX.XXX/
##railsアプリ作成
mkdir app
cd app
rails new myapp
myappなど適当なアプリを作成。
##JavaScriptを有効にする
cd myapp
vi Gemfile
gem 'therubyracer', :platforms => :rubyをコメントイン
bundle install
##railsサーバー起動
rails server -d
curl -I localhost:3000
curlで起動の確認が可能。
ポートを指定して画面にアクセスすればrailsアプリを画面で確認することが可能
http://XX.XXX.XXX.XXX:3000/
##niginxとunicornの設定
unicorn起動スクリプト作成。
cd myapp
vi config/unicorn.conf
worker_processes 2
listen '/tmp/unicorn.sock'
stderr_path File.expand_path('unicorn.log', File.dirname(__FILE__) + '/../log')
stdout_path File.expand_path('unicorn.log', File.dirname(__FILE__) + '/../log')
preload_app true
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bk
sudo vi /etc/nginx/nginx.conf
nginxの設定を変更。
ファイルは全文書き換える。
worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream unicornapp {
server unix:/tmp/unicorn.sock;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://unicornapp;
}
}
}
sudo /etc/init.d/nginx restart
##unicorn起動
unicorn -c config/unicorn.conf -D
これでrailsのアプリが公開される。
http://XX.XXX.XXX.XXX