EC2で無料タスク管理 〜マイクロインスタンスにRedmine1.1.2をセットアップ その2

前回の記事EC2で無料タスク管理 〜マイクロインスタンスにRedmine1.1.2をセットアップ その1
で作成したインスタンスRedmine 1.1.2をセットアップしていきます。

今回、以下のステップで構築しています。

  1. EC2 マイクロインスタンス作成
  2. Redmine 1.1.2をインストール (今回ここ)
  3. GmailSMTPサーバーを設定 (ここも)
  4. SVNのセットアップとRedmineプロジェクトと連携
  5. その他運用設定

Redmineのインストール方法は公式ブログに詳しく載っているのでこちらを参考にしてください。
http://blog.redmine.jp/articles/redmine-1_1-installation_centos/

以降、このドキュメントの手順に沿って、Amazon Linux AMI 64bitのインスタンスにセットアップをしていく上で足りなかった手順のみ説明しています。

想定環境

Redmineバージョン 1.1.2
OS CentOS 5.5Amazon Linux AMI 64bit
データベース MySQL
webサーバ Apache (Railsの実行にはPassengerを使用)

Redmineを実行するのに必要なもの

そのまま

CentOSの設定

インスタンス作成後は、SELinuxiptablesも無効になっている。
Amazon EC2FireWallが設定可能なのでiptablesではなくて、Security Group(FireWall)を利用する。

RedmineApache(Passenger)で動かすので、80ポートだけ開ける必要があるが、
前回の手順で、インスタンスに設定したSecurity Groupで80ポートを開けるように設定済みなのでここでは特になにもしない。

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

ApacheのKeepAliveはデフォルトOffなのでOnにしておく。

$ sudo vi /etc/httpd/conf/httpd.conf
#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
# KeepAlive Off

KeepAlive Offをコメントにした。

Rubyのインストール

$ sudo ./ruby-enterprise-1.8.7-2011.03/installer --dont-install-useful-gems --no-dev-docs

を実行すると何もない言われる

Checking for required software...

 * C compiler... not found
 * C++ compiler... not found
 * The 'make' tool... not found
 * The 'patch' tool... not found
 * Zlib development headers... not found
 * OpenSSL development headers... not found
 * GNU Readline development headers... not found

C++の開発環境をインストールする。

gcc, c++ make patch

$ sudo yum install gcc gcc-c++ make patch

再度、Rubyのインストールを実行、結構時間かかります。

Ruby Enterprise Edition is successfully installed!
If want to use Phusion Passenger (http://www.modrails.com) in combination
with Ruby Enterprise Edition, then you must reinstall Phusion Passenger against
Ruby Enterprise Edition, as follows:

  /usr/local/bin/passenger-install-apache2-module

Make sure you don't forget to paste the Apache configuration directives that
the installer gives you.


If you ever want to uninstall Ruby Enterprise Edition, simply remove this
directory:

  /usr/local

If you have any questions, feel free to visit our website:

  http://www.rubyenterpriseedition.com

Enjoy Ruby Enterprise Edition, a product of Phusion (www.phusion.nl) :-)

と表示されたらインストール終了

RubyGems1.4.2のインストール

sudoで実行する場合環境変数は引き継がれないので、gemを実行する場合、フルパス(/usr/local/bin/gem)で実行します。
(環境変数を引き継ぐように設定したかったのですがわからずじまい。)

$ sudo /usr/local/bin/gem --version

実行結果

[ec2-user@ip-10-117-90-xx ~]$ sudo /usr/local/bin/gem update --system 1.4.2
Updating rubygems-update
Fetching: rubygems-update-1.4.2.gem (100%)
Successfully installed rubygems-update-1.4.2
Installing RubyGems 1.4.2
RubyGems 1.4.2 installed
File not found: README
[ec2-user@ip-10-117-90-xx ~]$ sudo /usr/local/bin/gem --version
1.4.2

以降のgemの実行もフルパスで実行しました。。。

gemパッケージのインストール

特になし

MySQLの設定

特になし

Redmineのインストール

4. email.ymlの設定

会社のメールシステムはGoogle Appsを利用していますので、gmailSMTPサーバーと連携する必要があります。
GMailはSMPTサーバーのポートが587で、またTLSで通信する必要があります。

@namikawa さんの記事
http://d.hatena.ne.jp/rx7/20080501/p2
本家ブログの記事
http://redmineblog.com/articles/setup-redmine-to-send-email-using-gmail/

本家ブログを参考にrailプラグインをインストールしようとしたらエラーが出た。

