[Ubuntu18/mac][IntelliJ]jdk10でtomcat9を立てる


借りてるvpsでtomcat9を立てる。
最近dockerで立ててたブログをapt upgradeで環境をぶっ壊した。
コンテナイメージをバックアップ取っとけばよかったと反省。
Pythonではあまりバックエンドの情報もなく、言語によって得意不得意があると実感中。flask、とかDjangoにしてもやっぱり情報が少ない。

```
cat /etc/os-release
java --version
```

Ubuntu：18.04.2 LTS (Bionic Beaver)
openjdk 10.0.2 2018-07-17

# jdk入れる

sudo apt update


OpenJDKを入れる

sudo apt install default-jdk


# Tomcatユーザーを作る


```
sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat
```


# tomcatを入れる


```
wget http://www-eu.apache.org/dist/tomcat/tomcat-9/v9.0.17/bin/apache-tomcat-9.0.17.tar.gz -P /tmp
```

移動

```
sudo tar xf /tmp/apache-tomcat-9*.tar.gz -C /opt/tomcat
```

```
sudo ln -s /opt/tomcat/apache-tomcat-9.0.17 /opt/tomcat/latest
```

```
sudo chown -RH tomcat: /opt/tomcat/latest
```

```
sudo sh -c 'chmod +x /opt/tomcat/latest/bin/*.sh'
```

# systemdユニットファイルを作る


```
sudo emacs /etc/systemd/system/tomcat.service
```


JAVA_HOMEの場所が違うなら変えてねと。


```
[Unit]
Description=Tomcat 9 servlet container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/default-java"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"

Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
```


```
sudo systemctl daemon-reload
```

```
sudo systemctl start tomcat
```

```
sudo systemctl status tomcat
```

```
sudo systemctl enable tomcat
```

# ファイヤーウォール

50000を開ける

```
sudo ufw status
sudo ufw enable 50000
```

```
sudo emacs /opt/tomcat/latest/conf/server.xml
```

```
    <Connector port="50000" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
```

# その他設定


```
sudo emacs /opt/tomcat/latest/conf/tomcat-users.xml
```


```
<tomcat-users>
<!--
    Comments
-->
   <role rolename="admin-gui"/>
   <role rolename="manager-gui"/>
   <user username="admin" password="admin_password" roles="admin-gui,manager-gui"/>
</tomcat-users> 
```


```
sudo emacs /opt/tomcat/latest/webapps/manager/META-INF/context.xml
sudo emacs /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml
```


```
<Context antiResourceLocking="false" privileged="true" >
<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0000:1" />
-->
</Context>
```

ipが下記の時    
45.45.45.45    

```
<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0000:1|45.45.45.45" />
</Context>
```



```
sudo systemctl restart tomcat
```


```
http://<your_domain_or_IP_address>:50000
```

で動く。


# maven動かしてみる

ただhello worldがコンソールに出るだけのサンプル。


```
sudo apt install maven
mvn -version
```

```
mvn -B archetype:generate \
  -DarchetypeGroupId=org.apache.maven.archetypes \
  -DgroupId=com.mycompany.app \
  -DartifactId=my-app
cd my-app
```

pom.xmlに下記を追加してコンパイル


```
  <properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
```


```
mvn compile
mvn package

java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
```




# macで設定する


```
#macでTomcatフォルダ作成
mkdir /Applications/Tomcat
#ソースを落としておく。apache-tomcat-9.0.20をTomcatに入れる。
#binに移動
cd /Applications/Tomcat/apache-tomcat-9.0.20/bin
#パーミッション変更
chmod 755 *.sh

#スタート
./startup.sh
#シャットダウン
./shutdown.sh
#設定ファイルはここ
cd /Applications/Tomcat/apache-tomcat-9.0.20/webapps
```

# IntelliJで動かす

eclispe版はまた今度。
tomcatインストールしたのはいいけど、どうやってIDEから実行するんだよ。ここで結構悩んだ。

1.JavaEEのWeb Applicationを選択する。

<img width="798" alt="スクリーンショット 2019-06-01 17.50.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64334/84f421d3-3248-cb66-ba66-30a9eb7c03d8.png">

2.+ボタンでTomcat ServerのLocalを選択
3.Configure...を選択

<img width="930" alt="スクリーンショット 2019-06-02 9.45.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64334/f6d9cb2d-1b58-37a6-e9ed-967e479f8465.png">

4.Tomcat HomeにインストールしたTomcatパスを設定

<img width="764" alt="スクリーンショット 2019-06-02 9.47.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64334/7ac70056-94fa-b603-847b-edbc5b7b1494.png">

5.実行する

[リソースを更新、リソースとクラスを更新、デブロイし直す、サーバー起動し直す]
の中から選んで実行。

<img width="323" alt="スクリーンショット 2019-06-02 9.50.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64334/ab30e7f9-4806-eb7a-f5fa-22a84e9bc151.png">


アクセスする
http://localhost:8080/


サンプル
https://github.com/miyamotok0105/rtm_training/tree/master/web1


<hr>

# Tomcat設定画面に入れるようにする

adminで12345678.

```:conf/tomcat-users.xml
<tomcat-users>
  <role rolename="manager-gui"/>
  <user username="admin" password="12345678" roles="manager-gui"/>
(略)
</tomcat-users>
```

設定画面
http://localhost:8080/manager/html

https://weblabo.oscasierra.net/java-tomcat7-manager-1/

# ゲッターとセッターを自動設定


<img width="380" alt="スクリーンショット 2019-07-06 10.51.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64334/89e90653-3b37-ed1b-4b2c-d38dd228bab6.png">

<img width="298" alt="スクリーンショット 2019-07-06 10.51.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64334/e3133391-7870-d3dd-9e82-e82cf286644c.png">



# 参考

tomcat9
https://linuxize.com/post/how-to-install-tomcat-9-on-ubuntu-18-04/#step-4-create-a-systemd-unit-file

maven
https://linuxize.com/post/how-to-install-apache-maven-on-ubuntu-18-04/
https://mslgt.hatenablog.com/entry/2018/03/27/074522

tomcatとintellij
少し古め
http://librastudio.hatenablog.com/entry/2013/08/23/014706