2.

Tomcat の AutoDeploy 設定(autoDeploy / unpackWARs /

編集
この記事の要点
  • conf/server.xml で WAR を webapps/ に置くだけで自動展開
  • autoDeploy = Tomcat 稼働中の追加 / 更新を監視、deployOnStartup = 起動時の自動展開
  • デフォルトで 10 秒間隔backgroundProcessorDelay)で webapps/ をスキャン
  • 本番環境では autoDeploy="false" 推奨。誤上書きや中途半端な展開リスクを避ける
  • 正しい本番デプロイ: catalina.sh stopcp app.war webapps/catalina.sh start
  • unpackWARs="false" なら展開せず WAR のまま実行(ディスク節約、起動わずかに高速)

AutoDeploy とは

Tomcat の autoDeploy$CATALINA_BASE/webapps/ ディレクトリを定期的に監視し、新規 WAR ファイルやディレクトリの追加・更新・削除を検知して自動で展開・反映する機能です。開発時は便利ですが、本番では計画外の再起動を招くため通常無効化します。

conf/server.xml の設定箇所


  
    

    

      

        
      
    
  

各属性の意味

属性デフォルト意味
appBasewebappsWAR / コンテキストの配置ディレクトリ
autoDeploytrue稼働中の追加・更新を監視して自動展開
deployOnStartuptrueTomcat 起動時に appBase 配下を一括展開
unpackWARstrueWAR を解凍してディレクトリで実行(false なら WAR のまま)
deployIgnoreなし無視するファイル名の正規表現
copyXMLfalseWAR 内 META-INF/context.xmlconf/Catalina/localhost/ にコピー

監視間隔

autoDeploy の監視間隔は 階層の backgroundProcessorDelay 属性(秒)で決まります。デフォルト 10 秒:


  

本番で監視は不要なら -1 で停止可能。ただし autoDeploy=false の方が一般的。

WAR 配置からアクセスまで

# 開発環境 (autoDeploy=true) の場合
cp myapp.war $CATALINA_HOME/webapps/

# 10 秒後にログ確認
tail -f $CATALINA_HOME/logs/catalina.out
# INFO: Deploying web application archive [/opt/tomcat/webapps/myapp.war]
# INFO: Deployment of web application archive ... has finished in 1,234 ms

# 展開先
ls -la $CATALINA_HOME/webapps/
# drwxr-xr-x  myapp/        ← unpackWARs=true で自動展開
# -rw-r--r--  myapp.war

# アクセス
curl http://localhost:8080/myapp/

本番環境の推奨設定

本番では autoDeploy / deployOnStartup を無効化し、明示的にデプロイする運用が安全です:


デプロイ手順:

# 1. Tomcat 停止
sudo systemctl stop tomcat
# または
$CATALINA_HOME/bin/shutdown.sh

# 2. 旧アプリ削除
rm -rf $CATALINA_HOME/webapps/myapp/
rm    $CATALINA_HOME/webapps/myapp.war

# 3. 新 WAR 配置
cp /tmp/myapp-new.war $CATALINA_HOME/webapps/myapp.war
chown tomcat:tomcat   $CATALINA_HOME/webapps/myapp.war

# 4. work ディレクトリのクリア(古い JSP コンパイル結果)
rm -rf $CATALINA_HOME/work/Catalina/localhost/myapp/

# 5. 起動
sudo systemctl start tomcat

# 6. 確認
tail -f $CATALINA_HOME/logs/catalina.out
curl -I http://localhost:8080/myapp/

Manager Webapp 経由のデプロイ

無停止デプロイしたい場合は Tomcat Manager の HTTP API を使えます:

# conf/tomcat-users.xml に manager-script ロールを設定
# 

# 既存アプリの停止 → アンデプロイ → デプロイ
curl -u deploy:xxx \
  "http://localhost:8080/manager/text/undeploy?path=/myapp"

curl -u deploy:xxx \
  --upload-file myapp.war \
  "http://localhost:8080/manager/text/deploy?path=/myapp&update=true"

autoDeploy のリスク

リスクシナリオ対策
中途展開大きな WAR の cp 途中で Tomcat が展開開始 → クラスファイル欠落cp app.war.tmpmv app.war.tmp app.war
誤上書き運用ミスで間違った WAR を webapps へ → 即時反映本番は autoDeploy=false
セッション喪失再展開で webapp 再起動 → セッション消失セッション永続化、ローリングデプロイ
ログ肥大10 秒ごとの監視ログorg.apache.catalina.startup.HostConfig の log level を上げる

FAQ

Q: WAR を置いても展開されない
A: ① Tomcat ユーザにファイル読取権限があるか、② autoDeploy=true か、③ catalina.outFileNotFoundException 等のエラーが出ていないか確認。

Q: ディレクトリ展開を残したくない
A: unpackWARs="false" にすれば WAR のまま実行される。ただし JSP コンパイル時に work/ へキャッシュされる点は変わらず。

Q: コンテキストパスを変えたい
A: WAR 名を変える(myapp##v2.war/myapp、パラレルデプロイ)、または conf/Catalina/localhost/myapp.xml を作成。

編集
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編)