blog.hoorago.com HOORA© 2008-2010 All Rights Reserved. Feb 06 . 2012 - Monday
HOORA Album
HOORA entry
コメントなんかいただければ感謝です!

04.07.2009

Mac miniサーバでいいんじゃね?

カテゴリ:Engineering

Tags:

OLYMPUS DIGITAL CAMERA

Hooraエンジニアリング部の平野です。

今回は、Hooraで使用しているサーバ環境の大部分をMac miniサーバに移すことになったので、その時の作業を書いていきます。

まずサーバの用途ですが、Hooraでは、メールやカレンダーなどは最高にクールなGoogle Appsを使用してるので、ほとんどの場合、

  1. ソースのリポジトリをおくSVN
  2. チームのタスク管理を行うredmine
  3. このブログであるwordpress
  4. アプリを動かす実験場

という4項目に集約されます。

これまでは、Slicehostの激安256MBスライス=月間2000円程度でVPSをレンタルしていました。
Slicehostは非常に使い勝手がよく、開発者としては1スライスくらい持っておいてもけして損はないと思われます。

しかし、さすがにメモリ256MBで上の4用途を全部こなすとなるとかなり重たいです。

特に、redmineはRuby on Rails製で、チーム3人で同時期にアクセスするとあっという間にメモリ使用量が100%に達して、ひどいフリーズ状態に陥っていました。
Railsは作るときは楽で楽しくてよいですが、運用面まで含めると少し大変です…

そこで、Slicehostで満足いくメモリ+ストレージを確保しようと思ったのですが、

2009-04-07_0946

がーん。

$130は、1万ウン千円で、これが12回で一年だといくら?と、両手の指を折りながら数えて足りないくらいコストがかかることがわかりました。

そこで、ついに、こんな出費をするくらいなら自前でサーバを作る!ということになり、晴れてMac miniをサーバ化して運用していくことになりました。

ちなみに、Hooraの考える、Mac miniのメリットは、

小さくてかわいい

ことに尽きますな。

さて、今回は、mac miniの開封から、各種のモジュールを取りそろえて、今まで稼働させてきたredmineをmac mini上へ移設するところまでの作業を長々と書いていきます。

redmineをレンタルサーバで使って苦労しているサーバ管理者のみなさまの役に立ちますように。

1. OS初期設定

自宅にある古いIOデータのディスプレイにつないで、USBマウスとキーボードをさせば、電源オン!MobileMeなど、サーバ用途にそぐわないものは無視してさっくりと設定を終えます。

2. ソフトウェアアップデート

700MBほどダウンロード&インストール。20-30分待つ。

3. 基本的な設定

Mac miniをサーバとして使うことばかりを考えているhttp://www.macminiserver.com/ というありがたいサイトの中に、「どうやって設定すればおK?(原文英語)」という記事があります。
ここには、サーバとしてMac OSXを使うためのTipsがひとつの文書としてまとめられたPDFがあります。
まずは、これに従って、スクリーンセーバはオフであるとか、省電力もしないといった設定を行います。

4. 共有の設定

画面共有(VNC)、SSH、FTPくらいはONにしておきました。
あと、ファイアーウォールの設定で、一番下の「特定のサービスおよびアプリケーションにアクセスを設定」を選択しておいてください。

Web(Apache2)は、MacPortsを使用することにしたいので、ここではOFFにしておいてください。

5. UNIX環境をえるために

2009-04-07_1006

MacPortsというパッケージ管理システムを導入します。Debianのapt-get、Fedora・CentOSのyumのようなものです。

MacPortsのインストールには、XCodeが必須とのことなので、Mac miniの箱に同梱されていたインストールディスクCD2を取り出して、インストールしておきましょう。終われば、MacPortsのインストールです。(Leopard以前のOSの場合、X11環境を別にインストールする必要があるようです)

[注意]
インストールディスクからXCodeをインストールすると、3.0系が入る場合があります。その場合には、Apple Developer Connectionから、最新版である3.1系をインストールするようにしてください。
かまわずに作業を進めた僕は、あとで、portsを使ってtiffパッケージをビルドするときに、

On Mac OS X 10.5, tiff 3.8.2 requires Xcode 3.1 or later but you have Xcode 3.0.

と言われてしまい、非常に悲しい思いをしました。

6. Apache2 MySQL・phpMyAdmin

image

Apacheは、デフォルトでもMacOSXにインストールされていますが、バージョンの変更などが容易である、最新のパッチが当たっている点などで、MacPorts版を利用することにしました。

image image image

DBMSには、redmineが公式に推奨するMySQLを使用しましょう。
また、MySQLをwebから管理するための定番ツール「phpMyAdmin」も入れておきます。

インストールには、さきほど入れたばかりのMacPortsを早速活用します(繰り返しになりますが、Xcodeは3.1.0以上であることを確認しておいてください)。

具体的な手順は、こちらのページを参照して、apache2, mysql5, php5, phpmyadminをインストールします。

## Apache2
% sudo port install apache2
% sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist

## MySQL(Server)
% sudo port install mysql+server
% sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist
% sudo -u mysql mysql_install_db5
% sudo chown -R mysql:mysql /opt/local/var/db/mysql5/
% sudo chown -R mysql:mysql /opt/local/var/run/mysql5/
% sudo chown -R mysql:mysql /opt/local/var/log/mysql5/
(デーモンを起動する)
% sudo /opt/local/bin/mysqld_safe5 &
(rootのパスワードを設定する)
% mysqladmin5 -u root -p password <new-password> Enter Password: <ENTER>

## PHP5
% sudo port install php5 +apache2 +mysql5
(ApacheのPHPモジュールを有効にする)
% cd /opt/local/apache2/modules
% sudo /opt/local/apache2/bin/apxs -a -e -n “php5″ libphp5.so
(httpd.confにmod_php.confを含める)
% sudo nano /opt/local/apache2/conf/httpd.conf

