『GroupSession』無料版導入「インストールガイド：Linux + Tomcat」の個人的補足

## はじめに

『[GroupSession](https://groupsession.jp/index.html)』とは、
[日本トータルシステム株式会社](https://www.sjts.co.jp/)さんが提供されている、  
無料・ユーザ数無制限からスタートできるグループウェアです。  
無料版から有料版へのデータ移行も考慮されています。

※１~４ 2024.1.23に実施。
※５~７ 2024.5.13～2024.6.2に実施。

## 1. 「AlmaLinux 8」「OpenJDK 11」「Tomcat 9」を選択
- [ホーム > 製品情報 > 無料版GroupSession > 動作環境](https://groupsession.jp/products/gs_free.html#:~:text=%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83)
- [ホーム > ユーザーサポート > インストールガイド：Linux + Tomcat](https://groupsession.jp/support/setup_linux.html)

```
$ cat /etc/redhat-release
AlmaLinux release 8.6 (Sky Tiger)

OpenJDK11U-jdk_x64_linux_hotspot_11.0.22_7.tar.gz
apache-tomcat-9.0.85.tar.gz
gsession.war
```
※VPSは「[WebARENA Indigo](https://web.arena.ne.jp/indigo/)」のCPU：2コア、メモリ2GBを選択しました。  

※インストール自体は、この[インストールガイド](https://groupsession.jp/support/setup_linux.html)に従えば進められましたが、以下の設定を行わないと運用に入れませんでした。

## 2. 「.bash_profile」の修正（/root/.bash_profile）

#### 「/root/.bash_profile」全体
```
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
JAVA_HOME=/usr/local/java/jdk-11.0.22+7
PATH=$JAVA_HOME/bin:$PATH
export JAVA_OPTS='-Djava.security.egd=file:/dev/./urandom'	#(2)#
CATALINA_HOME=/usr/local/java/apache-tomcat-9.0.85
PATH=$CATALINA_HOME/bin:$PATH
export CATALINA_OPTS='-Xmx1024m -Xms512m'					#(1)#
export PATH
```

#### （１）「OutOfMemoryError」への対処  
```export CATALINA_OPTS='-Xmx1024m -Xms512m'```

（[インストールガイド](https://groupsession.jp/support/setup_linux.html)から引用抜粋）
>[Tomcatのメモリ割り当て](https://groupsession.jp/support/setup_08.html)   
>「OutOfMemoryError: Java heap space」や「OutOfMemoryError: PermGen space」が発生した場合に参考にして下さい。

>設定する値は下記を目安にしてください。  
>・メモリ最大使用量（-Xmx）搭載メモリの半分程度  
>・メモリ初期使用量（-Xms）Xmxで指定した数値の半分位  
>例として搭載メモリが2Gの場合は「-Xmx1024m -Xms512m」になります。

#### （２）Tomcatの起動が遅い件への対処
```export JAVA_OPTS='-Djava.security.egd=file:/dev/./urandom'```

起動が遅いなと思い、起動できてから見てみるとcatalina.outに次のログが記録されていましたので、


```
$ sudo tail -f /usr/local/java/apache-tomcat-9.0.85/logs/catalina.out
︙
org.apache.catalina.startup.Catalina.start Server startup in [37130] milliseconds
```
以下に記載の対処を行って起動時間の改善をしました。

- (Oracle Help Center) [乱数生成に伴う JVM の遅延の回避](https://docs.oracle.com/cd/F25597_01/document/products/E13153_01/wlcp/wlss40/configwlss/jvmrand.html)
- (DORA BENRI様) [JVM処理の遅延対策](https://clcce.com/?page_id=4348)
- (sbc-web様) [Tomcat8の起動が遅い問題の解決方法](https://sbc-web.hatenablog.jp/entry/2017/05/09/Tomcat8%E3%81%AE%E8%B5%B7%E5%8B%95%E3%81%8C%E9%81%85%E3%81%84%E5%95%8F%E9%A1%8C%E3%81%AE%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95)

## 3. OS起動時にTomcatを自動起動するようにする（/etc/rc.d/rc.local）
「/etc/rc.d/rc.local」の行末に次の２行を追記する。
```
source /root/.bash_profile
/usr/local/java/apache-tomcat-9.0.85/bin/startup.sh
```

## 4. GroupSessionのシステム時間の同期とタイムゾーンを合わせる
```$ sudo timedatectl set-timezone Asia/Tokyo```
- (Server World様) [AlmaLinux 9 : NTP : クライアントの設定](https://www.server-world.info/query?os=AlmaLinux_9&p=ntp&f=2)
- (Server World様) [AlmaLinux 9 : システムのタイムゾーンを設定する](https://www.server-world.info/query?os=AlmaLinux_9&p=timezone)


## 5. Tomcat と Apache連携

**（１）Apacheインストール**
- (Server World様) [AlmaLinux 9 : Apache httpd : インストール](https://www.server-world.info/query?os=AlmaLinux_9&p=httpd&f=1#google_vignette)

```
$ sudo rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux
$ sudo dnf install httpd
$ sudo systemctl enable httpd
$ sudo systemctl restart httpd
```

- [ホーム > ユーザーサポート> Tomcat と Apache連携](https://groupsession.jp/support/setup_apache.html)

>・ApacheとTomcatで同じサーバで動作させる場合

**（２）Tomcatの設定ファイル(server.xml)を編集**
```$ sudo vi /usr/local/java/apache-tomcat-9.0.85/conf/server.xml```

【変更前】
```
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!--
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443"
               maxParameterCount="1000"
               />
    -->
```
【変更後】
```
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector protocol="AJP/1.3"
               port="8009"
               redirectPort="8443"
               secretRequired="false" />
```


**（３）Apacheの設定ファイル(httpd.conf)を編集**  
- (nambei-x's blog様) [ApacheとTomcatの連携～URLの最後にスラッシュがないときに"Not Found"になる現象の回避方法](
http://nambei-x.seesaa.net/article/262046989.html)

```$ sudo vi /etc/httpd/conf/httpd.conf```

```
#----------最終行に追記します----------#

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
<Location /gsession >
ProxyPass ajp://localhost:8009/gsession
</Location>
```

**（４）SELinuxを記録のみにする**  
　※SELinuxが有効のままだった際にHTTPが開かず502エラーになってしまいTomcatとの連携がとれていないのかと勘違いした。

- (Server World様) [AlmaLinux 9 : SELinux : 動作モードの設定](https://www.server-world.info/query?os=AlmaLinux_9&p=selinux&f=1)

```$ sudo vi /etc/selinux/config```

```
SELINUX=permissive
```
```
$ sudo reboot
```

（補足：現時点TomcatとApacheの再起動コマンドは次の通り → Tomcatはサービス化すべきか。）
```
$ source /root/.bash_profile
$ bash /usr/local/java/apache-tomcat-9.0.85/bin/shutdown.sh
$ bash /usr/local/java/apache-tomcat-9.0.85/bin/startup.sh

$ sudo systemctl restart httpd
```


（これはまだ実施していません。）
- [ホーム > ユーザーサポート > 設定ガイド > Tomcatの簡単なチューニング](https://groupsession.jp/support/setup_07.html)

## 6. https対応（自己証明書）

- (コラボスタイル Developers様) [SAN 付きの自己署名証明書を作る](https://zenn.dev/collabostyle/articles/bd6f7e978c91b8)
- (Server World様) [AlmaLinux 9 : SSL 証明書を作成 (自己署名)](
https://www.server-world.info/query?os=AlmaLinux_9&p=ssl&f=1)

```
$ sudo dnf update openssl
$ openssl version

$ cd /etc/pki/tls/certs

# 有効期限が 3650日（約 10 年）の自己署名証明書を作成 #
$ sudo openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,DNS:*.*,DNS:*" -keyout localhost.key -out localhost.cer

$ sudo dnf install mod_ssl

$ sudo systemctl restart httpd
```

## 7. https対応（Let's Encryptの証明書を使う）
- (dbit.様) [ApacheでLet’s EncryptのSSL更新のために.well-knownだけをアクセス許可する方法。](https://dbit.jp/articles/location-match-not-well-known)
```$ sudo vi /etc/httpd/conf/httpd.conf```
（編集後）
```$ sudo systemctl restart httpd```

<p />

- (Server World様) [AlmaLinux 9 : SSL 証明書を取得 (Let's Encrypt)](https://www.server-world.info/query?os=AlmaLinux_9&p=ssl&f=2)
  - [snapd](https://www.server-world.info/query?os=AlmaLinux_9&p=snappy&f=1)のインストール
  - Certbot クライアントをインストール
  - Let's Encryptから証明書の取得
  ```$ sudo certbot certonly --webroot -w /var/www/html -d ${取得済みのFQDN}```

<p />

- (Server World様) [AlmaLinux 9 : Apache httpd : SSL/TLS の設定](https://www.server-world.info/query?os=AlmaLinux_9&p=httpd&f=3)
  - ※前章でmod_sslはインストールしてあるので、
  ```/etc/httpd/conf.d/ssl.conf```の編集（Let's Encryptで取得した証明書のパスに書き換え）から実施。
（編集後）
  ```$ sudo systemctl restart httpd```

（続く）

以上