Mono 2.8上でSmart.Web.Mobileを使ってみる
最近、ちまちまとMonoを試していたのでメモ。
Monoも、Linux上でyumやapt-get一発で最新版がインストールされるようになると、もう少し弄ってみる気になるんですが(・ω・)
手動インストールも一つや二つなら良いんですが、依存関係が多くなってくると面倒で(´・ω・`)
…などと思いつつWebをブラブラしていたら、インストール用のスクリプト*1を作っている人が居たので、MonoでASP.NET 4.0する環境を自分も作ってみました。
元情報はこちら。
Setting up Mono 2.8 with Asp.Net 4.0 and MVC2 on Ubuntu with MySql Membership
スクリプトはUbuntu用とFedora用があるみたいですが、今回はUbuntuで試してみました。*2
Ubuntu
まずはUbuntuの用意から(・ω・)
自分はVMwareを使ってVM上に環境を構築。
Ubuntu Server 10.04をダウンロードしてきてインストール。
以下、Ubuntu Serverのインストールについてざっくりと(・ω・)
- VMはUbuntu Linux (64-bit)で作成
- インストール開始、Languageは日本語
- キーボードは適当なのを選択、なんとなくMicrosoft Natural Wireless Ergonomic Keyboard 7000とかで、レイアウトはJapanで
- ネットワークはDHCPで入れて後で固定に変更
- パーティションとかはデフォルトでディスクに書き込み
- ユーザー名、パスワードを入れて、ホームディレクトリの暗号化はしない
- プロキシを入力、自動アップデートは無しで、ソフトウエアの選択ではOpenSSH serverのみを選択しておく
- ブートローダーはデフォルト
これでインストールは完了(・ω・)
ついで初期設定。
とりあえずIPアドレスを固定に変更。
sudo vi /etc/network/interfaces
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address x.x.x.x
netmask x.x.x.x
gateway x.x.x.x
sudo /etc/init.d/networking restart
ついでソフトウエアを最新版に更新。
sudo apt-get update sudo apt-get upgrade
Mono
wget --no-check-certificate https://github.com/nathanb/iws-snippets/raw/master/mono-install-scripts/ubuntu/install_mono-2.8.sh chmod +x install_mono-2.8.sh ./install_mono-2.8.sh
コンパイルに時間がかかるのでしばらくおやつタイム(・∀・)
コンパイルが終わったら、/etc/environmentにパスを追加。
sudo vi /etc/environment
PATH="/opt/mono-2.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
GUI周りをインストールするとMono 2.4が入るようですが、自分で入れた2.8を優先するように設定。
っで、設定を反映させた後で実行結果の確認。
machi@vm-mono-ubuntu:/srv/www$ mono -V Mono JIT compiler version 2.8 (tarball 2010年 12月 1日 水曜日 18:19:26 JST) Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com TLS: __thread SIGSEGV: altstack Notifications: epoll Architecture: amd64 Disabled: none Misc: debugger softdebug LLVM: supported, not enabled. GC: Included Boehm (with typed GC and Parallel Mark)
MonoのインストールまではこれでOK。
後はApacheでmod_monoを有効にするための設定を。
cd /etc/apache2 sudo mv mod_mono.conf mods-avail* sudo ln -s /etc/apache2/mods-available/mod_mono.conf /etc/apache2/mods-enabled/mono.conf sudo service apache2 restart
Ubuntuだと設定ファイルが細かく管理されてんのね(・ω・)
Webアプリ
次にアプリケーションの設定を。
今回はSmart.Web.Mobileのサンプルと、それとは別に新規作成したWebアプリケーションの2つを、別アプリケーションプールに配置するような設定にしてみます(・ω・)
Smart.Web.Mobileのサンプルと、新規に作成したWebアプリケーションをそれぞれVisual Studio 2010でビルドしておきます。
っで、サーバ上の設定については、/srv/wwwディレクトリ下を各アプリ用の仮想ディレクトリとして使用する事にします。
まずはディレクトリを用意して。
sudo mkdir /srv/www
次に、この下にビルドしたアプリケーションを配置します。
今回はSmart.Web.Mobileのサンプルをmobileディレクトリに、新規に作成したWebアプリケーションをsampleディレクトリに配置します。
っで、配置が終わったら権限をば設定。
sudo chown root:www-data /srv/www -R sudo chmod 775 /srv/www -R
こんな状態になっていればよかとですたい(・ω・)
machi@vm-mono-ubuntu:/srv/www$ ls -al 合計 24 drwxr-xr-x 6 root www-data 4096 2010-12-02 18:57 . drwxr-xr-x 4 root root 4096 2010-12-02 18:24 .. drwxr-xr-x 16 root www-data 4096 2010-12-02 17:03 mobile drwxr-xr-x 11 root www-data 4096 2010-12-02 18:56 sample machi@vm-mono-ubuntu:/srv/www$ ls -al mobile/ 合計 92 drwxr-xr-x 16 root www-data 4096 2010-12-02 14:03 . drwxr-xr-x 6 root www-data 4096 2010-12-02 13:57 .. drwxr-xr-x 2 root www-data 4096 2010-12-02 18:49 App_Browsers drwxr-xr-x 3 root www-data 4096 2010-12-02 18:49 App_Data drwxr-xr-x 2 root www-data 4096 2010-12-02 18:49 Content ...
そして仮想ディレクトリの設定を行います。
sudo vi /etc/apache2/sites-available/mono.conf
内容についてはこんな感じで。
Alias /mobile/ "/srv/www/mobile" Alias /sample/ "/srv/www/sample" #Alias /sample2/ "/srv/www/sample2" AddMonoApplications mobile "/mobile:/srv/www/mobile" AddMonoApplications sample "/sample:/srv/www/sample" AddMonoApplications sample "/sample:/srv/www/sample2" MonoServerPath mobile "/opt/mono-2.8/bin/mod-mono-server4" #MonoDebug mobile true MonoSetEnv mobile MONO_IOMAP=all MonoServerPath sample "/opt/mono-2.8/bin/mod-mono-server4" #MonoDebug sample true MonoSetEnv sample MONO_IOMAP=all <Location "/mobile"> MonoSetServerAlias mobile SetHandler mono </Location> <Location "/sample"> MonoSetServerAlias sample SetHandler mono </Location> #<Location "/sample2"> # MonoSetServerAlias sample # SetHandler mono #</Location>
mobileとsampleの2つのアプリケーションプールを作って、Smart.Web.Mobileのサンプルと新規作成したサンプルをそれぞれに設定する感じ(・ω・)
っで、sites-enabledの方にもリンクを張って再起動。
sudo ln -s /etc/apache2/sites-available/mono.conf /etc/apache2/sites-enabled/000-mono.conf sudo service apache2 restart
これで、http://server/mobile/にアクセスするとSmart.Web.Mobileのサンプルが、http://server/sample/にアクセスすると新規作成したサンプルにアクセスできることが確認できます(・∀・)
プロセスもこんな感じでMonoが動いている事を確認できます。
machi@vm-mono-ubuntu:~$ ps -aux | grep mono www-data 1242 0.5 5.3 197356 55008 ? Ssl 19:39 0:02 /opt/mono-2.8/bin/mono **debug /opt/mono-2.8/lib/mono/4.0/mod-mono-server4.exe **filename /tmp/mod_mono_server_mobile **applications /mobile:/srv/www/mobile **nonstop www-data 1244 0.3 3.2 173100 33268 ? Ssl 19:39 0:01 /opt/mono-2.8/bin/mono **debug /opt/mono-2.8/lib/mono/4.0/mod-mono-server4.exe **filename /tmp/mod_mono_server_sample **applications /sample:/srv/www/sample **nonstop
まとめ
っで、これでLinuxサーバ上でMonoを使い、Smart.Web.Mobileを使ってガラケー向けサイトも作れるようになった(?)わけですが…。
ぶっちゃけ、公開サービスで.NETしたかったら、実際にはクラウドなりなんなり使えば良いと思うので、こんなことしないと思うんだけどね(・∀・;)
むしろ、イントラとかでLinux上に載らなければいけないケースで、でもWebアプリは.NETで作りたいな〜なんて時にはありかもしれない(`・ω・´)
色々動かしてみた感じ、思った以上に問題なく動く感じだし(・∀・)
今回はMonoDevelopは入れていないので、Visual Studio 2010上でビルドしたものをそのままサーバにコピーして実行しましたが。
出来れば、サーバ上で自動ビルド、自動テスト、自動デプロイまでの環境を構築したいところですね(・∀・)