RHEL rails起動スクリプト作成

本番環境の mongrel の起動は
ruby script/server mongrel -e production -p 80 -d
最後に -d をつけてデーモンモードにすることで
バックグラウンドで起動しています
アプリ起動のときに & を使ったときのようなものです
ただし、一般ユーザである rails ユーザでは実行できません
1024番より小さいポートの場合root 権限が必須です
これらは別名特権ポートともいわれます
なので、root で実行するスクリプトを作成します
まず
su –
でroot ユーザへ変更
mkdir bin でディレクトリ作成
次に
vim /root/bin/start_sample.sh
でファイルを作成
#!/bin/sh
export PATH=$PATH:/home/rails/gems/bin
export RUBYLIB=$RUBYLIB:/home/rails/gems/lib
export $GEM_HOME=/home/rails/gems
cd /home/rails/rails/sample
ruby script/server mongrel -e production -p 80 -d
として保存し
chmod +x start_sample.sh
で実効権限をつけたあと
start_sample.sh を実効
これでブラウザを起動し
http://サーバーIP/todos
にアクセスすればOK
次は、監視スクリプトを作成します

RHELでrailsサンプルアプリの作成

RHELのインスタンスを使い、練習
参考資料は
Linux 2012-04

まず開発用DB sample_development
本番用 sample_production
を作成
使用しているのは postgresql
ただし、今回までインスタンスを停止しているので
最初にAWSアカウントにログインして RHELのインスタンスを稼働し
ssh 公開鍵認証でroot でログイン
続いて
su – rails
でrails ユーザへ変更
まず
createdb -U rails sample_development
でパスワード入力し作成
続いて
createdb -U rails sample_production
で作成
パスワードは書籍のとおりに pas4rails でOK
次にDB接続情報ファイルを設定
vim rails/sample/config/database.yml
でファイルを開き
/username
で検索

development:
adapter: postgresql
encoding: unicode
database: sample_development
pool: 5
username: rails
password: pas4rails

というように変更します
他にも2ヶ所ありますので
/username で検索し、変更しておきます
次にサンプルアプリを生成
しかし

ruby script/generate scaffold Todo title:string description:text due:datetime done:boolean
ruby: No such file or directory -- script/generate (LoadError)

となってしまいます
原因は
Rails再びつまずく、scriptの中身ないじゃん
にあるように
実行は予めアプリケーションのフォルダに移動してから実行します
とのこと
たしかに書籍をみても
. はカレントディレクトリ(~/rails/sample を表す)
と書いてあったので、
一度
cd rails/sample/
へ移動し
ruby script/generate scaffold Todo title:string description:text due:datetime done:boolean
を実効

exists  app/models/
exists  app/controllers/
exists  app/helpers/
create  app/views/todos
exists  app/views/layouts/
exists  test/functional/
exists  test/unit/
create  test/unit/helpers/
exists  public/stylesheets/
create  app/views/todos/index.html.erb
create  app/views/todos/show.html.erb
create  app/views/todos/new.html.erb
create  app/views/todos/edit.html.erb
create  app/views/layouts/todos.html.erb
create  public/stylesheets/scaffold.css
create  app/controllers/todos_controller.rb
create  test/functional/todos_controller_test.rb
create  app/helpers/todos_helper.rb
create  test/unit/helpers/todos_helper_test.rb
route  map.resources :todos
dependency  model
exists    app/models/
exists    test/unit/
exists    test/fixtures/
create    app/models/todo.rb
create    test/unit/todo_test.rb
create    test/fixtures/todos.yml
create    db/migrate
create    db/migrate/20120310004408_create_todos.rb

となり、成功です
このコマンドで、サンプルアプリを生成
続いて
RAILS_ENV=development rake db:migrate
で開発用DBの初期化
RAILS_ENV=production rake db:migrate
で本番用DBの初期化
次に、サンプルアプリの動作確認を確認
ruby script/server mongrel -e development
を実行し
確認のため、ブラウザを起動して動作確認
今回の確認には google chrome を使用
http://サーバーIP:3000/todo
でアクセスして画面に表示されたらOKです
new todo をクリックすると Todo リストがつくれます
とりあえず、確認できたら
端末に戻って Ctrl + c で mongel を停止します
次はアプリの起動、停止監視のスクリプトになります
それにしても、やはり書籍の場合ある程度知っていることが前提で
かかれているので多少はネットなどで調べることが必要になります

