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に特殊な設定が必要
・デプロイ後にunicornをCapistranoで再起動するために設定が必要
まぁこういったところでしょう。実際一度すっきりさせると話は早いんですが、なかなかスムーズには行かないところも多かったです。
#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導入から次回。