SnipSnap は、Java で書かれた blog + wiki エンジン。データの保存先は、デフォルトではファイルなんだけど、JDBC 対応の DB に入れることもできる。というわけで、MySQL 5.0.15 を使ってみた。
前提
めんどくさいので、以下はインストール済みだってことにする。
手順
- MySQL Administrator を起動し、スキーマとユーザだけ作っておく。ユーザに権限をすべて追加しておく。
- Tomcat の webapps に snipsnap.war を置く。
- snipsnap.war を展開して、WEB-INF/lib に、Connector/J の jar ファイルを置く。
- Tomcat 起動する。
- ログにキーコードが出力されるので、http://localhost:8080/snipsnap?key=キーコード をブラウザで開く。
- 最初のページで、データの保存先を聞かれるので、[File Storage] に "MySQL Database Server" を選択 (ちょー手抜きの時の設定例は以下の通り)。
残りのセットアップは、通常と同じ。
- JDBC URL
- jdbc:mysql://127.0.0.1/snipsnap
- Database Driver
- com.mysql.jdbc.Driver
- Database User
- snipsnap
- Database Password
- snipsnap
[2005-10-28 追記] 初回の設定が終わって "Start SnipSnap" ボタンを押すと、SnipSnap のトップページ (http://localhost:8080/snipsnap/space/start) が表示される。ここで一度、Tomcat を再起動するのがお勧め。理由は下記を参照。
MySQL Administrator でやること、もうちょっとくわしく
- 左上のリストで [Catalogs] を選び、左下を右クリックして [Create New Schema] を選択。名前を聞かれるので、snipsnap とか適当につける。
- 左上のリストで [User Administration] を選び、左下を右クリックして [Add new User] を選択。右半分が入力できるようになるので、[MySQL User] にユーザ名 (snipsnap とか)、[Password] にパスワードを入れる。続けて [Schema Privileges] に移動し、先ほど作った snipsnip スキーマを選択。[<<] ボタンを押すと、snipsnap スキーマに対する権限がすべて追加されるので、右下の [Apply Changes] を押す。
Tomcat でやること、もうちょっとくわしく
次は Tomcat の側。webapps の下に snipsnap.war を置けばいいのだけど、展開されるディレクトリのうち WEB-INF/lib に Connector/J の jar ファイルを置く必要がある。これは好きな方法でいい。war の中に jar を足してから webapps の下に置くとか、Tomcat を一旦起動してから停止し、展開された webapps/snipsnap/WEB-INF/lib に jar ファイルを置いてもいい。
Tomcat を起動した後は、SnipSnap の通常のセットアップと同じで、ログに出力されたキーコードを使ってセットアップ用ページに接続する。
最初の "Database" という画面に [File Storage] という項目があるが、Connector/J がちゃんと置けていると、選択肢に "MySQL Database Server" が追加される。当然これを選択。すると、設定項目の入力欄が表示されるので、それぞれ入力する。
データの移行
File Storage から MySQL に移行する場合は、以上の手順を行う前に、
- 管理者でログイン
- 設定画面を開き、Export Database でデータを 1 つの XML ファイルに吐き出す
ということをしておく。で、今まで使っていた webapps/snipsnap は一旦退避して、新しくセットアップしなおせばいい。たぶん。
[2005-10-28 追記] 初回起動直後に設定画面を開くとバグるみたいなので、インポートする前に Tomcat を再起動するのがお勧め。理由は下記を参照。
参考
今回はこの記事を参考にした。
- SnipSnap - SnipSnap on MySQL
- http://snipsnap.org/space/SnipSnap+on+MySQL
記事中には jdbcpool.jar が必要だと書かれているが、今回は必要なかった。