RHELへDBと開発環境導入 その4

RHELへDBと開発環境導入 その3

ひととり設定できたので、動作確認します
mkdir ~/rails
cd ~/rails
rails sample -d postgresql
cd sample
ruby script/server mongrel

rails用 webサーバー Mongel を起動します
次に iptables を設定します
別の端末を開いて
vim /etc/sysconfig/iptables

開きます

Generated by iptables-save v1.4.7 on Sun Jan  8 18:54:31 2012
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:148]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m limit --limit 3/hour -j LOG --log-prefix "[INPUT Dropped] "
COMMIT
# Completed on Sun Jan  8 18:54:31 2012

となっているので

# Generated by iptables-save v1.4.7 on Sun Jan  8 18:54:31 2012
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:148]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT

-A INPUT -m limit --limit 3/hour -j LOG --log-prefix "[INPUT Dropped] "
COMMIT
# Completed on Sun Jan 8 18:54:31 2012

というように追記します
追記後
service iptables restart
で iptable を再起動します
AWSを使っているので、さらにセキュリティグループの設定で
80
3000
のポートも開放します
これで、ブラウザからサーバーのIPアドレスへアクセスすればページが表示されます
ちなみに
http://サーバーIPアドレス:3000
というように、最後に3000ポートを指定する必要があります
似たようなもので
tomcat のときにも 8080 版ポートを指定することもあります

RHELへDBと開発環境導入 その3

RHELへDBと開発環境導入 その2

postgresql 設定ができたので
次に ruby on rails を導入します
最初に
useradd rails
passwd rails

rails ユーザを作成し
vim /etc/ssh/sshd_config
でファイルを開き
DenyUsers rails
を最下行に追記します
service sshd restart
で設定を反映するのを忘れずに
では、ruby on rails の導入になります
yum install ruby ruby-lib postgresql-devel ruby-devel
を実行し
RPMパッケージを導入します
次に
RubyGems ruby on rails を導入するのですが
ここから先は rails ユーザで行いますので
su – rails で
パスワードを入力し
rails ユーザで行います
環境変数を設定するため
vim .bashrc
で設定ファイルを開き
export PATH=$PATH:~/gems/bin
export RUBYLIB=$RUBYLIB:~/gems/lib
export GEM_HOME=~/gems
を最下行へ追記
source .bashrc
で設定反映します
mkdir ~/gems
mkdir ~/work
で必要なディレクトリ作成し
wget http://rubyforge.org/frs/download.php/70696/rubygems-1.3.7.tgz
でファイル取得
tar zxvf rubygems-1.3.7.tgz -C ~/work/
で work ディレクトリに解凍
ruby work/rubygems-1.3.7/setup.rb –prefix=~/gems
で rubygemsを導入します
続いて
ruby on rails と 関連パッケージを導入します
gem install rdoc postgres mongrel
gem install rake -v0.8.7
gem install rails -v2.3.14
続いてサンプルアプリで動作確認します

RHELへDBと開発環境導入 その2

RHELへDBと開発環境導入
の続きを行います
今回はログ出力とローテーション設定です
vim /var/lib/pgsql/data/postgresql.conf
で設定ファイルを開き
最終行へ
log_destination = ‘syslog’
syslog_facility = ‘LOCAL0’
syslog_ident = ‘postgres’
log_line_prefix = ‘%u %d ‘
log_connections = on
log_disconnections = on
log_statement = ‘all’
を追記し保存します
続いて rsyslog のファイル出力設定です
vim /etc/rsyslog.conf
でファイルを開き
/info;mail
で検索し

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

*.info;mail.none;authpriv.none;cron.none;local0.none                /var/log/messages

というように追記します
そして 次の行へ

local0.*                                                -/var/log/postgresql

