久しぶりの技術関係,かなり手間取ったので備忘録的メモ。
20181229 追記 実際のDeployについては,私のミスが多くうまく稼働しなかったようだ。改めて記事にしているので,そちらを参照いただきたい。
現在開発中のWebアプリはApache+TomcatからJettyへとコンテナを変更する予定である。
これまでJettyは未経験。実装するサーバがミニマムであることから,リソースを節約できる点を評価してJettyを選択した。Jettyのインストール自体はBinaryをDownloadして適当なディレクトリに配置するだけなので,割愛。
Webアプリの基礎ができた段階で,grails prod warでDeploy用warファイルを作ってtomcat7で稼働を確認していたが,jettyにデプロイする前に現状のwarをTomcat7で試すことにした。
まずはopenJDK8へバージョンアップ。これはJettyがopenJDK8だったため。これが問題の始まり。grailsにはopenJDK7を使っていたので,grailsもTomcat7もopenJDK8にしたことによって,開発環境とDeploy環境で大きさ差ができた。これによってtomcat7へのDeployでエラーがでるようになる。この部分については,Grailsのドキュメントで回避策が書いてあったので,対応を施す。具体的には,build.graidleを修正
これでtomcat7でのDeployができたので,次はJettyへ.しかし,Deployはうまくいったように見えるが,実際はWebアプリとしてではなく,単に静的コンテンツとして認識されているようである。最初に疑ったのは,Web.xml。grails3からはweb.xmlを作成しないようになったので,これが原因かと考えた。Jettyのドキュメントには,web.xmlは必須となっていたので,さらにこれが原因かと思えたが,よく考えればgrailsのドキュメントには,grailsから生成されるwarはほとんどのサーブレットコンテナでDeployできるとなってるのだから,そこを疑うのは間違っている。このあたりのカンが鈍ってしまうのは,現役リタイアなのでしかたがないかと思う。結局,原因は複数であった。
1)grails3.2.0ではwarの生成時にバグがあり,grails3.2.1へ更新する必要があった。
2)grails3.2.9へ更新したが(SDK),これだけではbuild.gradleは更新されないので,ダミーのプロジェクトを作って,そこからbuild.gradleをコピーして,必要部分を追記した
3)スタートアップ用の組み込みコンテナがtomcatだったので,これをjettyに変更した。(build.gradle)
//*** stop tomcat
//compile "org.springframework.boot:spring-boot-starter-tomcat"
//*** add jetty
compile "org.springframework.boot:spring-boot-starter-jetty"
4)logback.groovy実行用のjarが不足するので,build.gradleに追加
runtime 'org.codehaus.groovy:groovy-all:2.4.10'
これでどうにかDeployできた。1)まで行きつくのが早かったが,その先でこまった。2)については,てっきりGrailsの更新によって自動的にbuild.gradleも更新されるのかと思い込んでしまったのがいけなかった。jettyについてもメモ。実はjettyがいちばん曲者だった。
jettyそのものは,/usr/local/jettyに配置したが,ドキュメントでは,jetty稼働は別のディレクトリで行えとなっている。そのために,jetty_homeを設定するようだ。で,実際にjetty.homeを設定してユーザーディレクトリから起動したのだが,Webアプリを認識しない。/usr/local/jetty/bin/jetty.shを/etc/init.d/jettyにコピーしてこれを実行するとダメ,しかし,/usr/local/jetty/bin/jetty.shで起動するとちゃんとWebアプリを認識する。これがよくわからない。現在も調査中。設定ファイルは.jettyrcとして起動するユーザーのホームディレクトリに配置して,ちゃんと環境変数等も設定できているので,問題ないと思われる。配布バイナリにはいっているstart.iniもちゃんと実行環境にコピーしているが,なぜか/usr/init.d/jettyではうまくWebアプリを認識できない。ここの部分の切り分けができずに,grailsに原因を求めたことから,無駄に遠回りした。
久しぶりに開発関係の作業だった。うまくいかずにかなり四苦八苦したが,終わってみればやはり楽しかったと思い返す。もう少し,まとまった時間がとれるとよいのだが。
本業の都合もあり,なかなか進捗しないのが悩みの種である。