#
# Include PHP configurations
#
Include conf/extras-conf/mod_php.conf

(PHP設定ファイルには、recommended版を使用する)
% cd /opt/local/etc
% sudo cp php.ini-recommended php.ini
(Apacheの再起動)
% sudo /opt/local/apache2/bin/apachectl -k restart

## phpMyAdmin
% sudo port install phpmyadmin
(設定ファイルを用意してInclude)

7. Redmineを動かすために

2009-04-07_1809

redmineのバージョンは、2009年4月5日リリースしたての0.8.3を使用することにします。インストール先には、”/usr/local”ディレクトリを使用します。

また、redmine0.8.3を動かすためには、インストールマニュアルによると、ruby1.8.6または1.8.7、rails2.2.2が必要とのことです。

% which ruby
/usr/bin/ruby
% ruby –v
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
% rails –v
Rails 1.2.6
% sudo gem install rails -v=2.2.2
(Railsのアップグレードを行う)
% rails –v
Rails 2.2.2
(Ruby MySQLバインディングを入れる)
% sudo gem install mysql — \
–with-mysql-dir=/opt/local/ \
–with-mysql-include=/opt/local/include/mysql5/ \
–with-mysql-lib=/opt/local/lib/mysql5/ \
–with-mysql-config=/opt/local/lib/mysql5/bin/mysql_config
(RMagickを入れる : こちらを参照)
% sudo port install imagemagick +q8 +gs +wmf
(参照ページではtiffを含めていますが、すでにインストール済みなので省いた)
… ここで大量のパッケージがインストールされる。
% sudo gem install rmagick

8. 以前のデータ・ファイルをエクスポート

% mysqldump –u <USER> –p <TABLENAME> > dump.sql
% tar czvf files.tar.gz /var/redmine/files/*.*

9. Redmine/passengerのインストール・設定

ようやく、Redmineのインストールを行える準備が整いました。
ここからは、Redmineそのものの設定、そして、Apache上でRoRアプリを快適に動かすためのモジュールpassengerの設定を行います。

まずは、Redmineのダウンロード、そして、展開。

% sudo port install wget
% cd ~/Download
% wget http://rubyforge.org/frs/download.php/54503/redmine-0.8.3.tar.gz
% tar xzvf redmine-0.8.3.tar.gz
% sudo mv redmine-0.8.3 /usr/local/
% sudo ln –s /usr/local/redmine-0.8.3 /usr/local/redmine
(パーミションの設定など)
% sudo chown -R redmine:redmine files log tmp public/plugin_assets
% sudo chmod -R 755 files log tmp public/plugin_assets

データベース設定をdatabase.ymlに書く。このとき、socketの設定も忘れずに書いておくこと!

production:
user: …
socket: /opt/local/var/run/mysql5/mysqld.sock

データのインポート

% tar xzvf files.tar.gz –C /usr/local/redmine/files
% mysql –u redmine –p redmine < original_redmine.sql

[4月13日追記]

0.8.3版ではデータベースのスキーマ定義に変更が加えられているため、このままインポートしただけでは、SVNリポジトリの閲覧など一部の機能がうまく動作しません。rakeで、dbの構成を最新にしておく必要があります。

% sudo rake db:migrate RAILS_ENV=”production”

gmail-logo1

Gmailからメールを送信するように設定

% nano config/email.conf
# Outgoing email settings
production:
delivery_method: :smtp
smtp_settings:
address: smtp.gmail.com
port: 587
domain: “hoorago.com”
authentication: :login
user_name: “redmine@hoorago.com”
password: “*******”

(TLSに対応させる)
% sudo gem install tlsmail
% sudo nano config/environment.rb
# 末尾に、
require “tlsmail”
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
# を追加した

試しに起動する

% sudo ruby script/server webrick –e production

http://localhost:3000/ にアクセスして問題がなければ、passengerを導入する。

Passsenger

% gem –v
1.0.1
(gem本体のアップデートを行わないと、passengerのど導入ができない)
% sudo gem update –system
% sugo gem install passenger
(MacPorts版のApacheを環境変数で設定)
% export APXS2=/opt/local/apache2/bin/apxs
% export PATH=/opt/local/apache2/bin:$PATH
% sudo passenger-install-apache2-module

そして、httpd.confに、

LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-2.1.3/ext/apache2/mod_passenger.so
PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-2.1.3
PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby

を加える。

さらに、VirtualHostのDocumentRootにredmineのpublicフォルダを指定して、Directoryへのアクセスを許可する設定ファイルを書いて、

NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin admin@redmineexample.com
ServerName your.redmineexample.com
DocumentRoot /usr/local/redmine/public
<Directory “/usr/local/redmine/public”>
OPtions FollowSymLinks
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

という内容で、conf/extra/httpd-redmine.confとして、保存する。

最後に、もう一度、httpd.confを開いて、末尾に、

Include conf/extra/httpd-redmine.conf

を記述する。Apache2を再起動したら、完了です。

2009-04-07_1749

無事、動いています。

びっくりするくらいに、きびきびしています。redmineがこんなにできる子だとは知りませんでした!

興奮している場合ではない、チケット溜まってますよ! >自分

では、おつかれさまでした。



HOORA credit
和室ハッカソン、時間の流れがわからなくてよかった(Dさん、おそくまでおつきあいありがとう)
HOORA x2
HOORA trackback



HOORA comments
たくさんのコメントお待ちしております

[...] 前のエントリで、Mac miniは場所もとらないし、かわいいすてきなやつだということを強調させていただきました。 [...]

Pingback by tomoya on April 27, 2009 at 11:59 pm