centos6.4環境構築からrails4.1.0デプロイまで-その3-centosにapache、passenger 4.0.45を導入し本production環境でrailsを動かす-


centosにapache、passenger 4.0.45を導入し本production環境でrailsを動かす

GitHub にsshで接続する

$ cd ~/.ssh
$ ls
authorized_key id_dsa known_hosts
config id_dsa.pub

↑以上のようにすでにid_dsaとid_dsa.pubが作成されている場合は、Githubへの公開鍵の登録を行う。id_dsaとid_dsa.pubが無い場合は、

$ ssh-keygen
~/.sshにて実行し、鍵を作成してください

railsで扱うデータベースを作成する

railsで使うデータベースを作成する(日本語対応)
CREATE DATABASE databas_name CHARACTER SET utf8;

データベースに権限を渡す.(ここでは名前がuserのユーザーに権限を渡す)
userの作成は http://qiita.com/A_I/items/f0aecd5e92b535f34f4f
GRANT CREATE ON database_name.* TO user@localhost;

設定した権限を確認する
SHOW GRANTS FOR user@localhost;

GRANT ALL PRIVILEGES ON 作成したデータベース名  となっていいればOK

Mysqlを再起動しておく
sudo service mysqld start

アプリケーションの用意をする

$ cd /var/www/html
ローカルで起動してみる
bundle install
bundle exec rake db:migrate
bundle exec rake db:seed

$ rails s
起動すればOK

apacheのインストールからpassengerの導入railsアプリケーションを起動まで

apacheをインストールする前にファイアウォールを無効にし、SELInaxを無効にする

SELinaxの無効化

$ sudo setenforce 0

このままだとサーバを再起動するとまた有効になってしまうので、 再起動時にも無効になるようにするには/etc/selinux/configを編集しておく。

'$ vim /etc/selinux/config'

→ SELINUX=disabled
と変更する

ファイアウォールを無効にする

$ yum install system-config-firewall-tui
$ system-config-firewall-tui
ファイヤウォールの設定でNOを選べばOK

apacheのインストール

$ yum install httpd

passengerのインストール

$ gem install --no-rdoc --no-ri passenger

(途中でgemが足りないだの、Rubyを選べだの、パーミッションがきついだの言われたら適宜修正やインストールを行う)

インストールの最後に
LoadModule
<IfModule
〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
</IfModule>

が出来るのでコピーしておく
そして/etc/httpd/conf/httpd.confのLoadModuleの下に貼付ける

/etc/httpd/conf.d/hogehoge.confにバーチャルホストの設定を記載していく
(hogehogeの部分は任意)

僕の場合以下のようにした
$ vim /etc/httpd/conf.d/hogehoge.conf
<VirtualHost *:80>
ServerName localhost.ishii
RailsEnv production
PassengerEnabled on
DocumentRoot /var/www/html/app_name/public
<Directory /var/www/html/app_name/public>
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>

railsアプリケーションの設定
$ vim rails_app/database.yml

production:
  adapter: mysql2
  encoding: utf8
  database: databasename
  pool: 5
  username: root
  password: Password⇦mysqlのpassword
  socket: /var/lib/mysql/mysql.sock
  host: localhost
default: &default
  adapter: sqlite3
  pool: 5
  timeout: 100000
development:
  <<: *default
  database: db/development.sqlite3
  timeout: 100000

設定が完了したらappaach を再起動する
$ service httpd start

この時点でcentoosサーバーのiPを叩いてアプリケーションが表示されればいいのだが自分はここで相当はまった。

まずエラーログの見方だが
$ tail -f /var/log/httpd/error_log
$ tail -f /var/log/apache2/error_log
を使う。

アプリケーションの起動がしないようならtail -f /var/log/httpd/error_logの方を参照する。

自分の場合は、以下のように本番環境であることを明示することで解決した

$ bundle install --deployment
$ rake db:migrate RAILS_ENV=development
$ rake db:seed RAILS_ENV=development`

本番環境だとassetが自動コンパイルされないので、
$ bundle exec rake assets:precompile RAILS_ENV=production
を実行する。

またconfig/secrets.ymlにあるsecret_key_base:がしっかりと記述されていることを確認する。
記述されていない場合、作成するのだがkeyは
rake secret
によって作成出来る

次はcapistoranoを導入します