■目次
Spring Framework開発環境インストールプロジェクトの作成プログラムの作成プログラムのパッケージ化についてJARファイルの作成Vagrantでアプリケーション(JAR)を起動EC2でアプリケーション(JAR)を起動Elastic Beanstalk でアプリケーション(JAR)を起動WARファイルの作成Vagrantでアプリケーション(WAR)を起動EC2でアプリケーション(WAR)を起動Elastic Beanstalk でアプリケーション(WAR)を起動コマンドでjarファイルとwarファイルを作成その他参考になりそうなページ
■Spring Framework
Javaのアプリケーションフレームワーク 任意のJavaアプリケーション作成に使えるが、 Webベースのアプリケーションを構築するための機能が豊富に用意されている Spring Framework - Wikipedia https://ja.wikipedia.org/wiki/Spring_Framework 多様化するJavaのフレームワーク問題を解決する、「Spring Boot」とは? (1/3):CodeZine(コードジン) https://codezine.jp/article/detail/11310
■開発環境インストール
Spring Tools 4 http://spring.io/tools SpringBootに入門する為の助走本(随時更新) - Qiita https://qiita.com/sugaryo/items/5695bfcc21365f429767 ■JDKインストール Java環境構築(Windows版) JDKインストール | ITエンジニア"が作るメディア Tech Fun Magazine https://techfun.cc/java/windows-jdk-install.html Java環境構築(Windows版) パスの設定 | ITエンジニア"が作るメディア Tech Fun Magazine https://techfun.cc/java/windows-jdk-pathset.html コマンドプロンプトで以下のように表示できれば成功 >java -version java version "14.0.1" 2020-04-14 Java(TM) SE Runtime Environment (build 14.0.1+7) Java HotSpot(TM) 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing) ■Mavenインストール WindowsにSpring Tool Suiteを導入する - Qiita https://qiita.com/segur/items/4cd283d9763a1953f336 C:\apache-maven-3.6.3 に配置 ■Spring Toolsインストール 【第一回】Spring Frameworkを使ってみる 〜Spring Framework概要と準備〜 | TECH Projin https://tech.pjin.jp/blog/2016/04/28/springframework1/ 上記ページの解説で触れられている Spring Tools 4 for Eclipse を試してみる Download STS4 (for Windows 64-bit) をダウンロード ※2020年5月16日現在、多くの解説にあるようにzipファイルはダウンロードできない 代わりにjarファイルをダウンロードできるようになっている JDKをインストール済みなら、ファイルを実行すれば解答できる C:\sts4 に配置 C:\sts4\SpringToolSuite4.exe を実行して起動 Select a directory as workspace C:\Users\refirio\sts4 に設定して「Launch」 日本語化のため、いったん終了させる ■日本語化 WindowsにSpring Tool Suiteを導入する - Qiita https://qiita.com/segur/items/4cd283d9763a1953f336 setup.exe を実行 C:\sts4\SpringToolSuite4.exe を選択して「日本語化する」ボタンを押す SpringToolSuite4.exe を実行して起動。日本語化されていることを確認する
■プロジェクトの作成
【第二回】Spring Frameworkを使ってみる 〜プロジェクト作成からビルドまで〜 | TECH Projin https://tech.pjin.jp/blog/2016/04/28/springframework2/ 「Spring Legacy Project」が見当たらない 色々変更されているようなので以下を参考に進める SpringBootに入門する為の助走本(随時更新) - Qiita https://qiita.com/sugaryo/items/5695bfcc21365f429767 ファイル → 新規 → Spring スターター・プロジェクト を実行 「新規 Spring スターター・プロジェクト」ダイアログが開くので、そのまま「次へ」をクリック 「新規 Spring スターター・プロジェクト依存関係」が表示されるので、「テンプレートエンジン → Thymeleaf」と「Web → Spring Web」にチェックを入れて「次へ」をクリック 「新規 Spring スターター・プロジェクト」ダイアログが開くので、そのまま「完了」をクリック で設定完了
■プログラムの作成
[Java] Spring BootでHello World!(入門編) | マリンロード https://www.marineroad.com/staff-blog/16785.html ファイル → 新規 → クラス ソース・フォルダー: demo/src/main/java パッケージ: com.example.demo 名前: HelloController
package com.example.demo; public class HelloController { }
が作成されるので、以下のように変更する
package com.example.demo; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping; @RestController public class HelloController { @RequestMapping("/hello") public String hello() { return "Hello World !!"; } }
プロジェクトを右クリックし、 実行 → Spring Boot アプリケーション を選択。コンソールに色々表示され、8080番ポートでTomcatが起動し、アプリケーションが開始したと表示される 以下にアクセスすると「Hello World !!」と表示される http://localhost:8080/hello プログラムを編集し、ツールバーの赤い四角で停止し、緑の再生ボタンで実行すると、編集内容が反映された ■リクエストマッピングの追加 以下のようにすると / と /hello と /goodbye でそれぞれテキストが表示されるようになる
package com.example.demo; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping; @RestController public class HelloController { @RequestMapping("/") public String index() { return "Demo"; } @RequestMapping("/hello") public String hello() { return "Hello World."; } @RequestMapping("/goodbye") public String bye() { return "Good Bye World !!"; } }
■リクエストパラメータの受け取り
import org.springframework.web.bind.annotation.RequestParam; @RequestMapping("/request") private String testRequestParam(@RequestParam("name") String param) { return "受け取ったリクエストパラメータ:" + param; }
http://localhost:8080/request/?name=test ■パスパラメータの受け取り
import org.springframework.web.bind.annotation.PathVariable; @RequestMapping("/path/{param}") private String testPathVariable(@PathVariable String param) { return "受け取ったパスパラメータ:" + param; }
http://localhost:8080/path/abc
■プログラムのパッケージ化について
JAR,WAR,EARそれぞれの違いについて - Java習得を目指すブログ https://java-wizard.hatenadiary.org/entry/20140311/1394538929 特に理由がなければJARでパッケージ化するのが良さそう
■JARファイルの作成
※Spring Boot のJARファイルはTomcatも含まれているので、WARよりもJARを書き出す方が環境構築が容易になる Spring Boot をはじめてみるよ - Multi Vitamin & Mineral http://hiranoon.hatenablog.com/entry/2015/12/30/111829#jar-%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8%E5%A... プロジェクト直下の pom.xml を開き、以下のように編集する groupIdは作成しているプログラムのパッケージ名に合わせる…と思ったが、この編集は行わなくても大丈夫だった
<groupId>com.example</groupId> ↓ <groupId>com.example.demo</groupId>
プロジェクトを右クリックし、 実行 → 5 Maven Install を選択。しばらく待つと、以下にファイルが作成された C:\Users\refirio\sts4\demo\target\demo-0.0.1-SNAPSHOT.jar
■Vagrantでアプリケーション(JAR)を起動
■基本設定 # localectl set-locale LANG=ja_JP.UTF-8 # timedatectl set-timezone Asia/Tokyo # yum install -y java-1.8.0-openjdk-devel.x86_64 # java -version openjdk version "1.8.0_252" OpenJDK Runtime Environment (build 1.8.0_252-b09) OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode) ■プログラムのデプロイ 同期フォルダである /var/www に demo-0.0.1-SNAPSHOT.jar を配置 $ nohup java -jar /var/www/demo-0.0.1-SNAPSHOT.jar & 以下でアクセスできることを確認 $ curl http://localhost:8080/ $ curl http://localhost:8080/hello $ curl http://localhost:8080/goodbye $ curl http://localhost:8080/request/?name=test ■Nginxの導入 SELinuxを無効化しておく # yum -y install epel-release # yum -y install nginx # vi /etc/nginx/nginx.conf
server { listen 80 default_server; listen [::]:80 default_server; server_name _; #root /usr/share/nginx/html; … 公開ディレクトリをコメントアウト # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://localhost:8080; … ブロックに内容を追加 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
# systemctl start nginx # systemctl enable nginx http://192.168.33.10/ http://192.168.33.10/hello http://192.168.33.10/goodbye http://192.168.33.10/request/?name=test
■EC2でアプリケーション(JAR)を起動
■EC2の起動 通常の手順でEC2を作成 Amazon Linux 2 の t2.micro を選択。EIPは無し セキュリティグループで8080番ポートを空けておく SSHで接続 言語とタイムゾーンを設定 パッケージ管理システムを設定 各種ツールをインストール ここまでは通常の立ち上げと同じ ■Javaのインストール Amazon linux2 にjava 1.8.0をインストールする - Qiita https://qiita.com/neko_com/items/ef0409bc85b8054a6004 Amazon Linux には始めからJavaがインストールされているらしい Amazon Linux 2 にはインストールされていないらしい $ java -version … Amazon Linux 2 にはJavaはインストールされていない -bash: java: command not found Java SE 8の名称とバージョン https://www.oracle.com/technetwork/jp/java/javase/jdk8-naming-2157130-ja.html 「Java 8」のバージョン文字列は「Java 1.8」らしい。つまり「Java 8」と「Java 1.8」は同じものを指すらしい 「Oracle Java」のライセンスが変更 〜無償利用は個人での開発・テスト・デモ目的のみに - 窓の杜 https://forest.watch.impress.co.jp/docs/news/1180607.html Oracle Java SEの有償化に伴うOpenJDKへの切り替えの案内 | 京都教育大学 情報処理センター https://ipc.kyokyo-u.ac.jp/page/696 Oracle が Sun Microsystems を買収したことにより、 Oracle Java の無償利用は個人での開発・テスト・デモ目的のみになった 本番環境などでJavaを使いたい場合、オープンソース版のOpenJDKを使う # yum search java … Javaを探す 〜略〜 java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment 8 java-1.8.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector java-1.8.0-openjdk-accessibility-debug.x86_64 : OpenJDK 8 accessibility connector for packages with debug on java-1.8.0-openjdk-debug.x86_64 : OpenJDK Runtime Environment 8 with full debug on java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos 8 java-1.8.0-openjdk-demo-debug.x86_64 : OpenJDK Demos 8 with full debug on java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment 8 java-1.8.0-openjdk-devel-debug.x86_64 : OpenJDK Development Environment 8 with full debug on java-1.8.0-openjdk-headless.x86_64 : OpenJDK Headless Runtime Environment 8 java-1.8.0-openjdk-headless-debug.x86_64 : OpenJDK Runtime Environment with full debug on java-1.8.0-openjdk-javadoc.noarch : OpenJDK 8 API documentation java-1.8.0-openjdk-javadoc-debug.noarch : OpenJDK 8 API documentation for packages with debug on java-1.8.0-openjdk-javadoc-zip.noarch : OpenJDK 8 API documentation compressed in a single archive java-1.8.0-openjdk-javadoc-zip-debug.noarch : OpenJDK 8 API documentation compressed in a single archive for packages with debug on java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle 8 java-1.8.0-openjdk-src-debug.x86_64 : OpenJDK Source Bundle 8 for packages with debug on 〜略〜 # yum install -y java-1.8.0-openjdk-devel.x86_64 … Java 1.8.0 をインストール # java -version … Javaのバージョンを確認 openjdk version "1.8.0_222" OpenJDK Runtime Environment (build 1.8.0_222-b10) OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) ■Spring Boot アプリケーション の起動 AWS EC2上で Spring Bootアプリ起動 - 闘うITエンジニアの覚え書き https://www.magata.net/memo/index.php?AWS%20EC2%BE%E5%A4%C7%20Spring%20Boot%A5%A2%A5%D7%A5%EA%B5%AF%... AWSクラウド環境の構築からSpring Bootアプリのデプロイまで(初心者向け) - Qiita https://qiita.com/KevinFQ/items/119521ebd12bb7890761 SFTPなどで /home/ec2-user/demo-0.0.1-SNAPSHOT.jar に配置する $ java -jar /home/ec2-user/demo-0.0.1-SNAPSHOT.jar EC2のIPアドレスが 54.178.199.100 の場合、以下にアクセスすると Spring Boot で作成したアプリケーションの画面が表示される アクセスできない場合、8080番ポートを空けているか確認する http://54.178.199.100:8080/ アプリケーションは Ctrl+C で終了できるが、この状態だとコンソールを閉じることができない 以下のように「nohup」と「&」を付けてバックグラウンド起動し、kill で終了させるといい $ nohup java -jar /home/ec2-user/demo-0.0.1-SNAPSHOT.jar & $ kill 29102 Linuxコマンド(Bash)でバックグラウンド実行する方法のまとめメモ - Qiita https://qiita.com/inosy22/items/341cfc589494b8211844 プロセス管理: nohup, disown, kill - Heavy Watal https://heavywatal.github.io/dev/nohup.html 【 nohup 】コマンド――端末を閉じてもログアウトしても処理を続ける:Linux基本コマンドTips(137) - @IT https://www.atmarkit.co.jp/ait/articles/1708/24/news022.html ただしnohupによる起動は、あまり好ましくない方法とされているみたい サービス化してバックグラウンドで起動するのが正攻法みたい(未検証) CodeFlow https://www.codeflow.site/ja/article/spring-boot-app-as-a-service SpringBootで作ったjarをinit.dのサービスとして動かしてみた - Qiita https://qiita.com/AkihiroTakamura/items/e1be1a70428c57b10f8b ■Javaのバージョンを切り替える場合 CentOS7系+JDK-9.0.1+JDK1.8.0+alternativesで切り替え - Qiita https://qiita.com/edward999th/items/ffec0ff3209797c43da7 複数のバージョンのJavaをインストールしている場合、 以下のように必要に応じてJavaのバージョンを選択できる # alternatives --config java 1 プログラムがあり 'java' を提供します。 選択 コマンド ----------------------------------------------- *+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.amzn2.0.1.x86_64/jre/bin/java) Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:1 ■その他参考になりそうなページ EC2+RDS+Spring bootで簡単なAPIを作ってみる? - Qiita https://qiita.com/yseki_/items/81c84d78895b009c2aa6 【AWS】入門その? EC2とRDSを利用して簡易Webアプリを構築してみる - SEワンタンの独学備忘録 https://www.wantanblog.com/entry/2019/09/21/190819
■Elastic Beanstalk でアプリケーション(JAR)を起動
サーバメモの AWS.txt の「Elastic Beanstalk」を参照
■WARファイルの作成
※特に理由がなければ、WARではなくJARで書き出す方が一般的かも Spring BootのJARファイルにはTomcatも含まれているため、環境構築が比較的容易になる ※この方法でWARファイルを作成できたが、実際のTomcatで動作確認はまだできていない Spring BootでWARを作成してTomcatにデプロイしてみる | 株式会社CONFRAGE ITソリューション事業部 https://confrage.jp/spring-boot%E3%81%A7war%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6tomcat%E3%81... プロジェクト直下の pom.xml を開き、以下のように編集する groupIdは作成しているプログラムのパッケージ名に合わせる(groupIdの編集は不要かも?)
<groupId>com.example</groupId> ↓ <groupId>com.example.demo</groupId> <packaging>jar</packaging> ↓ <packaging>war</packaging> 以下はdependenciesタグ内の最後に追加 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
プロジェクトを右クリックし、 実行 → 8 Maven ビルド を選択。「構成の編集」ダイアログが開くので、「ゴール」に「package」と入力して「実行」ボタンを押す 「使用可能な更新」ダイアログが表示されたので、チェックを付けたままで「次へ」ボタンを押す 更新中に「証明書を信頼するか」の確認が表示されたが、信頼して進めた Spring Tool の再起動を求められたので再起動した 再起動したらワークスペースのアップデートを求められたのでアップデートした 再度「構成の編集」ダイアログで「実行」ボタンを押す 色々とダウンロードが始まった しばらく待つと、以下にファイルが作成された C:\Users\refirio\sts4\demo\target\demo-0.0.1-SNAPSHOT.war 以下に置けばXAMPPのTomcatで起動できるか…と思ったが、404エラーになった 純粋にファイルが見つからない場合以外にも、Javaのバージョンが違ったりすると404エラーになるらしい? C:\xampp\tomcat\webapps\demo.war
HTTPステータス 404 - Not Found Type ステータスレポート メッセージ /demo/ 説明 The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Apache Tomcat/7.0.96
ひとまずwarファイル自体は作成できたので、Elastic Beanstalk 環境で試すなどするか
■Vagrantでアプリケーション(WAR)を起動
※まだ Spring Boot のプログラムを検証できていない いったん NetBeans で作成したものは起動できたので、その内容をメモしている CentOS7でtomcat8構築 - Qiita https://qiita.com/y-araki-qiita/items/644248001de41cbb0388 ■OSの基本設定 # localectl set-locale LANG=ja_JP.UTF-8 # timedatectl set-timezone Asia/Tokyo ■Javaをインストール # yum -y install java-1.8.0-openjdk-devel # java -version openjdk version "1.8.0_252" OpenJDK Runtime Environment (build 1.8.0_252-b09) OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode) ■Javaにパスを通す # echo "export JAVA_HOME=$(readlink -e $(which java)|sed 's:/bin/java::')" > /etc/profile.d/java.sh # echo "PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile.d/java.sh # source /etc/profile.d/java.sh ■Tomcatユーザー作成 # useradd -s /sbin/nologin tomcat ■Tomcatインストール # mkdir -p /usr/local/src/tomcat # cd /usr/local/src/tomcat # curl -OL http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-8/v8.5.54/bin/apache-tomcat-8.5.54.t...http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-8/ をブラウザで検索し、その時点で存在するバージョンをダウンロードする # tar zxvf apache-tomcat-8.5.54.tar.gz # mv apache-tomcat-8.5.54 /opt/ # chown -R tomcat. /opt/apache-tomcat-8.5.54 # ls -ld /opt/apache-tomcat-8.5.54 # ln -s /opt/apache-tomcat-8.5.54 /opt/tomcat # echo 'export CATALINA_HOME=/opt/tomcat' > /etc/profile.d/tomcat.sh # source /etc/profile.d/tomcat.sh ■Tomcat起動 # vi /etc/systemd/system/tomcat.service
[Unit] Description=Apache Tomcat 8 After=syslog.target network.target [Service] User=tomcat Group=tomcat Type=oneshot PIDFile=/opt/tomcat/tomcat.pid RemainAfterExit=yes ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh ExecReStart=/opt/tomcat/bin/shutdown.sh;/opt/tomcat/bin/startup.sh [Install] WantedBy=multi-user.target
# chmod 755 /etc/systemd/system/tomcat.service # systemctl start tomcat # systemctl enable tomcat 以下にアクセスすると、猫のイラストが掲載されたTomcatの初期画面が表示される http://192.168.33.10:8080/ ■アプリケーションを配置 Tomcatは /opt/apache-tomcat-8.5.54 に配置されている # ll /opt/tomcat lrwxrwxrwx 1 root root 25 May 18 11:30 /opt/tomcat -> /opt/apache-tomcat-8.5.54 # ll /opt/apache-tomcat-8.5.54 total 132 drwxr-x--- 2 tomcat tomcat 4096 May 18 11:30 bin -rw-r----- 1 tomcat tomcat 19318 Apr 3 23:09 BUILDING.txt drwx------ 3 tomcat tomcat 4096 May 18 11:33 conf -rw-r----- 1 tomcat tomcat 5408 Apr 3 23:09 CONTRIBUTING.md drwxr-x--- 2 tomcat tomcat 4096 May 18 11:30 lib -rw-r----- 1 tomcat tomcat 57011 Apr 3 23:09 LICENSE drwxr-x--- 2 tomcat tomcat 4096 May 18 11:33 logs -rw-r----- 1 tomcat tomcat 1726 Apr 3 23:09 NOTICE -rw-r----- 1 tomcat tomcat 3255 Apr 3 23:09 README.md -rw-r----- 1 tomcat tomcat 7136 Apr 3 23:09 RELEASE-NOTES -rw-r----- 1 tomcat tomcat 16262 Apr 3 23:09 RUNNING.txt drwxr-x--- 2 tomcat tomcat 29 May 18 11:30 temp drwxr-x--- 7 tomcat tomcat 76 Apr 3 23:07 webapps drwxr-x--- 3 tomcat tomcat 21 May 18 11:33 work NetBeans IDE 7.4 で以下のファイルを作成 C:\Users\refirio\Documents\NetBeansProjects\HelloWeb\dist\HelloWeb.war ROOT.war に名前変更して、いったん共有フォルダに配置(今回の場合は /var/www が共有フォルダ) /var/www/ROOT.war 以下の場所に移動 $ sudo su - # mv /var/www/ROOT.war /opt/apache-tomcat-8.5.54/webapps/ROOT.war # cd /opt/apache-tomcat-8.5.54/webapps/ # chown tomcat. ROOT.war # ll total 7024 drwxr-x--- 16 tomcat tomcat 4096 May 18 11:30 docs drwxr-x--- 6 tomcat tomcat 78 May 18 11:30 examples drwxr-x--- 5 tomcat tomcat 82 May 18 11:30 host-manager drwxr-x--- 5 tomcat tomcat 97 May 18 11:30 manager drwxr-x--- 4 tomcat tomcat 54 May 18 11:43 ROOT -rwxrwxrwx 1 tomcat tomcat 7188220 May 18 10:23 ROOT.war Tomcatを再起動 # systemctl restart tomcat 以下にアクセスすると、NetBeansで作成した「Spring Web MVC project へようこそ!!」の画面が表示された http://192.168.33.10:8080/ 正確には、以下にリダイレクトされて表示された http://192.168.33.10:8080/index.htm なお、/opt/apache-tomcat-8.5.54/webapps/ROOT.war ではなく例えば /opt/apache-tomcat-8.5.54/webapps/HelloWeb.war に配置すると 以下のURLでアクセスできるようになる http://192.168.33.10:8080/HelloWeb/ 正確には、以下にリダイレクトされて表示された http://192.168.33.10:8080/HelloWeb/index.htm ■プロセスの確認 プロセスを確認すると、以下のものがある # ps aux | grep tomcat tomcat 4438 10.7 19.2 2663560 121236 ? Sl 16:12 0:07 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start 改行を調整すると、以下が起動されていることが判る /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start ■Apacheと連携 引き続き、以下のページの解説を参考に検証したい CentOS7でtomcat8構築 - Qiita https://qiita.com/y-araki-qiita/items/644248001de41cbb0388
■EC2でアプリケーション(WAR)を起動
※まだ Spring Boot のプログラムを検証できていない いったん NetBeans で作成したものは起動できたので、後半にその内容をメモしている Spring Boot のアプリケーションを AWS EC2 にデプロイする手順 https://improve-future.com/spring-boot-deploy-to-aws-ec2-tomcat.html 「EC2でアプリケーション(JAR)を起動」の手順でJava環境を作る 引き続きTomcatをインストールする yumだとTomcat7がインストールされることが判る # yum info tomcat 読み込んだプラグイン:extras_suggestions, fastestmirror, langpacks, priorities, update-motd Loading mirror speeds from cached hostfile 利用可能なパッケージ 名前 : tomcat アーキテクチャー : noarch バージョン : 7.0.76 ExtrasリポジトリならTomcat8がインストールされることが判る 今回はこのTomcat8をインストールするものとする # amazon-linux-extras list | grep tomcat 23 tomcat8.5 available \ # amazon-linux-extras install tomcat8.5 -y # systemctl start tomcat # systemctl enable tomcat 以下の場所にインストールされている # ll /usr/share/tomcat/ 合計 0 drwxr-xr-x 2 root root 76 10月 10 13:28 bin lrwxrwxrwx 1 root tomcat 11 10月 10 13:28 conf -> /etc/tomcat lrwxrwxrwx 1 root tomcat 22 10月 10 13:28 lib -> /usr/share/java/tomcat lrwxrwxrwx 1 root tomcat 15 10月 10 13:28 logs -> /var/log/tomcat lrwxrwxrwx 1 root tomcat 22 10月 10 13:28 temp -> /var/cache/tomcat/temp lrwxrwxrwx 1 root tomcat 23 10月 10 13:28 webapps -> /var/lib/tomcat/webapps lrwxrwxrwx 1 root tomcat 22 10月 10 13:28 work -> /var/cache/tomcat/work 以下のようにすればTomcatのバージョンと起動ログを確認できる(ただし、ログファイル名は日付がもとになる) # cat /var/log/tomcat/catalina.2019-10-10.log 10-Oct-2019 13:32:30.755 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.42 10-Oct-2019 13:32:30.761 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jul 3 2019 21:00:37 UTC 10-Oct-2019 13:32:30.761 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.5.42.0 10-Oct-2019 13:32:30.762 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux 10-Oct-2019 13:32:30.762 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.14.138-114.102.amzn2.x86_64 10-Oct-2019 13:32:30.763 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64 10-Oct-2019 13:32:30.763 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.amzn2.0.1.x86_64/jre 10-Oct-2019 13:32:30.764 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_222-b10 10-Oct-2019 13:32:30.765 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation 10-Oct-2019 13:32:30.765 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/share/tomcat 10-Oct-2019 13:32:30.766 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/share/tomcat 10-Oct-2019 13:32:30.766 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/share/tomcat 10-Oct-2019 13:32:30.767 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/share/tomcat 10-Oct-2019 13:32:30.768 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.endorsed.dirs= 10-Oct-2019 13:32:30.769 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/var/cache/tomcat/temp 10-Oct-2019 13:32:30.769 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties 10-Oct-2019 13:32:30.770 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 10-Oct-2019 13:32:30.770 情報 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib] 10-Oct-2019 13:32:30.936 情報 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"] 10-Oct-2019 13:32:30.957 情報 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 10-Oct-2019 13:32:30.984 情報 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 13:32:30.988 情報 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 10-Oct-2019 13:32:30.991 情報 [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1018 ms 10-Oct-2019 13:32:31.033 情報 [main] org.apache.catalina.core.StandardService.startInternal サービス [Catalina] を起動します 10-Oct-2019 13:32:31.037 情報 [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.42 10-Oct-2019 13:32:31.059 情報 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 10-Oct-2019 13:32:31.081 情報 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 13:32:31.086 情報 [main] org.apache.catalina.startup.Catalina.start Server startup in 94 ms WARファイルを以下の場所に配置 今回は一時的に ec2-user が書き込めるように所有者を変更したファイルを作成し、書き込み完了後に所有者を tomcat にした 配置すると、ROOTディレクトリも作成された /usr/share/tomcat/webapps/ROOT.war 配置して所有者を tomcat にする # chown tomcat. ROOT.war # ll 合計 17332 drwxr-xr-x 5 tomcat tomcat 48 10月 10 13:49 ROOT -rw-r--r-- 1 tomcat tomcat 17743940 10月 10 13:49 ROOT.war # systemctl restart tomcat アクセスするとアプリケーションの画面が表示…されず、404エラーになった
HTTPステータス 404 - Not Found Type ステータスレポート メッセージ / 説明 The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Apache Tomcat/8.5.42
ログファイルには以下のエラーが出力されている 正しくWARファイルを作成できていないのか、その他何らかの手順が間違っているのかは不明 # cat /var/log/tomcat/catalina.2019-10-10.log 10-Oct-2019 13:48:31.112 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Webアプリケーションアーカイブ [/var/lib/tomcat/webapps/ROOT.war] を配備します 10-Oct-2019 13:48:31.158 重大 [localhost-startStop-1] org.apache.catalina.startup.ContextConfig.beforeStart Exception fixing docBase for context [] java.util.zip.ZipException: zip file is empty at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.<init>(ZipFile.java:225) at java.util.zip.ZipFile.<init>(ZipFile.java:155) at java.util.jar.JarFile.<init>(JarFile.java:166) at java.util.jar.JarFile.<init>(JarFile.java:103) at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:93) at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:69) at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:99) at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122) at sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:89) at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:130) at org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:609) at org.apache.catalina.startup.ContextConfig.beforeStart(ContextConfig.java:742) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94) at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:394) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:149) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:744) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:980) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1851) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) 10-Oct-2019 13:48:31.194 重大 [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:744) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:980) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1851) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@59586cbd] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4885) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5020) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 10 more Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.WarResourceSet@12bee893] at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140) at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:714) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 13 more Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: zip file is empty at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:142) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107) ... 16 more Caused by: java.util.zip.ZipException: zip file is empty at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.<init>(ZipFile.java:225) at java.util.zip.ZipFile.<init>(ZipFile.java:155) at java.util.jar.JarFile.<init>(JarFile.java:166) at java.util.jar.JarFile.<init>(JarFile.java:130) at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:196) at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:181) at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:139) ... 17 more 10-Oct-2019 13:48:31.202 重大 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Webアプリケーションアーカイブ [/var/lib/tomcat/webapps/ROOT.war] を配備中のエラーです java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:758) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:744) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:980) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1851) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) 10-Oct-2019 13:48:31.207 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/var/lib/tomcat/webapps/ROOT.war] has finished in [91] ms 10-Oct-2019 13:49:11.214 情報 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.undeploy コンテキストパス [] のWebアプリケーションの配備を解除します 10-Oct-2019 13:49:11.224 情報 [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployWAR Webアプリケーションアーカイブ [/var/lib/tomcat/webapps/ROOT.war] を配備します 10-Oct-2019 13:49:13.935 情報 [localhost-startStop-2] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 10-Oct-2019 13:49:14.029 情報 [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/var/lib/tomcat/webapps/ROOT.war] has finished in [2,805] ms 10-Oct-2019 13:51:11.955 情報 [Thread-5] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"] 10-Oct-2019 13:51:11.959 情報 [Thread-5] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 13:51:11.960 情報 [Thread-5] org.apache.catalina.core.StandardService.stopInternal サービス [Catalina] を停止します 10-Oct-2019 13:51:11.977 情報 [Thread-5] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"] 10-Oct-2019 13:51:11.980 情報 [Thread-5] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 13:51:11.982 情報 [Thread-5] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"] 10-Oct-2019 13:51:11.983 情報 [Thread-5] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 13:51:13.065 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.42 10-Oct-2019 13:51:13.071 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jul 3 2019 21:00:37 UTC 10-Oct-2019 13:51:13.071 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.5.42.0 10-Oct-2019 13:51:13.072 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux 10-Oct-2019 13:51:13.072 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.14.138-114.102.amzn2.x86_64 10-Oct-2019 13:51:13.073 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64 10-Oct-2019 13:51:13.074 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.amzn2.0.1.x86_64/jre 10-Oct-2019 13:51:13.074 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_222-b10 10-Oct-2019 13:51:13.075 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation 10-Oct-2019 13:51:13.075 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/share/tomcat 10-Oct-2019 13:51:13.076 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/share/tomcat 10-Oct-2019 13:51:13.076 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/share/tomcat 10-Oct-2019 13:51:13.077 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/share/tomcat 10-Oct-2019 13:51:13.078 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.endorsed.dirs= 10-Oct-2019 13:51:13.078 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/var/cache/tomcat/temp 10-Oct-2019 13:51:13.079 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties 10-Oct-2019 13:51:13.080 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 10-Oct-2019 13:51:13.080 情報 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib] 10-Oct-2019 13:51:13.279 情報 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"] 10-Oct-2019 13:51:13.312 情報 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 10-Oct-2019 13:51:13.340 情報 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 13:51:13.344 情報 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 10-Oct-2019 13:51:13.348 情報 [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1087 ms 10-Oct-2019 13:51:13.395 情報 [main] org.apache.catalina.core.StandardService.startInternal サービス [Catalina] を起動します 10-Oct-2019 13:51:13.396 情報 [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.42 10-Oct-2019 13:51:13.438 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Webアプリケーションアーカイブ [/var/lib/tomcat/webapps/ROOT.war] を配備します 10-Oct-2019 13:51:16.515 情報 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 10-Oct-2019 13:51:16.613 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/var/lib/tomcat/webapps/ROOT.war] has finished in [3,175] ms 10-Oct-2019 13:51:16.620 情報 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 10-Oct-2019 13:51:16.652 情報 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 13:51:16.671 情報 [main] org.apache.catalina.startup.Catalina.start Server startup in 3322 ms /usr/share/tomcat/webapps/ROOT.war ではなく、 /usr/share/tomcat/webapps/demo.war に配置してみる あらかじめ /var/lib/tomcat/demo.war にファイルを配置して所有者を tomcat に変更し、その後 /usr/share/tomcat/webapps/demo.war に複製 さらにTomcatを再起動 # cat /var/log/tomcat/catalina.2019-10-10.log 10-Oct-2019 14:21:29.170 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Webアプリケーションアーカイブ [/var/lib/tomcat/webapps/demo.war] を配備します 10-Oct-2019 14:21:32.016 情報 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 10-Oct-2019 14:21:32.129 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/var/lib/tomcat/webapps/demo.war] has finished in [2,958] ms 10-Oct-2019 14:22:33.558 情報 [Thread-5] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"] 10-Oct-2019 14:22:33.569 情報 [Thread-5] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 14:22:33.571 情報 [Thread-5] org.apache.catalina.core.StandardService.stopInternal サービス [Catalina] を停止します 10-Oct-2019 14:22:33.599 情報 [Thread-5] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"] 10-Oct-2019 14:22:33.602 情報 [Thread-5] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 14:22:33.604 情報 [Thread-5] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"] 10-Oct-2019 14:22:33.605 情報 [Thread-5] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 14:22:34.699 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.42 10-Oct-2019 14:22:34.708 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jul 3 2019 21:00:37 UTC 10-Oct-2019 14:22:34.709 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.5.42.0 10-Oct-2019 14:22:34.709 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux 10-Oct-2019 14:22:34.710 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.14.138-114.102.amzn2.x86_64 10-Oct-2019 14:22:34.710 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64 10-Oct-2019 14:22:34.711 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.amzn2.0.1.x86_64/jre 10-Oct-2019 14:22:34.712 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_222-b10 10-Oct-2019 14:22:34.712 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation 10-Oct-2019 14:22:34.713 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/share/tomcat 10-Oct-2019 14:22:34.713 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/share/tomcat 10-Oct-2019 14:22:34.714 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/share/tomcat 10-Oct-2019 14:22:34.715 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/share/tomcat 10-Oct-2019 14:22:34.716 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.endorsed.dirs= 10-Oct-2019 14:22:34.716 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/var/cache/tomcat/temp 10-Oct-2019 14:22:34.717 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties 10-Oct-2019 14:22:34.717 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 10-Oct-2019 14:22:34.718 情報 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib] 10-Oct-2019 14:22:34.918 情報 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"] 10-Oct-2019 14:22:34.951 情報 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 10-Oct-2019 14:22:34.986 情報 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 14:22:34.990 情報 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read 10-Oct-2019 14:22:34.995 情報 [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1107 ms 10-Oct-2019 14:22:35.035 情報 [main] org.apache.catalina.core.StandardService.startInternal サービス [Catalina] を起動します 10-Oct-2019 14:22:35.040 情報 [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.42 10-Oct-2019 14:22:35.086 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Webアプリケーションアーカイブ [/var/lib/tomcat/webapps/demo.war] を配備します 10-Oct-2019 14:22:38.157 情報 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 10-Oct-2019 14:22:38.265 情報 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/var/lib/tomcat/webapps/demo.war] has finished in [3,180] ms 10-Oct-2019 14:22:38.268 情報 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 10-Oct-2019 14:22:38.300 情報 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"] 10-Oct-2019 14:22:38.319 情報 [main] org.apache.catalina.startup.Catalina.start Server startup in 3323 ms エラーにはならなかった …が、以下いずれもTomcatの404エラーが表示される http://54.178.199.100:8080/ http://54.178.199.100:8080/demo/ アクセスログを確認しても、404エラーが記録されている # cat /var/log/tomcat/localhost_access_log.2019-10-10.txt 124.219.166.205 - - [10/Oct/2019:14:33:37 +0900] "GET /demo/ HTTP/1.1" 404 1112 124.219.166.205 - - [10/Oct/2019:14:33:40 +0900] "GET / HTTP/1.1" 404 1107 WARファイルを作成するときのJavaのバージョンと、 Tomcatを動かしているJavaのバージョンが異なると、 404エラーが返されることがあるらしい でもローカルのTomcatは 8.5.34 で、サーバ上のTomcatは 8.5.42.0 なので、それが原因では無いかも Spring BootでWARを作成して別のTomcatにデプロイする - Qiita https://qiita.com/NagaokaKenichi/items/3f191aeb6f161101d5f6 ■NetBeans IDE 7.4 でWARファイルを作成してみる Webアプリケーション開発入門 - NetBeans IDEチュートリアル https://netbeans.org/kb/docs/web/quickstart-webapps_ja.html NetBeansを起動する ファイル → 新規プロジェクト カテゴリで「Java Web」、プロジェクトで「Webアプリケーション」を選択して「次」をクリック プロジェクト名に「HelloWeb」を入力して「次」をクリック サーバで「Tomcat」を選択して「次」をクリック フレームワークで「Sprint Web MVC」を選択してみる。「終了」をクリック プロジェクトが作成される トップページにあたるファイルは以下に作成されるので、必要に応じて調整する C:\Users\refirio\Documents\NetBeansProjects\HelloWeb\web\WEB-INF\jsp\index.jsp プロジェクトを右クリックし、「ビルド」を選択する ビルドに成功すると、以下の場所にWARファイルが作成される C:\Users\refirio\Documents\NetBeansProjects\HelloWeb\dist\HelloWeb.war 「EC2でアプリケーション(WAR)を起動」の環境にデプロイしてみる 以下の手順は、あらかじめ /var/lib/tomcat/demo.war にファイルを配置して ec2-user から上書きできるようにし、 その後 tomcat ユーザ権限で /usr/share/tomcat/webapps/demo.war に複製 …としている # cd /var/lib/tomcat # touch hello.war # chown ec2-user. hello.war このタイミングで、SFTPなどで demo.war を上書きする # sudo -u tomcat cp hello.war /usr/share/tomcat/webapps/hello.war 配置すると、自動的に hello ディレクトリが作られ、その中にプログラムが展開される # systemctl restart tomcat Tomcatを再起動すると、以下でアクセスできる http://54.178.199.100:8080/hello ROOT.war という名前で配置すると ROOT ディレクトリが作成され、その中にプログラムが展開される この名前で配置したとき、以下でアクセスできる http://54.178.199.100:8080
■Elastic Beanstalk でアプリケーション(WAR)を起動
現状は未検証だが、NetBeansで作成したものならデプロイできるかも
■コマンドでjarファイルとwarファイルを作成
■コマンドでjarファイルを作成 jarコマンドを使ってjarファイル、warファイルを作る方法 - Qiita https://qiita.com/Qui/items/14961678ef939673f744 C:\Users\refirio\Vagrant\java\code\sample_jar\META-INF\MANIFEST.MF
Main-Class: sample.App
C:\Users\refirio\Vagrant\java\code\sample_jar\src\sample\App.java
package sample; public class App { public static void main(String[] arg) { System.out.println("Hello World!"); } }
C:\Users\refirio\Vagrant\java\code\sample_jar\classes (カラのフォルダを作成しておく) $ cd /var/www/sample_jar/ $ javac -sourcepath src -d classes src/sample/App.java 以下にコンパイル済みファイルが作成される C:\Users\refirio\Vagrant\java\code\sample_jar\classes\sample\App.class $ jar cvfm sample.jar META-INF/MANIFEST.MF -C classes . 以下にjarファイルが作成される C:\Users\refirio\Vagrant\java\code\sample_jar\sample.jar jarファイルの内容を確認 $ jar tf sample.jar META-INF/ META-INF/MANIFEST.MF sample/ sample/App.class jarファイルを実行 $ java -jar sample.jar Hello World! ■コマンドでwarファイルを作成 jarコマンドを使ってjarファイル、warファイルを作る方法 - Qiita https://qiita.com/Qui/items/14961678ef939673f744 Maven Repository: javax.servlet > javax.servlet-api > 4.0.1 https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api/4.0.1 C:\Users\refirio\Vagrant\java\code\sample_war\lib\javax.servlet-api-4.0.1.jar (上のURLから入手したファイル) C:\Users\refirio\Vagrant\java\code\sample_war\src\sample\SampleServlet.java
package sample; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/sample") public class SampleServlet extends HttpServlet { @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.setCharacterEncoding("UTF-8"); ServletOutputStream out = resp.getOutputStream(); out.println("Hello World!"); out.flush(); } }
C:\Users\refirio\Vagrant\java\code\sample_war\WebContent\WEB-INF\classes (カラのフォルダを作成しておく) $ cd /var/www/sample_war/ $ javac -sourcepath src -classpath lib/* -d WebContent/WEB-INF/classes src/sample/SampleServlet.java 以下にコンパイル済みファイルが作成される C:\Users\refirio\Vagrant\java\code\sample_war\WebContent\WEB-INF\classes\sample\SampleServlet.class $ jar cvf sample.war -C WebContent . 以下にjarファイルが作成される C:\Users\refirio\Vagrant\java\code\sample_war\sample.war warファイルの内容を確認 $ jar tf sample.war META-INF/ META-INF/MANIFEST.MF WEB-INF/ WEB-INF/classes/ WEB-INF/classes/sample/ WEB-INF/classes/sample/SampleServlet.class Tomcatにデプロイ $ sudo su - # mv /var/www/sample_war/sample.war /opt/apache-tomcat-8.5.54/webapps/sample.war # cd /opt/apache-tomcat-8.5.54/webapps/ # chown tomcat. sample.war 以下にアクセスすると「Hello World!」と表示される http://192.168.33.10:8080/sample/sample 引き続き以下などを参考に、データベースへの接続を試したい JavaによるWebアプリケーション開発 https://www.bigbang.mydns.jp/java-kaihatsu-x.htm
■その他参考になりそうなページ
Spring Tool Suite インストールと日本語化 for Windows - Qiita https://qiita.com/andna0410/items/e9cc07c9e2e34a542245 Spring Tool Suite (STS)と Spring Boot で始める Web アプリケーション開発(1) TECHSCORE BLOG http://www.techscore.com/blog/2016/11/22/start-with-sts-and-spring-boot-1/ AWSクラウド環境の構築からSpring Bootアプリのデプロイまで(初心者向け) - Qiita https://qiita.com/KevinFQ/items/119521ebd12bb7890761 Spring Bootで作ったJarをAWSのElastic BeanstalkですぐにWebにアップする - Qiita https://qiita.com/haruto167/items/0c9234d6ef77f3a5a09c Spring BootをElastic Beanstalk上で動かしてみた - Qiita https://qiita.com/takexi/items/3cc428e603653bbf2e8b Spring bootでMySQL接続 - Qiita https://qiita.com/uk-liverpool/items/5878d3c509c503ff5b29 Spring Boot MySQL を使用したデータへのアクセス - コードサンプル https://spring.pleiades.io/guides/gs/accessing-data-mysql/