rails3 on ubuntu wiht Amazon EC2

色々はまったのでメモ。
ubuntu+rvm+zlibは鬼門かも。

  • AMIの起動Community AMIs にて "ubuntu-lucid" を検索-AMIの起動

Community AMIs にて "ubuntu-lucid" を検索し、Manifest を降順に整列して最新のものを選択。

ssh -i AWS_KEY.pem ubuntu@ec2-***.amazonaws.com
  • rootパスワードの変更
sudo passwd root
  • パッケージの更新
sudo aptitude update
sudo aptitude safe-upgrade
sudo aptitude install unzip emacs
  • AMI Toolsのインストール
cd /usr/local/src/
sudo curl -O http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip
sudo unzip ec2-ami-tools.zip -d /usr/local
cd /usr/local/src
sudo wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
sudo unzip ec2-api-tools.zip
cd ec2-api-tools-1.4.2.2
sudo cp -r bin /mnt
sudo cp -r lib /mnt
  • jreのインストール
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts
export EC2_HOME=/mnt
export PATH=$PATH:$EC2_HOME/bin
export EC2_PRIVATE_KEY=$EC2_HOME/pk-***.pem
export EC2_CERT=$EC2_HOME/cert-***.pem
export JAVA_HOME=/usr/lib/jvm/java-6-sun
export EC2_AMITOOL_HOME=/usr/local/ec2-ami-tools-1.3-***
export PATH=$PATH:${EC2_AMITOOL_HOME:-EC2_HOME}/bin
source ~/.bashrc
[return]

確認

source ~/.bash_profile
ec2ver
which ec2-bundle-vol
  • gitのインストール
sudo aptitude install git-core
  • rubyのインストール
sudo aptitude install ruby
  • gemのインストール
cd /usr/local/src
sudo wget http://rubyforge.org/frs/download.php/74234/rubygems-1.5.2.tgz
sudo tar xvzf rubygems-1.5.2.tgz
cd rubygems-1.5.2/
sudo ruby setup.rb

シンボリックリンクの作成

cd /usr/bin
sudo ln -s /usr/bin/gem1.8 gem
sudo gem update --system
  • rvmのインストール
bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

.rvmrcに以下を追加

export rvm_pretty_print_flag=1

.bashrcに以下を追加

# rvmのインストールで既に.bash_profileに追加済みなら不要
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
  • パスを適用
source ~/.bash_profile
  • rvmを最新化
rvm get head
rvm reload
  • rubyのインストール
# For Ruby (MRI & ree) & ruby-head,  you should install the following OS dependencies
sudo aptitude install build-essential bison autoconf

# If you wish to install rbx and/or Ruby 1.9 head (MRI) (eg. 1.9.2-head),
then you must install and use rvm 1.8.7 first.
rvm install 1.8.7

rvm package install readline
rvm package install zlib
rvm package install openssl

# then ruby 1.9.2
rvm install 1.9.2 --default -C --with-openssl-dir=$rvm_path/usr --with-readline-dir=$rvm_path/usr --with-zlib-dir=$rvm_path/usr
  • railsのインストール
gem install rails
  • mysqlのインストール
sudo aptitude install mysql-server mysql-client libmysqlclient-dev
gem install mysql

# /etc/mysql/my.cnfの編集
[client]                                                                                                            
port    = 3306                                                                                                      
socket    = /var/run/mysqld/mysqld.sock                                                                             
default-character-set=utf8  # 追加
sudo aptitude install apache2
sudo /etc/init.d/apache2 start
  • passengerのインストール
gem install passenger
sudo aptitude install libcurl4-openssl-dev libssl-dev libopenssl-ruby apache2-prefork-dev libapr1-dev libaprutil1-dev
passenger-install-apache2-module
  • passenger設定ファイル
# /etc/apache2/mods-available/passenger.load 
LoadModule passenger_module /home/ubuntu/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.6/ext/apache2/mod_passenger.so

# /etc/apache2/mods-available/passenger.conf
PassengerRoot /home/ubuntu/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.6
PassengerRuby /home/ubuntu/.rvm/wrappers/ruby-1.9.2-p180/ruby
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/passenger.load passenger.load
sudo ln -s ../mods-available/passenger.conf passenger.conf

# /etc/apache2/sites-availables/***
<VirtualHost *:80> 
  ServerAdmin test@test.com
  ServerName test.com
 
  # Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
  LogLevel warn
  SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(ico)|(js)|(css)$" no_log
  CustomLog /var/log/apache2/test.com/access.log combined env=!no_log
  ErrorLog /var/log/apache2/test.com/error.log
 
  DocumentRoot /home/ubuntu/rails/test.com/public
  <Directory /home/ubuntu/rails/test.com/public>
    Allow from all 
    Options FollowSymLinks -MultiViews
  </Directory>
</VirtualHost> 

<VirtualHost *:80> 
  ServerName www.test.com 
  Redirect permanent / http://test.com/
</VirtualHost>
  • siteの有効化
sudo a2ensite ***
sudo aptitude install sendmail
sudo aptitude install imagemagick
  • RMagickのインストール
sudo aptitude install libmagick9-dev
gem install rmagick
  • AMIの登録
# 証明書の転送
scp -i AWS_KEY.pem cert-***.pem ubuntu@ec2-***.compute-1.amazonaws.com:/home/ubuntu
scp -i AWS_KEY.pem pk-***.pem ubuntu@ec2-***.compute-1.amazonaws.com:/home/ubuntu

# sshで接続、証明書を/mntディレクトリへ移動
ssh -i ***.pem ubuntu@***
sudo cp cert-***.pem /mnt
sudo cp pk-***.pem /mnt
cd /mnt/

# ERROR: You need to be root to run /usr/local/ec2-ami-tools-1.3-57676/lib/ec2/amitools/bundlevol.rbと怒られるのでrootに

su
source /home/ubuntu/.bash_profile

# イメージを作成する
ec2-bundle-vol -d /mnt  --cert cert-***.pem --privatekey pk-***.pem --user *** --fstab /etc/fstab
# Please specify a value for arch [i386]:と聞かれたらそのままリターン

amitools/crypto.rb:13:in `require': no such file to load -- openssl (LoadError)とエラーになるようなら
sudo apt-get install libopenssl-ruby 

# S3にイメージを送る
ec2-upload-bundle --bucket BUCKET_NAME --manifest image.manifest.xml --access-key *** --secret-key ***

# イメージを登録する
ec2-register BUCKET_NAME/image.manifest.xml -n BUCKET_NAME  --cert dert-***.pem --private-key pk-***.pem

# 自分で登録したAMIを確認したい時は
ec2-describe-images -o self

# AMIの削除
ec2-deregister ami-***