を追記します
-/var/log/postgresql
というように - がファイルパスの前についているのは
ログをファイルに書き出す際に
ディスクキャッシュのフラッシュを抑制するため
ここまで追記したら保存し
service rsyslog reload
service postgresql restart
で設定を反映するためのサービス再起動をします
続いて、ログローテーションの設定をします
これをやらないと、ログファイルがどんどん肥大化していきます
vim /etc/logrotate.d/syslog
でファイルを開き

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron /var/log/postgresql {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

というように
追記して保存します
次は Ruby on Rails を導入します

RHELへDBと開発環境導入

今月の日経Linux に先月号からの特集で
RHEL(Red Hat Enterprise Linux) でサーバー構築
が載っていましたので
実践しています
ちなみに、今月号は

です
通常はOSが有償であまり使うことはないのですが
AmazonEC2 で時間単位で借りれるため、これを使って
構築していきます
今回は PostgreSQL のインストールからです
ただし SELinux は停止しておきましょう
これが原因で初期化失敗がおきるリスクがあります
まず、最初に停止しているインスタンスを起動します
ちなみに、時間単位で課金されるため、稼働時間が
1分でも1時間と変わりませんので
注意しましょう
yum install postgresql-server postgresql-docs
で導入
次に
service postgresql initdb

DB初期化
chkconfig postgresql on

次回から起動時にスタートするように設定
(これをやらないと、またコマンドでサービス立ち上げが必要になります)
service postgresql start
で postgresql をスタート
次にユーザ作成します
su – postgres
でユーザを root から postgres へ切り替え
psql -c “ALTER USER postgres encrypted password ‘任意のパスワード'”
でパスワードを設定します
psql -c “CREATE USER rails encrypted password ‘任意のパスワード’ createdb”

rails ロールを作成、DB作成権限を与えます
次に、認証方式の設定ファイルを変更します
vim /var/lib/pgsql/data/pg_hba.conf
でファイルを開き
最下行付近にある設定を変更します

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident
# IPv6 local connections:
host    all         all         ::1/128               ident

これを

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
local   all         all                               md5
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

というように
最後の
METHOD を md5 に変更します
ちなみに、md5はパスワード認証という意味です
ここまで完了したら、設定反映のため、サービスの再起動をします
一度
su –
で管理者権限 root へ戻り
service postgresql restart
を実行します
postgres ユーザだと、エラーになります
接続確認のため
psql -l -U rails
を実行し、パスワードを入力してDB一覧が出れば成功です

RHEL 初期設定

インスタンス作成と
SSH接続ができるようになったら、
ssh -i 鍵ファイル root@ipアドレス
で接続します
最初に
yum -y groupinstall “Development Tools”
で開発環境をインストールします
次に
ファイアウォール設定をします
Linux では
iptablesを使います
今回のばあい
書籍にあるスクリプトを使いました
スクリプト作成は
vim iptables.shで作成し
sh iptables.sh
で実行します
また、chkconfig で不要サービスを
停止できますが
choose_repo
はとめないようにしましょう
これは、AWS環境でyumを
つかうために必要なものです
次に、
useradd コマンドで一般ユーザーを作成しますが
RHEL では  公開鍵認証のため
一般ユーザをつくってもこのこの設定をしないとログインできません
useradd ユーザ名
で作成し
passwd ユーザ名
でパスワード設定します
終わったら
vim /etc/ssh/sshd_config
でログイン設定を編集し
PermitRootLogin noBanner /etc/ssh_banner
を記述するのですが
こんかいはそのまま root 権限で行います

RHELをAmazonEC2で

日経Linux 2012-02 を参考に
AmazonEC2 で RHEL を構築してみます
AWSのRHELは
LVMを使わない構成でルートファイルシステムに
インストールされます
では、さっそく構築開始
AmazonEC2にログインし
作成する場所を
Asia Pasific Tokyoにして
Launch Instance をクリック
次に、
Launch Clasic Wozardを選択し
使うイメージを
RedHatEnterPriseLinux 6.1 64bit
を選択
インスタンスタイプは
とりあえず
Micro Instance
インスタンス名は
RHELにしました
認証キーは、以前作ったものが
あるため、今回のは
Choose from your existing key Pairs
を選択
次に、セキュリティグループ設定になるので
Create a new Security Group を
クリックし
Group Name
に任意のグループ名
今回のは、security test
Group Description
に概要を書きます
今回のは、
RHEL test
としました
次に、
Create a new rule

HTTP
を選択し
Add rule
をクリック
あとは、そのまま続けていけば
できます
詳しい解説が
日経Linux 2012 02に載っていますので
そちらをみるとよりわかりやすいです

Redhat Enterprise Linux6 評価版の実験

Redhat Enterprise の無償評価版についてメールで問い合わせをして
確認をしたところ、
ダウンロードするメディアに無償評価番というものはなく
取得したライセンスにより
使用できる期間が制限がつくということです
というわけで、さっそくダウンロードし、
実験してみようと思います
すでにアカウントは取得してあるので
ダウンロードするだけなのですが、さすがにネット回線が遅いため
ダウンロードは翌日以降となります