#はじめに
仕事の現場で「本番環境構築しといて」と言われたので本番環境構築中なのですが
「君の本来の作業はプロジェクト管理と開発だからね。」と言われました。
「え?インフラ構築はいつやれば?」と思った人のために構築手順(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で設定します。)
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を追加
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"
<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のレプリケーション設定はどうなっている?」と言われました。