mono Webサービスホストの構築
インストールするもの
- openSUSE 12.1
- Apache 2.2.21
- mono 2.10.6
- mod_mono
データベースホストと同様にOpenSUSEをインストールします。
ここでは、TextモードではなくGUI付きでインストールします。
インストールソフトウェアの設定では必要のない
- マルチメディア
- オフィスソフトウェア
- グラフィックス
- ゲーム
は除外しておきます。
インストール後、ひとまず「NAT」と「ホストオンリーネットワーク」にDHCP、「内部ネットワーク」に固定IPを設定します.
[アプリケーション] - [システムツール] - [YaST] - [ネットワーク設定]
また、[YaST] - [オンライン更新]
でシステムを更新しておきます.
さらに、VirtualBoxアドオンをインストールするために
[YaST] - [ソフトウェア管理]から、
- gcc
- make
- kernel-desktop-devel
を検索、インストールします.
インストール後、VirtualBoxの「Guest Additions」をメニューのデバイスから選択し、VBoxLinuxAddtions.runを実行します.
ここで、一旦再起動しておきます.
再起動後、VirtualBoxの共有フォルダがマウントできる確認します.
$ su
# mkdir /mnt/hostfs
# mount -t vboxsf [共有フォルダ名] /mnt/hostfs
# ls /mnt/hostfs
起動時に自動でマウントしたい場合は/etc/fstabに追加しておいてください.
続いて、YaSTよりApacheをインストールします.
2.2.21の最新版が見つかったので、このままインストールします.
ホストオンリーネットワークNICのファイヤーウォールのhttpサービスを開放し、Apache2サービスを起動します.
# service apache2 start
さらに、起動時に自動でサービスを立ち上げるために
# chkconfig --level 2345 apache2 on
# chkconfig --list apache2
と設定しておき、ホストOSからアクセスできることを確認します.
次は、monoです.検索結果は2.10.6でした.最新ではありませんが、このままインストールします. YaST上からmonoで検索し
- mono_complete
- apache2-mod_mono
- monodevelop(オプション)
を選択、インストールします.
ここまでで、ひとまずサンプルが動くことを確認します.
Windows上のVS2010で簡単なFluent NHibernateサンプルをコマンドラインアプリケーションで作成し、先にインストールしたデータベースホストへ正常に読み書きできていることを確認します.サンプルはこの辺を参照.
(あー、表示されているデータは適当です.あしからず)
つぎに、データベースの接続先を内部ネットワーク経由で接続するように変更し、リビルドしておきます.
このVS2010のRelease出力フォルダを丸ごと共有フォルダ経由でOpenSUSEへコピーします.
OpenSUSE側ではexeをmonoコマンドで起動します.
$ mono ./FlientNHibernateSample.exe
おっ、同じ結果が返ってきました.
ひとまずはOKです.
最後にmod_monoの設定をします.
YaSTでインストールされると、
/etc/apache2/conf.d/mod_mono.conf
が生成されているので、サーバーパスを設定します.
これで、ホスティングアプリが.Net4.0ベースであることもを指定します.
<IfModule !mod_mono.c>
LoadModule mono_module /usr/lib(64)/apache2/mod_mono.so
</IfModule>
<IfModule mod_headers.c>
Header set X-Powered-By "Mono"
</IfModule>
# 以下2行を追加
MonoServerPath /usr/bin/mod-mono-server4
MonoSetEnv LANG=ja_JP.UTF-8
AddType application/x-asp-net .aspx
さらに、
/etc/apache2/httpd.conf
に下記を追加します.
(注意:追加しなくても動くみたいです.)
Include /etc/apache2/conf.d/mod_mono.conf
ここで、Apacheを再起動します.
# service apache2 restart
これで、mod_monoの設定は完了です.
最後に、簡単なサンプルを動かしてみます.
デフォルトのドキュメントルートは
/srv/www/htdocs
なので、そこにテスト用ディレクトリを作成します.
# mkdir -p /srv/www/htdocs/mono/test
# chmod 777 /srv/www/htdocs/mono/test
そこに、VS2010で作成したWebアプリケーションサンプルを発行したものを丸ごとコピーします.
ここで、一点注意することがあります.
「Site.Master」というファイルがありますが、コード内では
<%@ Page Title="ホーム ページ" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplicationSample01._Default" %>
と、設定されておりWindowsでは動作するのですが、Linux上では大文字と小文字が厳格に区別されるために、「ファイルが無い」とエラーを吐きます.
コード内の拡張子を修正するか、.Masterファイル名拡張子を.mastarに変更するかで統一しておいてください.
ホストPCからアクセスすると、レイアウトは少し崩れますが同じ内容で表示されます.
最後に、NHibernateを使ってPostgreSQLデータベースからデータを取得し、WebサービスとしてSOAPレスポンスを返すサンプルアプリケーションを作成します.