プログラミング 美徳の不幸

Ruby, Rails, JavaScriptなどのプログラミングまとめ、解説、備忘録。

Railsのステージング環境を構築①(Railsをインストールし、アプリを配置するところまで)

構成

Amazon EC2
◯Cent OS 6.2
Ruby 1.9.2
Rails 3.2.1
◯rvm 1.14.2
unicorn 4.3.1
Capistrano 2.12.0
◯nginx 1.2.1
mysql 5.5.25

Railsアプリ用のステージング環境を構築しました。

今回はWebサーバのnginx、APサーバのunicorn、DBサーバのmysqldをすべて同一のホストで動かしています。実際は主にAPサーバが複数台になってDBも増えると思いますが、そのひとつひとつを逐一手動更新するのは大変かつ危険な作業なので、一括でデプロイできるようにCapistranoを使用しました。

ざっくり、今回の構成ではまりやすいポイントは

RAILS_ENV=stagingという特殊な設定をした点(しないで済む方法もあるかも)

・rvmを使用する場合はCapistranoに特殊な設定が必要

・デプロイ後にunicornCapistranoで再起動するために設定が必要

まぁこういったところでしょう。実際一度すっきりさせると話は早いんですが、なかなかスムーズには行かないところも多かったです。

#rootでログイン
ssh -i ~/.ssh/秘密鍵.pem root@54.248.×××.×××

#管理用ユーザ(admin)の作成
useradd admin -G wheel
passwd admin
> PASSWORD #=>パスワードを入力する

#権限の設定、wheelグループユーザがsuおよびsudoできるように
vi /etc/pam.d/su
    #以下をアンコメント
    auth  required   pam_wheel.so  use_uid

    visudo
       #以下をアンコメント
       %wheel    ALL-(ALL) ALL

#adminユーザにsshログインを許可する
mkdir /home/admin/.ssh
cp /root/.ssh/authorized_keys /home/admin/.ssh/
chown admin.admin /home/admin
chown admin.admin /home/admin/.ssh/authorized_keys

chmod 0700 /home/admin/.ssh
chmod 0600 /home/admin/.ssh/authorized_keys

ssh - i ~/.ssh/秘密鍵.pem admin@54.248.×××.×××
#=>ログインできることを確認する

#rootでのSSHログインを不許可にする
sudo vi /etc/ssh/sshd_config
    #以下に変更
    PermitRootLogin no

ssh -i ~/.ssh/秘密鍵.pem root@54.248.×××.×××
#=>ログインできないことを確認

ファイアウォール設定

sudo cp /etc/sysconfig/iptables-config /etc/sysconfig/iptables-config.bak
sudo vi /etc/sysconfig/iptables
以下を追記
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

sudo service iptables restart

rvmのシステムインストール
rvmは、ユーザごとのホームディレクトリに実体を作成するユーザインストールと、マシン全体で共有できるシステムインストールがある
Macでの通常の開発時にはユーザインストールでも問題ないが、サーバサイドではシステムインストールのほうが望ましい

curl -L https://get.rvm.io | sudo bash -s stable

#使用するユーザがrvmグループに属する必要が有る
usermod -a -G rvm admin

gccとmakeのインストール

sudo yum install -y gcc
sudo yum install -y make

rubyのインストール

rvm install 1.9.2-p290
rvm use 1.9.2-p290 --default
#=>Using /usr/local/rvm/gems/ruby-1.9.2-p290
ruby -v
#=>ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]

railsに必要なパッケージのインストール

sudo yum install -y zlib zlib-devel
cd /usr/local/rvm/src/ruby-1.9.2-p290/ext/zlib
ruby extconf.rb
make
make install

sudo yum install -y openssl openssl-devel
cd /usr/local/rvm/src/ruby-1.9.2-p290/ext/openssl
ruby extconf.rb
make
make install

sudo yum install -y readline readline-devel
cd /usr/local/src/ruby-1.9.2-p290/ext/readline
ruby extconf.rb
make
make install

sudo yum install -y gcc-c++
sudo yum install -y livexml2-devel
sudo yum install -y libxslt-devel

railsのインストール

gem install rails -v 3.2.1
rails -v 
#=>Rails 3.2.1

MySQLのインストール

sudo yum install -y mysql-server mysql-devel
sudo service mysqld start
sudo chkconfig mysqld on

#設定ファイルの編集
character-set-server = utf8 ([mysqld]内に)
#ユーザの作成
mysql -u root
> GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY 'パスワード' WITH GRANT OPTION;

アプリ固有に必要なパッケージのインストール(使用するgemごとに異なる)

sudo yum install -y ImageMagick ImageMagick-devel
sudo yum install -y postgresql-devel
sudo yum install -y sqlite-devel

nginxとgitのインストール

sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
sudo yum install -y nginx
nginx -v
#=>nginx version: nginx/1.2.1

#gitのインストール
sudo yum install -y git

#アプリの配置(adminで作業)

cd /var/
sudo mkdir www
sudo chown root.wheel www 
sudo chmod g+w www
cd ./www/
git clone git@github.com:hogehoge/hoge.git
bundle install

#テーブルの作成、初期データ投入
  cd /var/www/hogeapp
  rake db:migrate RAILS_ENV=production
  rake db:seed RAILS_ENV=production


長くなるのでunicorn導入から次回。