本篇介紹如何在 CentOS Linux 7 系統之下安裝 Tomcat 9 伺服器,並設定 systemd 啟動指令稿。

Tomcat 是一套由 Apache Software Foundation 所發展的開放原始碼網頁伺服器與 servlet 容器,是目前最普遍被使用的 Java 應用程式伺服器(application server)之一,以下我們以 CentOS Linux 7.5 的環境為例,示範安裝 Tomcat 9.0.12 的過程。


若需要安裝 Tomcat 8 或 Apache 網頁伺服器,可以參考 CentOS Linux 7 安裝 Apache 2 與 Tomcat 8 的教學

更新 CentOS 系統

安裝之前,先將 CentOS 系統更新一下:

sudo yum update

安裝 Java 8

Tomcat 9 需要 Java 8 以上的環境,而 CentOS 7 官方的套件庫就有收錄 Java 8,所以用 yum 安裝即可:

sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

安裝好之後,檢查一下 Java 的版本:

java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

安裝 Tomcat 9

Tomcat 的官方網站下載最新的 Tomcat 9 壓縮檔:

wget http://ftp.tc.edu.tw/pub/Apache/tomcat/tomcat-9/v9.0.12/bin/apache-tomcat-9.0.12.zip

建議同時下載 SHA512 的檢查碼:

wget https://www.apache.org/dist/tomcat/tomcat-9/v9.0.12/bin/apache-tomcat-9.0.12.zip.sha512

sha512sum 檢查一下檔案是否完好:

# 計算 SHA512 檢查碼
sha512sum apache-tomcat-9.0.12.zip
012d9513a3fa1e96d2d5ad9b1cf3949b864c1eb5b1af02946bf5a8d4d0966075d0125184172dff0ea94c92509af0af034f310c622730544702a73586756c1bf6  apache-tomcat-9.0.12.zip

跟原始的 SHA512 檢查碼做比較:

# 原始 SHA512 檢查碼
cat apache-tomcat-9.0.12.zip.sha512
012d9513a3fa1e96d2d5ad9b1cf3949b864c1eb5b1af02946bf5a8d4d0966075d0125184172dff0ea94c92509af0af034f310c622730544702a73586756c1bf6 *apache-tomcat-9.0.12.zip

兩個檢查碼完全相同,就代表沒有問題,接著進行解壓縮。

# 解壓縮
unzip apache-tomcat-9.0.12.zip

這裡我們打算將 Tomcat 安裝在 /opt 目錄下,如果要放在其他地方,可以自己修改。

# 解壓縮
sudo mv apache-tomcat-9.0.12 /opt/tomcat

新增 Tomcat 帳號

在正常的狀況下,由於安全性的考量,系統的各項服務都不建議使用 root 權限來執行,所以我們必須新增一個專門用於執行 Tomcat 服務的 tomcat 帳號:

# 新增 tomcat 系統帳號
useradd -r tomcat --shell /bin/false

設定檔案的群組與權限,有些目錄需要讓 Tomcat 寫入資料,必須將目錄的擁有者改為 tomcat:

# 設定檔案權限
cd /opt/tomcat
sudo chgrp -R tomcat *
sudo chmod g+rwx conf
sudo chmod -R g+r conf
sudo chown -R tomcat webapps/ work/ temp/ logs/
sudo chmod +x /opt/tomcat/bin/*.sh

設定 Systemd 啟動指令稿

建立 /etc/systemd/system/tomcat.service 這個 Systemd 的設定檔:

sudo vi /etc/systemd/system/tomcat.service

檔案內容如下:

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

[Service]
User=tomcat
Group=tomcat
Type=forking
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure

Environment='CATALINA_OPTS=-Xms512M -Xmx8192M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

[Install]
WantedBy=multi-user.target

存檔之後,要重新載入 Systemd,讓新的 Tomcat 設定檔生效:

# 重新載入 systemd
sudo systemctl daemon-reload

將 Tomcat 伺服器設定為開機自動啟動:

# 設定開機自動啟動 Tomcat
sudo systemctl enable tomcat

立即啟動 Tomcat 服務:

# 立即啟動 Tomcat
sudo systemctl start tomcat

查看 Tomcat 服務的狀態:

# 查看 Tomcat 服務狀態
systemctl status tomcat
● tomcat.service - Apache Tomcat 9
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-10-11 13:34:10 CST; 9s ago
  Process: 30274 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 30288 (java)
   CGroup: /system.slice/tomcat.service
           └─30288 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.l...

Oct 11 13:34:10 mail.nchc.org.tw systemd[1]: Starting Apache Tomcat 9...
Oct 11 13:34:10 mail.nchc.org.tw systemd[1]: Started Apache Tomcat 9.

如果 Active 欄位呈現 active (running) 的話,就表示 Tomcat 有正常啟動了。

開啟瀏覽器,在網址列輸入 http://伺服器IP位址:8080/,應該就可以看到 Tomcat 9 的網頁了。

Tomcat 9 網頁

停止 Tomcat 服務

如果要停止 Tomcat 服務,則執行:

# 停止 Tomcat
sudo systemctl stop tomcat
# 取消開機自動啟動
sudo systemctl disable tomcat

Tomcat 網頁管理介面

如果想要使用 Tomcat 的網頁管理介面,則必須新增 Tomcat 管理者的帳號,編輯 tomcat-users.xml 這個設定檔:

sudo vi /opt/tomcat/conf/tomcat-users.xml

在這個設定檔中加入以下幾行:

<role rolename="admin-gui" />
<user username="USERNAME" password="PASSWORD" roles="manager-gui,admin-gui"
</tomcat-users>

其中 USERNAMEPASSWORD 請換成自己的帳號與密碼。

在預設的狀況下,Tomcat 僅允許來自於本機的連線存取網頁管理介面,如果要解除這個限制,就要修改 context.xml 這個設定檔:

sudo vi /opt/tomcat/webapps/manager/META-INF/context.xml

將下面這一行移除,或是依照自己的狀況修改:

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

參考資料:RoseHosting