本教程旨在記錄如何在CentOS 7上安裝Tomcat 8.5 。 Tomcat是一種實作了Java Servlet, Java Server Pages, Java Expression Language, 以及Java WebSocket 的一門技術。
預備知識
在開始安裝之前,需要使用擁有sudo權限的使用者或root使用者登入到目标伺服器。強烈推薦使用具有sudo權限的使用者,而不是直接使用root使用者直接作業系統。如果現在還沒有具有sudo權限的使用者,根據以下教程将會建立該使用者。
安裝OpenJDK
Tomcat 8.5 需要JDK7及其以上版本,本教程中我們将在CentOS 7上使用JDK 8作為預設的java開發運作時環境。
JDK 8的安裝指令如下:
$ sudo yum install java-1.8.0-openjdk-devel
建立tomcat系統使用者
直接使用root使用者運作Tomcat具有一定的安全風險,是以我們不推薦這樣做。我們會在/opt/tomcat目錄下建立一個新的使用者群組來運作Tomcat服務:
$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
下載下傳Tomcat
我們将從Tomcat下載下傳頁面擷取Tomcat 8.5.x.
将目錄切換至/tmp,并使用wget下載下傳zip類型的檔案:
$ cd /tmp
$ wget http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.zip
下載下傳完成後,解壓該檔案,并移動至/opt/tomcat目錄:
$ unzip apache-tomcat-*.zip
$ sudo mkdir -p /opt/tomcat
$ sudo mv apache-tomcat-8.5.37 /opt/tomcat/
Tomcat 8.5 更新較為頻繁,為了能夠更好的控制其版本和更新,将建立latest符号連結指向Tomcat的安裝目錄:
$ sudo ln -s /opt/tomcat/apache-tomcat-8.5.37 /opt/tomcat/latest
為我們之前建立的Tomcat使用者增加通路權限,更改tomcat目錄的使用者群組的所有者為tomcat:
$ sudo chown -R tomcat: /opt/tomcat
為tomcat的bin目錄下的腳本檔案賦可執行權限:
$ sudo sh -c 'chmod +x /opt/tomcat/latest/bin/*.sh'
建立一個系統守護單元檔案
為了讓tomcat以服務的方式運作,在/etc/systemd/system/目錄下建立一個具有如下内容的tomcat.service檔案:
[Unit]
Description=Tomcat 8.5 servlet container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
通知系統守護程序,我們建立了新的系統守護單元檔案:
$ sudo systemctl daemon-reload
$ sudo systemctl start tomcat
檢查tomcat服務的運作狀态:
$ sudo systemctl status tomcat
結果如下:
tomcat.service - Tomcat 8.5 servlet container
Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2018-03-31 16:30:48 UTC; 3s ago
Process: 23826 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 23833 (java)
CGroup: /system.slice/tomcat.service
└─23833 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.security.egd=fi...
如果沒有報告錯誤,就可以設定開機自啟動了:
$ sudo systemctl enable tomcat
調整防火牆
如果伺服器已經開啟防火牆保護,并且你需要從外部網絡通路tomcat服務,那麼就需要開啟8080端口:
$ sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
$ sudo firewall-cmd --reload
在大多數案例中個,生産環境下tomcat服務都将使用負載均衡和反向代理,是以僅将8080端口的通路權限開放給内部網絡将是最佳實踐
配置Tomcat的Web管理器
到目前為止,tomcat服務我們已經安裝完成,并可以通過8080端口通路到該服務,但我們無法通路Tomcat的Web管理器,因為我們還沒有建立相應的使用者。
Tomcat 使用者和角色都定義在了tomcat-users.xml中。
打開這個檔案,将會看到一些帶有注釋的配置執行個體:
$ sudo nano /opt/tomcat/latest/conf/tomcat-users.xml
你可以在tomcat-users.xml檔案中按照如下樣式配置Web管理器(manager-gui 和 admin-gui)的通路使用者。為了提高安全性,強烈建議更換使用者名和密碼:
<tomcat-users>
<!--
Comments
-->
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="admin" password="admin_password" roles="admin-gui,manager-gui"/>
</tomcat-users>
Tomcat管理器預設隻允許在本地通路,如果想在遠端通路tomcat Web管理器,你可以做如下配置(這樣會降低安全性)。
取消/opt/tomcat/latest/webapps/manager/META-INF/context.xml檔案中的注釋:
<Context antiResourceLocking="false" privileged="true" >
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>
取消/opt/tomcat/latest/webapps/host-manager/META-INF/context.xml檔案的注釋:
<Context antiResourceLocking="false" privileged="true" >
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>
如果想從指定的IP通路到Web管理器,除了取消注釋外,你還需要将公網IP添加到清單中,假設公網IP為41.41.41.41,并且隻從該IP通路Web管理器:
修改/opt/tomcat/latest/webapps/manager/META-INF/context.xml檔案:
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|41.41.41.41" />
</Context>
修改/opt/tomcat/latest/webapps/host-manager/META-INF/context.xml檔案:
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|41.41.41.41" />
</Context>
測試安裝
在浏覽器中輸入:http://41.41.41.41:8080,通路tomcat首頁
在浏覽器中輸入:http://41.41.41.41:8080/manager/html,可以在該頁面完成部署,取消部署,啟動,停止,重載應用程式。