1.

CentOS に Tomcat 9 / 10 をインストールする手順(systemd 起動 + manager-gui まで)

編集
この記事の要点
  • OpenJDK 11/17 をインストール後、Tomcat tarball を /opt/tomcat に展開
  • tomcat ユーザ / グループを作成して所有権を付与(root 起動は厳禁)
  • systemd unit /etc/systemd/system/tomcat.service を作成 → systemctl enable --now tomcat
  • firewalld で 8080/tcp を開放、本番は nginx リバプロ + 443 終端が定石
  • manager-gui を使うなら conf/tomcat-users.xmlmanager-gui ロール付与、context.xml で IP 制限解除
  • バージョン選定: Tomcat 9 = Java EE 8 / Tomcat 10 = Jakarta EE 9(パッケージ名 javax → jakarta)

前提

項目
OSCentOS 7 / 8 / Stream 9 / Rocky Linux 9
Tomcat9.0.x (Servlet 4.0, javax) または 10.1.x (Servlet 5.0, jakarta)
JavaTomcat 9 → Java 8/11/17、Tomcat 10 → Java 11/17/21
ポートHTTP 8080, Shutdown 8005, AJP 8009

手順 1: Java インストール

# CentOS 7
sudo yum install -y java-11-openjdk java-11-openjdk-devel

# CentOS 8 / Stream 9 / Rocky 9
sudo dnf install -y java-17-openjdk java-17-openjdk-devel

# 確認
java -version
# openjdk version "17.0.5" ...

# JAVA_HOME 設定
echo 'export JAVA_HOME=$(readlink -f $(which java) | sed "s:/bin/java::")' \
    | sudo tee /etc/profile.d/java.sh
source /etc/profile.d/java.sh
echo $JAVA_HOME

手順 2: tomcat ユーザ作成

セキュリティのため専用ユーザで動かします。root で動かすと侵入時の被害が拡大します。

sudo groupadd --system tomcat
sudo useradd -d /opt/tomcat -r -s /sbin/nologin -g tomcat tomcat

手順 3: Tomcat ダウンロードと展開

# 公式から最新版 URL を取得(例: 9.0.83)
VERSION=9.0.83
cd /tmp
wget https://dlcdn.apache.org/tomcat/tomcat-9/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz

# 展開
sudo mkdir -p /opt/tomcat
sudo tar xzf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat --strip-components=1

# 所有権
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R g+r /opt/tomcat/conf
sudo chmod g+x /opt/tomcat/conf
sudo chmod +x /opt/tomcat/bin/*.sh

# 構成確認
ls /opt/tomcat/
# bin  conf  lib  logs  temp  webapps  work ...

手順 4: systemd unit ファイル

# /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/jre-17-openjdk
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseG1GC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

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

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now tomcat
sudo systemctl status tomcat

# ログ
sudo journalctl -u tomcat -f
tail -f /opt/tomcat/logs/catalina.out

手順 5: firewalld でポート開放

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

# ブラウザで http://:8080/ → Tomcat 既定ページ

手順 6: manager-gui の設定(任意)

WAR を Web UI から配備したい場合のみ。本番では基本無効推奨。



    
    
    

デフォルトでは localhost からしかアクセスできないので、外部 IP 許可するには:



    
    
sudo chown tomcat:tomcat /opt/tomcat/conf/tomcat-users.xml
sudo systemctl restart tomcat

手順 7: WAR デプロイ

# 単純コピー方式(自動展開)
sudo cp myapp.war /opt/tomcat/webapps/
sudo chown tomcat:tomcat /opt/tomcat/webapps/myapp.war
# 数秒待つと /opt/tomcat/webapps/myapp/ に展開される
# http://server:8080/myapp/ でアクセス可

# ROOT に置きたい場合
sudo cp myapp.war /opt/tomcat/webapps/ROOT.war
# 既存 ROOT/ を退避してから

本番構成: nginx リバプロ + HTTPS

# /etc/nginx/conf.d/app.conf
server {
    listen 443 ssl http2;
    server_name app.example.com;

    ssl_certificate     /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Tomcat 側は 8080 を localhost バインドに変更(外部直アクセス遮断):


FAQ

Q: yum で Tomcat 入れられないの?
A: EPEL に tomcat パッケージはありますが、バージョンが古い & 構成が独特なので tarball 展開を推奨します。

Q: Tomcat 9 と 10 どちらを選ぶ?
A: 既存アプリの依存が javax.servlet なら 9、jakarta.servlet(Spring Boot 3.x や Jakarta EE 9+)なら 10。

Q: 起動時に Address already in use: bind
A: 8005/8080/8009 のいずれかが使用中。ss -tlnp | grep -E ':(8005|8080|8009)' で特定。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. tomcatインストール(CentOS)
  2. WARファイルのAutoDeploy設定
  3. tomcatの起動/停止(Linux, Mac)
  4. JRE(JVM)のJavaのバージョン確認方法
  5. エラー一覧
  6. CATALINA_HOMEの確認方法(Linux, Mac)
  7. 管理画面の開き方
  8. tomcatの起動確認方法
  9. tomcatの起動/停止ログとcatalina.log/catalina.outの違い
  10. CentOSにおけるポート開放方法
  11. Javaのバージョン変更方法(Mac編)