infoScoopをStaxで動かしてみた

StaxというJava環境のPaaSがあります。
無料でクラウド環境でJavaアプリを動かすことができます。
ただ、まだベータなので無料なだけで、いつ有料になるともしれません。


Javaが使えるPaaSはGoogle App Engine(GAE)が有名ですが、GAEとの大きな違いはDBがMySQLということです。
なので、あまり修正をせずに既存のソフトウェアを動かすことができそうです。


infoScoopも動きそうなので、動かしてみました。


http://infoscoop.a-kimura.staxapps.net/


動きました。
test/testでログインできます。


以下、どうやって動かしたかを説明します。


infoScoopにそんなに特化していない内容なので、Javaアプリをクラウド環境で動かしたい人、JavaアプリをStaxで動かしたい人にも参考になると思います。

Staxのアカウントを取得する

Staxのトップページの「Apply for Beta」ボタンをクリック。
サインアップ画面が表示されるので、メールアドレスを入力して、「Sign Up」。
すぐメールが来ます。メールに書いてあるURLにアクセスすると、アカウント作成完了。

SDKをダウンロード

Staxのトップページの右上の「Sign in」リンクからログインするとWeb Consoleに入れます。
Web Consoleのトップページの「Getting Started」に書いてある通り、Stax SDKをダウンロードします。
解凍してどこかに置いておけばいいです。

空のアプリケーションを作ります

Web Consoleの左上の「Create App」ボタンをクリック。

  • Application name:infoscoop
  • Application core runtime:Basic Servlet and JSP

と入力して「Finish」

空のデータベースを作ります

Web Consoleの左上の「Create DB」ボタンをクリック。

  • Database name:iscoop
  • Username:iscoop
  • Password:XXXXX

と入力して「Finish」

こうすると、データソース名が「jdbc/iscoop」になります。*1

infoScoopをダウンロード

infoScoop OpenSource 2.0.1をダウンロードします。

  • infoscoop/infoscoop.war
  • tools/initdb

をこの後使います。

テーブルの作成

驚いたことに3306ポートが空いているので、テーブルの作成などはローカルPCからmysqlコマンドでやります。*2
以下のコマンドでinfoScoopのテーブルを作成します。
ホスト名はWeb Consoleでデータベースを選択すると「Remote Connections」に記載されています。

mysql -hXXXXXX.YYYYYY.amazonaws.com -uiscoop -pXXXXX iscoop < initdb\schema\mysql\mysqlinit.sql

初期データ投入

initdb/bin/datasource.xmlを修正
Web Consoleでデータベースを選択すると「Remote Connections」に記載されているホスト名、ユーザ名、パスワードに修正

cd initdb
import.bat

と思ったが、全然終わらないので断念。

ローカルで作ったMySQLダンプからリストアします

localのMySQLに作成した初期データをdumpして、突っ込む。

mysql -hXXXXXX.YYYYYY.amazonaws.com -uiscoop -pXXXXX < iscoop.sql

「テーブルの作成」と「初期データ投入」の手順はローカルでやってください。

infoscoop.warにStax用の設定をする

infoscoop.warを解凍します。

mkdir war
cd war
jar xvf ..\infoscoop.war

WEB-INF/stax-web.xml作成

<?xml version="1.0"?>
<stax-web-app xmlns="http://www.stax.net/xml/webapp/1">
  <appid>a-kimura/infoscoop</appid>
  <resource name="jdbc/iscoop" auth="Container" type="javax.sql.DataSource">
   <param name="username" value="iscoop" />
   <param name="password" value="XXXXX" />
   <param name="url" value="jdbc:stax://iscoop" />
  </resource>
</stax-web-app>

appidは「アカウント名/アプリケーション名」
resourceはいわゆるデータソースの設定。jdbc/infoscoopにしておけば、以下の修正が必要ないんだろうが、書いてある通りにデータベース名と同じにしておいた。
stax-web.xmlについて詳しくはこちら

WEB-INF/web.xml
WEB-INF/classes/datasource.xml

のデータソース名を「jdbc/iscoop」に修正

infoscoop.war再作成

jar cvf ..\infoscoop.war *

デプロイ

ずいぶん前にダウンロードしたStax SDKをここで使います。
Stax SDKを解凍した直下にある「Stax Console」をクリックして、Stax Consoleを起動。ここでstaxコマンドが実行できます。

stax app:deploy -a a-kimura/infoscoop infoscoop.war

ずいぶんと時間がかかるが、そのうちデプロイが終わる。10分くらい?

ここまでは、おそらくinfoScoopにそんなに特化していない内容。

いろいろ動かないのでinfoScoopの設定変更

infoScoop管理画面で以下の設定を変更

「プロキシ設定」で以下のパターンを追加。*3

「初期画面設定」-「コマンドバー」-「ランキング」のURLを変更

他にもちょこっと直しているが、それは割愛。

感想

簡単に動きました。
infoScoop Calendarもそのうち動かしてみますかね。
「Deploy to servers on your EC2 account」とかいう機能があったりするから、そのうち便利に使えそうな気がする。最初はStaxで無料で動かして、アクセスが増えたら、EC2とか?でも、今はベータだから使えませんって言われる。

*1:失敗しました。データベース名をinfoscoopにしておけば、この後の修正が少なく済んだのに

*2:ローカルPCにMySQLはインストールしておいてください。

*3:localhost:80がどうもアクセスできないようなので、無理矢理置換