初めてのEC2+RDS(MySQL)+rbenv+Rails+Passenger 環境を構築
画像も貼ろうと思ったのですが、マネージメントコンソールがよくデザインが変わって混乱を招くとか考えたり、正直面倒なので文字だけです。
ぽえむ
Railsのアプリをよく作ります。
しかし、Production環境であげることはなく、殆どがdevelopment環境で利用している。 そんな人、いませんか?
私がそうです。今回は、そんな殻を今回破りました。
備忘録的な意味でまとめておきます。
AWS無料枠を利用していなかった為、利用してみました。
EC2は、初回登録時750時間無料です。
Instanceをつくろう
AWS マネジメントコンソール (EC2)
サインインしましょう。アカウントがない人はクレカを片手に作りましょう。
Amazon Web Services
からEC2
を選択し、Create Instance
から新しいインスタンスを作ります。
の、前に右上にあるリージョンの設定をAsia Pacific (Tokyo)
にしましょう。
少し早くなる気がします。
- Choose AMI
今回はOSにこだわりが無かった為、使ったことのないAmazon Linux AMI 2014.09.2 (HVM)
を選択。 - Choose Instance Type
構成はサービス立ち上げ時はもちろんスペックなんて必要ありません。t2.micro
を選択。 - Configure Instance
- Add Storage
- Tag Instance
Step3,4 の設定は飛ばし、5. にて何かしらタグ作っておきましょう。 - Configure Security Group
Step6 ではSecurity Group name
に適当な名前付け、Rule
へHTTP
とMySql
を追加します。 - 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
をしてみましょう。
- Select Engine
もちろん、MySQL
を選択。 - Production?
はいあべいらびりてぃを保証したいときはYes
.
無料の場合はNo
もちろんNo
. - Specify DB Details
DB Engine Version
は何がいいか分かっていないので、defaultの5.6.19a
.
DB Instance Class
はdb.t2.micro — 1 vCPU, 1 GiB RAM
.
Multi-AZ Deployment
はNo
(前のStepでやったような..) .
DB Instance Identifier*
分かりやすくする為、DB名にした.
Master Username*
Master Password*
は必須入力. - 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を!