[ec2-user@ip-10-112-79-92 redmine]$ ruby script/plugin install git://github.com/collectiveidea/action_mailer_optional_tls.git
Plugin not found: ["git://github.com/collectiveidea/action_mailer_optional_tls.git"]

方針を変えて、gem install tlsmailの方を試す。

$ sudo /usr/local/bin/gem install tlsmail
$ vi config/environment.rb

ファイル末尾に以下を追加

require "tlsmail"
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)

Redmineの設定ファイルを編集する。

$ sudo vi config/email.yml

大体、email.yml.exampleそのままです。

# === SMTP server at using TLS (GMail)
#
# This requires some additional configuration.  See the article at:
# http://redmineblog.com/articles/setup-redmine-to-send-email-using-gmail/
#
production:
   delivery_method: :smtp
   smtp_settings:
     tls: true
     address: "smtp.gmail.com"
     port: 587
     domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
     authentication: :plain
     user_name: "xxxxx@co-meeting.com"
     password: "password"

ここでuser_nameはredmineから配信されるメールの送信元になります。

5. Redmineの初期設定とデータベースのテーブル作成

ここでは、rakeがなかったのでrakeも追加

[ec2-user@ip-10-117-90-237 redmine]$ sudo /usr/local/bin/gem install rake
Fetching: rake-0.8.7.gem (100%)
Successfully installed rake-0.8.7
1 gem installed
Installing ri documentation for rake-0.8.7...
Installing RDoc documentation for rake-0.8.7...

Passengerのインストール

特になし

PassengerのApache用モジュールのインストール

sudoで実行、パス通ってないのでとりあえずフルパスで実行

$ sudo /usr/local/bin/passenger-install-apache2-module 
The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.5/ext/apache2/mod_passenger.so
   PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.5
   PassengerRuby /usr/local/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.


                                                                                      • -
Deploying a Ruby on Rails application: an example Suppose you have a Rails application in /somewhere. Add a virtual host to your Apache configuration file and set its DocumentRoot to /somewhere/public: ServerName www.yourhost.com DocumentRoot /somewhere/public # <-- be sure to point to 'public'! AllowOverride all # <-- relax Apache security settings Options -MultiViews # <-- MultiViews must be turned off And that's it! You may also want to check the Users Guide for security and optimization tips, troubleshooting and other useful information: /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.5/doc/Users guide Apache.html Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-) http://www.modrails.com/ Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.

Apacheの設定

特になし

Apache上のPassengerでRedmineを実行するための設定

パターン3: バーチャルホストでRedmineを実行

自社のサブドメインでVirtualHostを設定。
とりあえずhttpd.confに記述

sudo vi /etc/httpd/conf/httpd.conf 
・・・
#
# Use name-based virtual hosting.
#
NameVirtualHost *:80 ←コメント外す
・・・

    ServerName xxxxx.co-meeting.com
    DocumentRoot /var/lib/redmine/public

EOF

おまけ

メール設定の確認

設定が有効になったかは、RedmineのAdministration画面で確認できます。
[Administratoin]、[Settings]、[Email notifications]タブを開きます。

有効になってなかったので、一応Apache 再起動してみたら表示できた。Passengerがキャッシュしてる?

このページの右下にある[Send a test email]のリンクをクリックするとテストメールを送信できます。

sudoにパスを引き継ぐ

以下のサイトを参考に、PATHの設定を追加してみました。
http://d.hatena.ne.jp/pirosikick/20110226/1298687877

$ sudo visudo

以下を追加

Defaults     env_keep+="PATH"

これは、EC2のインスタンスでは上手くいかなかった。

sudoersの復旧

また、一度visudo使わないで直接/etc/sudoersファイルを編集しようとしてchmodしたらsudoが実行できなくなった。

$ sudo chmod 777 /etc/sudoers

とかやると、以降以下のエラーが出てsudoが実行できなくなるものなのですね、知らなかった。

sudoers is mode 0777, should be 0440

rootのパスワードも変えてなかったのでどうしたもんかと。
しかし、こうなった場合でもEC2は以下のサイトに書いてある方法で復旧可能です。
http://www.vlent.nl/weblog/2010/09/06/locked-myself-out-root-account-ec2-ubuntu-instance/
つまりEBSを別のインスタンスにマウントしてchmodすると。
以下のように修復用インスタンスにEBSを二つセットします。

マウントする時のコマンドは以下のとおり。

$ mkdir /mnt/vol
$ sudo mount -w /dev/sda2 /mnt/vol
$ cd /mnt/vol
$ sudo chmod 440 sudoers

その他OSの設定など参考:
http://akabeko.sakura.ne.jp/blog/2010/09/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEvps-%E3%82%92%E4%BD%BF%E3%81%84%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B-2/