本篇介紹如何在 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 服務
如果要停止 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>
其中 USERNAME
與 PASSWORD
請換成自己的帳號與密碼。
在預設的狀況下,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