読者です 読者をやめる 読者になる 読者になる

DailyDiaryCron

かきため

初めてのEC2+RDS(MySQL)+rbenv+Rails+Passenger 環境を構築

画像も貼ろうと思ったのですが、マネージメントコンソールがよくデザインが変わって混乱を招くとか考えたり、正直面倒なので文字だけです。

ぽえむ

Railsのアプリをよく作ります。

しかし、Production環境であげることはなく、殆どがdevelopment環境で利用している。 そんな人、いませんか?

私がそうです。今回は、そんな殻を今回破りました。
備忘録的な意味でまとめておきます。
AWS無料枠を利用していなかった為、利用してみました。
EC2は、初回登録時750時間無料です。

Instanceをつくろう

AWS マネジメントコンソール (EC2)

サインインしましょう。アカウントがない人はクレカを片手に作りましょう。

Amazon Web ServicesからEC2を選択し、Create Instance から新しいインスタンスを作ります。 の、前に右上にあるリージョンの設定をAsia Pacific (Tokyo)にしましょう。 少し早くなる気がします。

  1. Choose AMI
    今回はOSにこだわりが無かった為、使ったことのない Amazon Linux AMI 2014.09.2 (HVM) を選択。
  2. Choose Instance Type
    構成はサービス立ち上げ時はもちろんスペックなんて必要ありません。 t2.microを選択。
  3. Configure Instance
  4. Add Storage
  5. Tag Instance
    Step3,4 の設定は飛ばし、5. にて何かしらタグ作っておきましょう。
  6. Configure Security Group
    Step6 ではSecurity Group nameに適当な名前付け、 RuleHTTPMySqlを追加します。
  7. Review
    Step7で設定を確認し、Launch時に鍵を生成します。Create a new key pairを選択し、ローカルに保管するkeyを作成しましょう。

pending 1分ほどでInstanceが出来上がります。これでリモート環境から利用できるマシンが完成です!凄い!!

EC2へHTTP接続してみよう

コンソール

Instance を選択した状態で、Connect をしてみます。色々記載されているのですが、Pemの権限を400に変え、Exampleをコピペしてコンソールからアクセスすればすぐアクセスできます。

$ chmod 400 sample.pem
$ ssh -i sample.pem ec2-user@xxx.xxx.xxx.xxx
$ ssh -i sample.pem ec2-user@54.92.78.114

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/

さらに感動を味わうため、HTTP接続してみます。

$ sudo yum -y install httpd
$ sudo service httpd start

Public DNS に記載されてる以下のような感じのURLをブラウザで確認し、Amazon Linux AMI Test Pageが出ればここまで完了です。

ここまではLIG様の、わずか5分!? AWSのEC2でクラウドなウェブサーバーを構築してみたを参考にさせて頂きました。 ほんと、5分で作れた。

RDSを使ってMySQLを接続してみよう

AWS マネジメントコンソール (EC2)

EC2と同様、初回登録時750時間無料です。

Amazon Web ServicesからRDSを選択し、Launch a DB Instanceをしてみましょう。

  1. Select Engine
    もちろん、MySQLを選択。
  2. Production?
    はいあべいらびりてぃを保証したいときはYes.
    無料の場合はNoもちろんNo.
  3. Specify DB Details
    DB Engine Version は何がいいか分かっていないので、defaultの5.6.19a.
    DB Instance Classdb.t2.micro — 1 vCPU, 1 GiB RAM.
    Multi-AZ DeploymentNo (前のStepでやったような..) .
    DB Instance Identifier* 分かりやすくする為、DB名にした.
    Master Username* Master Password* は必須入力.
  4. Configure Advanced Settings
    VPC Security Groupは、EC2で作ったものを利用.
    Launch DB Instance で完了!

creating + backing-upはEC2に比べ、結構時間かかります。
available になったら早速使ってみよう!!

EC2 から接続

EC2から接続する準備します.

sudo yum install mysql

EC2にDBを持たず、RDSを利用する為、mysql-serverは必要ありません。

$ mysql -h [Endpoint] -u [UserName] -p [DBName]

Endpoint は、RDSのInstanceで詳細情報にあります。接続出来たら完了!
もし接続出来ない場合、SecurityGroupを疑ってみましょう。
僕はRuleへyMSQLを登録していなかった為、登録出来ませんでした。

ローカル端末からSSHを通して接続

コンソールからDB使うの、つらい。 Sequel Pro を使って、ローカルから接続出来るか確認しました。

SSH接続で、EC2を通してRDSへ接続する事でアクセス出来ました。 (説明めんどうなので割愛)

Rails

rbenv + rails でProduction環境を作ろう!

$ ruby -v
ruby 2.0.0p598 (2014-11-13 revision 48408) [x86_64-linux]

default でも2.0.0が入っているので、そのまま利用しても良いかなと思ったが、前からrbenvを利用したproduction環境に興味があったので、作ってみた。

必要なライブラリインストール

$ sudo yum install mysql-devel git gcc zlib-devel libxml2 patch openssl-devel gcc-c++ make curl-devel httpd-devel apr-devel apr-util-devel

これらを探すのでかなりやられた。

rbenv install

$ git clone git://github.com/sstephenson/rbenv.git .rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
$ mkdir -p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git
$ $ rbenv --version
rbenv 0.4.0-129-g7e0e85b
$ rbenv install --list 
$ rbenv install 2.1.5
$ rbenv global 2.1.5
$ ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]

時代は 2.2.0!! と言いたい所だけど、2.1.5。

node.js install

rails で使うためにNode. iojsで騒がれてるけどよくわからんので、cloneしてbuildして使うだけ.

$ git clone https://github.com/joyent/node.git
$ cd node 
$ sudo make && sudo make install
$ node -v
v0.13.0-pre

gem bundle rails

$ gem install bundler --no-ri --no-rdoc
$ sudo mkdir -p /var/rails
$ cd /var/rails
$ git clone .../sample.git
$ mkdir sample
$ bundle install --without test development
$ rake db:migrate RAILS_ENV=production
$ rake assets:precompile RAILS_ENV=production

passenger

$ sudo chmod o+x "/home/ec2-user"
$ gem install passenger --no-rdoc --no-ri
$ sudo vim /etc/httpd/conf.d/passenger.conf
   LoadModule passenger_module /home/ec2-user/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/passenger-4.0.58/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/ec2-user/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/passenger-4.0.58
     PassengerDefaultRuby /home/ec2-user/.rbenv/versions/2.1.5/bin/ruby
   </IfModule> 
$ rake secret
xxxx...
$ 
$ sudo vim /etc/httpd/conf.d/sample.conf
   <VirtualHost *:80>
      ServerName www.sample.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /var/rails/sample/public
      <Directory /var/rails/sample/public>
         SetEnv SECRET_KEY_BASE xxxx..
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
         # Uncomment this if you're on Apache >= 2.4:
         #Require all granted
      </Directory>
   </VirtualHost>
$ sudo service httpd restart

良きAWS Liftを!