normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Trac Lightning on Windows Azure への道のり 〜その1〜

「その○」と銘打って続かないものが多々あって恐縮だが、無事 Windows AzureTrac Lightning を動かすことが出来たのでTIPSを共有させて頂く。永続化部分等で考慮するべき点は多いが、Windows Azure 上で動作させるにはどんな手順が必要かを記載する。

Trac Lightning とは

私のブログを見に来るような方には説明が不要だと思うが、 http://sourceforge.jp/projects/traclight/ で公開されており、 Trac, Subversion, Maven の簡易インストーラとサンプルプロジェクトを提供するナイスプロジェクトだ。Trac Lightning のインストーラはGUIが主体だが、オプションしだいではサイレントインストールも可能となっている。

Windows Azure で動作させるには

手順はさほど複雑ではなく、以下を実施すれば良い。

  • TracLightning のバイナリを入手し、BLOBストレージ上にパブリック権限で配置する
  • Windows Azure の Workerロールプロジェクトを作成し、スタートアップタスクでTracLightningをセットアップする

次に、実際の作業手順を記載する。

TracLightning のバイナリを入手し、BLOBストレージ上にパブリック権限で配置する

こちらの手順は非常に単純だ。 http://sourceforge.jp/projects/traclight/ サイトから TracLightning-X.X.X.exe をダウンロードし、Windows Azure 上のBLOBストレージに配置する(今回は https://myaccountname.blob.core.windows.net/trac/TracLightning.exe と名前を変更して配置)。

Windows Azure の Workerロールプロジェクトを作成する

Visual Studio 2010 から、Windows Azure のプロジェクトを作成する(プロジェクト名は WATracLightning とした)。Workerロールを一つ作成する。

TracLightning ダウンロード用のスクリプトを配置する

以前紹介した 2011年12月 Windows Azure の大幅更新 〜Java編〜 id:waritohutsu:20111231:1325300990 に含まれる download.vbs を利用することで、大容量ファイルをBLOBストレージから同期的に取得することが可能だ。今回はこちらを WorkerRole1\Assets\download.vbs に配置し、プロパティウィンドウから [出力ディレクトリにコピー]を[新しい場合はコピーする]に設定する。

80番のエンドポイントを設定する

外部からWorkerロールにアクセスするため、エンドポイントを指定する。Visual Studio のウィンドウから、以下を指定する。

名前 種類 プロトコル パブリックポート プライベートポート
Endpoint1 Input tcp 80 <指定無し>
スクリプトを作成し、Workerロールプロジェクトに配置する

以下のスクリプトを WorkerRole1\setuptrac.cmd として配置し、 [出力ディレクトリにコピー]を[新しい場合はコピーする]に設定する。

@echo off

if exist C:\TracLight\start.bat goto runtrac
"%~dp0Assets\download.vbs" https://myaccountname.blob.core.windows.net/trac/TracLightning.exe
"%~dp0TracLightning.exe" /VERYSILENT /LOG="mylog.txt"
goto end

:runtrac
start C:\TracLight\start.bat

:end
作成したスクリプトをStartup Taskで実行するように設定する

Windows Azure プロジェクト内の ServiceDefinition.csdef を以下のように修正する。

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="WATracLightning" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WorkerRole name="WorkerRole1" vmsize="Small">
    <Imports>
      <Import moduleName="Diagnostics" />
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
    <Runtime executionContext="elevated" />
    <Startup>
      <Task commandLine="setuptrac.cmd" executionContext="elevated" taskType="simple" />
    </Startup>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="tcp" port="80" />
    </Endpoints>
    <ConfigurationSettings>
      <Setting name="StorageConnectionString" />
    </ConfigurationSettings>
  </WorkerRole>
</ServiceDefinition>

以上の作業を行うことで、Windows Azure 上で Trac Lightning を動作させることが可能になる。

残課題として

Trac Lightning を Windows Azure 上で動作させることができたが、永続化に関しては何も対策をしていない状態になっている。少なくとも、以下のファイルを永続化しないと Trac Lightning を Windows Azure上で運用できないだろう。

  • アカウント情報
    • c:\TracLight\projects\svnauthz
    • c:\TracLight\projects\trac.htdigest
  • SVNリポジトリ
    • c:\TracLight\projects\svn
  • Trac プロジェクト
    • c:\TracLight\projects\trac 以下のプロジェクト

上記のうちで「trac-admin <プロジェクト名> resync」で解決できるものもあるが、対応を完全なものにするには検討が必要なものが残っている。