LoginSignup
17
15

More than 1 year has passed since last update.

CentOS7にTomcat8をインストールして自動起動設定

Last updated at Posted at 2016-12-01

はじめに

仕事の現場で「本番環境構築しといて」と言われたので本番環境構築中なのですが
「君の本来の作業はプロジェクト管理と開発だからね。」と言われました。
「え?インフラ構築はいつやれば?」と思った人のために構築手順(Tomcat8)まとめました。

Tomcat8のインストール

まずtomcat用のユーザーを追加
sudo useradd -s /sbin/nologin tomcat

ダウンロード
curl -O http://ftp.jaist.ac.jp/pub/apache/tomcat/tomcat-8/v8.0.39/bin/apache-tomcat-8.0.39.tar.gz

/usr/local/配下に配備し権限設定変更
tar -xzvf apache-tomcat-8.0.39.tar.gz
sudo mv apache-tomcat-8.0.39 /usr/local/tomcat
sudo chown -R tomcat:tomcat /usr/local/tomcat

CentOS 7 からサービスは systemd が管理
そのためサービスに登録するためにsystemd unitファイルを作成
sudoedit /etc/systemd/system/tomcat.service

[Unit]
Description=Apache Tomcat 8
After=syslog.target network.target

[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/usr/local/tomcat/tomcat.pid
RemainAfterExit=yes

ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecReStart=/usr/local/tomcat/bin/shutdown.sh;/usr/local/tomcat/bin/startup.sh

[Install]
WantedBy=multi-user.target

権限変更
sudo chmod 755 /etc/systemd/system/tomcat.service

サービスに登録(自動起動が有効になる)
sudo systemctl enable tomcat

systemd Unit設定の補足説明

After=syslog.target network.target
依存関係を記載します。syslogとnetworkが起動してから起動

Type=oneshot
Typeを指定します。Typeは以下の様なものがあります。

simple    指定したコマンドがフォアグランドで実行する場合。
forking   子プロセスをバックグランドで起動して最初のコマンドは終了する場合。
oneshot   一度だけコマンドを実行する場合。
notify    ライブラリ関数sd_notify()を使用する場合。
dbus      D-Busを使用する場合。

Typeがoneshotの場合はコマンドの実行終了後もステータスを起動中にするため
systemdに起動中であることを知らせる必要があります。
そのための設定が以下です。
RemainAfterExit=yes

Tomcatの起動設定のTypeを何にするかですが、oneshotかforkingのようです。
どちらにするべきかよくわかりません。yumでインストールしたTomcatはforkingのようです。
しかし、forkingはできるだけ使用しないようが良いという情報もあります。
とりあえず、今回はoneshotにしました。

WantedBy=multi-user.target
起動レベルを設定します。multi-user.targetはrun level 3です。

上記設定で自動起動することは確認できました。

Tomcatの初期設定

インストール後の初期設定を簡単にまとめておきます。

不要なWebアプリを削除
sudo rm -rf /usr/local/tomcat/webapps/*

不要なログ設定を無効(catalina.outだけにします。アクセスログはserver.xmlで設定します。)

/usr/local/tomcat/conf/logging.properties
handlers = java.util.logging.ConsoleHandler
.handlers = java.util.logging.ConsoleHandler

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter

ログ出力先を変えたい場合は以下のファイルにEnvironmentを追加

/etc/systemd/system/tomcat.service
PIDFile=/usr/local/tomcat/tomcat.pid
Environment="CATALINA_OUT=/var/log/tomcat/catalina.log"

※unitファイル変更後、すぐに反映したい場合は以下のコマンドを実行
sudo systemctl daemon-reload

アクセスログをローテーションなしに設定し、出力パスを変更(logrotateに任せます。)
rotatable="false"
directory="/var/log/tomcat"

/usr/local/tomcat/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve"
    directory="/var/log/tomcat"  prefix="access" suffix=".log"
    pattern="common" rotatable="false" />

その他

今回はfirewalldの設定を変えなくてもアクセスできましたが、
tomcatにアクセスできない場合はfirewalldの設定を確認してみてください。

参考
tomcat
http://weblabo.oscasierra.net/installing-tomcat8-centos7-1/

systemd
http://qiita.com/masami256/items/ef0f23125cf8255e4857
http://www.slideshare.net/enakai/linux-27872553

最後に

これで一通りインフラ構築ができたので、やっと開発に入れるなと思ったら
「PostgreSQLのレプリケーション設定はどうなっている?」と言われました。

17
15
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15