TomcatでSpringBootアプリケーションを動かした

# はじめに
自分がメインで使っているWindows１１のeclipseでSpringBootアプリケーションを作成した。EclipseのTomcat上で動作確認済みである。
このアプリケーションを、別機のUbuntuのTomcatにデプロイして動かしてみた。
この際、つまづきポイントが多かったので備忘録兼ねて記事化する。


# 1.UbuntuにTomcatをインストール
初っ端から躓いた。つまづきポイント多数。

Tomcatを動かすためにはJREも必要とのことだったので、JDKのインストールも併せてこのステップで行う。

基本的にこちらの記事を参考に進めた。

https://qiita.com/kaburankattara/items/09db660fc5037ab1e32c

## 1-1.Tomcat管理用ユーザ作成
```
・`Ctrl+Alt+T`で端末（コマンドプロンプト）を開く。
・`sudo su -`でrootユーザに切り替えホームディレクトリに移動する。
・`sudo adduser 追加したいユーザ名`
```
このコマンドをうつと、いろいろ指示されるのでそれに従いユーザ作成

<details><summary>ユーザ名はsudoersファイル内にありません　と言われた場合</summary>

・sudo使えるユーザに切り替えて
`sudo usermod -G sudo sudo使いたいユーザ名`
で使えるようになるはず。新しく作ったユーザはデフォルトでsudo使えないらしい。
↓参考
https://qiita.com/unkomorasi01/items/219b56f2c9ddc8df4fe7

</details>

:::note warn
似ているコマンドに`useradd`があるが、これを使うとよくわからない状態になったのでおすすめはしない(一度はまった）

ホームディレクトリもできず、プロンプト表示も変えられずどうにもできなかった…
:::

そもそもなぜ管理用ユーザを別で作成する必要があるのかは、あんまりわからなかった。
単に管理しやすいからってことなんだろうか。




## 1-2. 実行権限付与
・rootユーザで、`visudo`とうつと、エディタが開く。
そこに、
・`追加したユーザ名 ALL=(ALL)      NOPASSWD: ALL`
を追加する。

visudoコマンドは、sudoersファイルを編集するときに使用するコマンドらしい。
私の場合、開かれたエディタはGNU　nanoというものだったので、入力後、Ctrl+Sで保存し、Ctrl+Xでファイルを閉じた。

で、この追加した内容は、そのユーザ名でsudoを使うときにパスワードを聞かれないようにする、というもの。


↓参考

https://wa3.i-3-i.info/word11271.html

https://qiita.com/Shiro-neko-kamen/items/82cbdfaeb291164333be

## 1-3.操作するユーザを作成したTomcat管理用ユーザに切り替える

・`exit`コマンドでrootユーザから最初にログインしたユーザに切り替え、さらに`su - ユーザ名`でユーザを切り替える。

suだけでも切り替えられるが、ハイフンをつけることでそのユーザのホームディレクトリにいける。

`whoami`で今どのユーザとして動いているのか把握できる。

## 1-4.JDKをインストールする
Tomcatを動かすためにはJRE（Java実行環境）が必要とのこと。いろいろ考えて、JRE単品ではなく、JDKをインストールすることにした。

・`sudo apt -y install openjdk-18-jdk`
・`java -version`が動くか確認する。
検索すると、環境変数を設定しなければならないと書いてある記事が多かったが、自分の場合設定しなくてもパスが通っていた。
が、もし「コマンドが見つかりません」と言われるならば環境変数の設定をする必要がある。

環境変数設定しなくても動いたのは、aptコマンドを使ったからという理由らしい。

## 1-5.Tomcatをインストール
・tomcat管理用ユーザに切り替える
・（自分の場合）ホームディレクトリ直下にtoolsディレクトリを作成した。(ホームディレクトリで`mkdir tools`)
・`cd tools`で作成したtoolsディレクトリに移動し、以下のコマンドをうつ
```
curl -O https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.9/bin/apache-tomcat-10.1.9.tar.gz
```

・toolsディレクトリで`ls`して、ちゃんとダウンロードされたことを確認。

・`tar -xzvf apache-tomcat-10.1.9.tar.gz`で解凍する
ファイルがずらーっと出るので止まるまで待つ。

`ls`すると、フォルダが作成されており、展開されていることを確認できる

## 1-6.いろいろ設定
・`sudo mv apache-10.1.9 /opt`で展開したフォルダをoptに移動させる。

optはアプリケーションパッケージを置いておくようディレクトリらしい。
ディレクトリごとに役割がいろいろあるようだが、これは今度調べる。

・`chown -R tomcat管理用ユーザ名 /opt/apache-tomcat-10.1.9`で、所有者をtomcat管理用ユーザに変更する。

`ls -al`で所有者が変わっていることを確認できる。
-Rオプションは、指定したディレクトリとそのディレクトリ以下のファイルやディレクトリの所有権を再帰的に変更する、という意味になる。


# 2.warファイルをおく
事前に作成しておいたwarファイルをmvコマンドで/opt/apache-tomcat-10.1.9/webappsに移動させる。

Ubuntu機へのwarファイルのダウンロードはUSBメモリを介して行った。

# 3.起動まで
サイトを参考にユニット定義ファイルを作成
`sudo vi /etc/systemd/system/tomcat.service`

ファイルに書く内容は以下の通り。
```
[Unit]
Description=Apachw Tomcat 10
After=network.target

[Service]
User=ユーザ名
Type=oneshot
PIDFile=/opt/apache-tomcat-10.1.9/tomcat.pid
RemainAfterExit=yes

ExecStart=/opt/apache-tomcat-10.1.9/bin/startup.sh
ExecStop=/opt/apache-tomcat-10.1.9/bin/shutdown.sh
ExecReStart=/opt/apache-tomcat-10.1.9/bin/shutdown.sh;/opt/apache-tomcat-10.1.9/bin/startup.sh

[Install]
WantedBy=multi-user.target
```
そして。以下のコマンドをうつ。
```
systemctl enable tomcat
systemctl start tomcat
systemctl status tomcat
```

で、アクティブと表示されれば、起動は成功。
先ほど置いたwarファイルが展開されており、localhostでちゃんと実行できることも確認できた。

正直、ユニット定義ファイルの内容は参考サイトのものをほぼコピペしているので理解できていない。



で、localhost:8080にアクセスして、アプリケーションがちゃんと動いたことも確認。
何とかうまくいった。



# 参考サイト
本文の途中にもリンクを貼っているがここにもまとめる。
[Tomcatの構築手順](https://qiita.com/kaburankattara/items/09db660fc5037ab1e32c)

[visudoとは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word11271.html)

[GNU nanoエディタの使い方](https://qiita.com/Shiro-neko-kamen/items/82cbdfaeb291164333be)

[Ubuntuでユーザ追加したらsudo使えなかった。](https://qiita.com/unkomorasi01/items/219b56f2c9ddc8df4fe7)