RailsアプリをEC2にデプロイしてみる。
タイトルの通り、RailsアプリをAWSのEC2で動かしてみます。
EC2側の設定
ユーザ周りの設定
EC2インスタンスを立ちあげ、ローカルマシンから
$ scp -i ~/.ssh/hogehoge.pem ~/.ssh/id_rsa.pub ec2-user@ec2_server:~
EC2インスタンスにログイン後、
$ sudo passwd $ sudo su # useradd rails # visudo # passwd rails # mkdir --mode 700 /home/rails/.ssh # mv id_rsa.pub /home/rails/.ssh/authorized_keys # chmod 600 /home/rails/.ssh/authorized_keys # chown -R rails:rails /home/rails/.ssh
Ruby周りの設定
「Amazon Linuxでrbenvを使ってRuby2.0を入れてみた。」のように、rbenvを使ってRubyを入れます。
ここでは、とりあえずRuby1.9.3とBundlerを入れておきます。
$ rbenv install 1.9.3-p429 $ rbenv global 1.9.3-p429 $ gem install bundler
Web/Appサーバ周りの設定
WebサーバとAppサーバをインストールしておきます。
$ sudo yum install -y gcc-c++ libcurl-devel httpd-devel $ gem install passenger $ source ~/.bash_profile $ passenger-install-apache2-module
passenger-install-apache2-moduleの指示に従って、Apacheの設定ファイルに以下の内容を追記します。
#/etc/httpd/conf/httpd.conf LoadModule passenger_module /home/rails/.rbenv/versions/1.9.3-p429/lib/ruby/gems/1.9.1/gems/passenger-4.0.5/libout/apache2/mod_passenger.so PassengerRoot /home/rails/.rbenv/versions/1.9.3-p429/lib/ruby/gems/1.9.1/gems/passenger-4.0.5 PassengerDefaultRuby /home/rails/.rbenv/versions/1.9.3-p429/bin/ruby
また、apacheの実行ユーザを変更します。
#/etc/httpd/conf/httpd.conf user rails group rails
そして、自動起動設定。
$ sudo /sbin/chkconfig httpd on
まだ、アプリケーションが置かれているディレクトリが存在しないため、DocumentRoot等の設定はデプロイ後に行うことにします。
DB周りの設定
今回はPostgreSQLを使用します。
$ sudo yum install -y postgresql postgresql-devel postgresql-server postgresql-libs $ sudo service postgresql initdb $ sudo /sbin/chkconfig postgresql on $ sudo service postgresql start
PostgreSQLのユーザとテーブルを作り、パスワードを設定します。
$ sudo su - postgres $ createuser -a pic_share $ createdb -E UTF8 -O pic_share pic_share_production $ psql -c "alter user pic_share with password 'hogehoge'" $ exit
PostgreSQLの設定ファイルを編集します。
#/var/lib/pgsql9/data/pg_hba.conf local all all md5
$ sudo sudo service postgresql reload
ローカル側でデプロイの準備
Capistrano設定
$ gem install capistrano capistrano_colors
$ capify .
#config/deploy.rb require "bundler/capistrano" load "deploy/assets" # Git repository set :scm, "git" set :repository, "git@github.com:user_name/repo_name.git" set :branch, "master" ssh_options[:forward_agent] = true default_run_options[:pty] = true # Server setting ec2 = "ec2-x-x-x-x.ap-northeast-1.compute.amazonaws.com" role :web, ec2 role :app, ec2 role :db, ec2, :primary => true set :application, "pic_share" set :user, "rails" set :use_sudo, false set :deploy_to, "/home/#{user}/#{application}" set :rails_env, "production" default_run_options[:shell] = '/bin/bash --login'
#Gemfile gem 'sqlite3', group: [:development, :test] gem 'pg', group: :production gem 'therubyracer', :platforms => :ruby
#config/database.yml production: adapter: postgresql database: pic_share_production username: pic_share password: hogehoge encoding: utf8
$ cap deploy:setup $ cap deploy $ cap deploy:migrate
EC2側の設定
最後にApacheのDocumentRootを先ほどデプロイしたディレクトリに設定します。
<VirtualHost *:80> ServerName ec2-x-x-x-x.ap-northeast-1.compute.amazonaws.com DocumentRoot /home/rails/pic_share/current/public </VirtualHost>
$ sudo service httpd restart