tomcat是java語言編寫的軟件
JVM是java虛擬機的縮寫
java虛擬機本質就是一個程序,當它在命令行上啓動的時候,就開始執行保存在某字節碼文件中的指令。
java語言的可移植性正是建立在java虛擬機的基礎上。任何平臺只要裝有針對該平臺的java虛擬機,字節碼文件(.class)就可以在該平臺上運行。這就是一次編譯處處運行
關於不同語言的編譯:
c語言(編譯性語言):源碼 不同的CPU架構 需要相同的代碼根據不同的操作系統進行重新編譯
java語言(一次編譯處處運行):jdk包含java虛擬機;java代碼運行在java虛擬機中;不同的操作系統可以使用相同的java代碼 ,只是需要不同的jdk;java虛擬機提供了相同的環境;
tomcat基於java開發的web服務
tomcat和nginx的區別:
nginx僅支持靜態資源,而tomcat則支持java開發的jsp動態資源和靜態資源
nginx適合做前端負載均衡,而tomcat適合做後端應用服務處理
通常情況下,企業會使用nginx+tomcat結合使用,由nginx處理靜態資源,tomcat處理動態資源
nginx+PHP處理動態資源
tomcat單獨就可以處理動態資源
JVM JRE jdk三者的區別:
1、JVM是java虛擬機
2、JRE 是java的運行環境(包含java虛擬機)
3、jdk是java的開發工具(包含JRE(JRE包含java虛擬機))
tomcat快速安裝
1、rpm方式安裝jdk
上傳軟件包到/opt目錄下
鏈接:https://pan.baidu.com/s/1tm1sxTO7bo40S_vcLuZZnw
提取碼:ctk7
鏈接:https://pan.baidu.com/s/1n4g2C2wLlfahFoSFo0GPqA
提取碼:opru
jdk的下載去Oracle官網下載
https://www.oracle.com/cn/java/technologies/javase/javase-downloads.html
tomcat去清華源可以下載或者去tomcat官網
http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/
rpm -ivh jdk-8u102-linux-x64.rpm
mkdir /app/
tar xf apache-tomcat-8.0.27.tar.gz -C /app/
/app/apache-tomcat-8.0.27/bin/startup.sh
2、tomcat啓動慢解決方案
查看沒優化之前的啓動時間
[root@tomcat02 opt]# grep 'Server startup' /app/apache-tomcat-8.0.27/logs/catalina.out
22-Jun-2020 06:38:39.904 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 558 ms
優化方案
解決tomcat啓動時產生session隨機數作爲id導致啓動慢的問題
vi /usr/java/jdk1.8.0_102/jre/lib/security/java.security
117 securerandom.source=file:/dev/urandom
tomcat目錄結構
bin 主要包含啓動關閉tomcat的腳本和依賴文件
conf tomcat配置文件目錄
lib tomcat運行需要加載的jar包 類似於PHP的模塊概念
LICENSE 通知信息
logs 在運行過程中產生的日誌文件
NOTICE 通知版本信息
RELEASE-NOTES 版本特性
RUNNING.txt 幫助文件
temp 存放臨時文件 上傳的代碼包解壓時會臨時存放在temp目錄下
webapps 站點目錄
work tomcat運行時產生的緩存文件
核心配置文件
/app/apache-tomcat-8.0.27/conf/server.xml
原理圖解釋:
1、整個tomcat就是一個server
2、connector連接器:支持HTTP https ajp三種協議 不同的協議不同的端口
3、連接器將請求轉發給 engine引擎 引擎處理請求,默認引擎是catalina,匹配host區域站點
用戶訪問tomcat代理(proxy),代理通過請求頭將訪問連接拋給後端連接器,連接器通過service的配置將請求拋給後端引擎,引擎匹配host站點
一個tomcat實例一個server
一個server中包含多個connector,connector的主要功能是接受、響應用戶請求
service的作用:將connector關聯到engine(Catalina引擎中)
<Server port="8005" shutdown="SHUTDOWN"> 區域
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
資源區域
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
連接器區域
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
host區域 類似於nginx中的站點區域
tomcat部署zrlog博客項目
配置文件修改
129 <Host name="zrlog.oldboyedu.com" appBase="/code"
130 unpackWARs="true" autoDeploy="true">
131 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/log"
132 prefix="zrlog_access_log" suffix=".txt"
133 pattern="%h %l %u %t "%r" %s %b" />
134 </Host>
配置文件解釋
129 <Host name="域名" appBase="站點目錄"
130 unpackWARs="是否自動解壓war包" autoDeploy="true">
131 <Valve className="日誌級別格式" directory="日誌目錄"
132 prefix="日誌名字" suffix=".txt"
133 pattern="%h %l %u %t "%r" %s %b" />
134 </Host>
創建站點目錄
mkdir /code
放入war包
scp 10.0.0.12:/root/ROOT.war .
重啓tomcat服務
/app/apache-tomcat-8.0.27/bin/shutdown.sh
/app/apache-tomcat-8.0.27/bin/startup.sh
修改本地win的host文件,添加域名解析
訪問
zrlog.oldboyedu.com:8080
安裝數據庫 並創庫授權
mysql_secure_installation
mysql -uroot -p000000
create database zrlog;
界面操作:
tomcat配置basic認證
效果圖如下:當然了 這個是tomcat默認自帶的
訪問的是http://10.0.0.11:8080/host-manager
點擊取消 獲得設置用戶名和密碼的信息
編輯文件 設置密碼
vim /app/apache-tomcat-8.0.27/conf/tomcat-users.xml
39 <role rolename="admin-gui"/>
40 <user username="tomcat" password="123456" roles="admin-gui"/>
重啓tomcat服務
/app/apache-tomcat-8.0.27/bin/shutdown.sh
/app/apache-tomcat-8.0.27/bin/startup.sh
輸入用戶名tomcat 密碼123456
設置zrlog的basic認證
vim /code/ROOT/WEB-INF/web.xml
28 <security-constraint>
29 <web-resource-collection>
30 <web-resource-name>test</web-resource-name>
31 <!--匹配所有請求-->
32 <url-pattern>/admin/login/*</url-pattern>
33 </web-resource-collection>
34 <auth-constraint>
35 <!-- 只允許basicrole角色的用戶訪問 -->
36 <role-name>test100</role-name>
37 </auth-constraint>
38 </security-constraint>
39 <login-config>
40 <!--值可以是BASIC/DIGEST/CLIENT_CERT/FORM-->
41 <auth-method>BASIC</auth-method>
42 <!--認證提示信息-->
43 <realm-name>Default</realm-name>
44 </login-config>
配置test100的角色
vim /app/apache-tomcat-8.0.27/conf/tomcat-users.xml
39 <role rolename="admin-gui"/>
40 <role rolename="test100"/>
41 <user username="tomcat" password="123456" roles="admin-gui,test100"/>
42 </tomcat-users>
重啓tomcat服務
167 /app/apache-tomcat-8.0.27/bin/shutdown.sh
168 /app/apache-tomcat-8.0.27/bin/startup.sh
nginx+tomcat架構
數據庫遷移
1、nginx負載安裝數據庫
yum install -y mariadb-server
2、遷移數據庫
tomcat01節點上 關閉tomcat並備份數據
173 /app/apache-tomcat-8.0.27/bin/shutdown.sh
174 mysqldump -uroot -p000000 -B zrlog >zrlog.sql
scp zrlog.sql 10.0.0.3:/root
systemctl stop mariad
3、導入數據
nginx負載節點上 導入數據
mysql -uroot -p000000 <zrlog.sql
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| zrlog |
+--------------------+
授權允許網段訪問
grant all on *.* to root@'10.0.0.%' identified by "000000";
4、tomcat01節點 啓動tomcat並訪問測試
/app/apache-tomcat-8.0.27/bin/startup.sh
tomcat02部署
tomcat02刪除站點數據
rm -rf /app/apache-tomcat-8.0.27/
rm -rf /code/*
啓動tomcat
/app/apache-tomcat-8.0.27/bin/startup.sh
tomcat01數據複製到tomcat02
scp -r /app/apache-tomcat-8.0.27 10.0.0.12:/app
scp -r /code/* 10.0.0.12:/code/
修改站點目錄信息 作爲區分tomcat01 和tomcat02的標識
vim /code/ROOT/include/templates/default/header.jsp
61 <span class="slogan">tomcat02</span>
vim /code/ROOT/include/templates/default/header.jsp
61 <span class="slogan">tomcat01</span>
nginx節點安裝nginx 配置負載均衡
vim zrlog.conf
upstream java {
server 10.0.0.11:8080;
server 10.0.0.12:8080;
}
server {
listen 80;
server_name zrlog.oldboyedu.com;
root html;
index index.html index.htm;
location / {
proxy_pass http://java;
proxy_set_header Host $http_host;
}
}
systemctl start nginx
systemctl enable nginx
nginx+tomcat架構實現https
1、上傳證書
創建目錄 存放證書
mkdir /opt/cert/
2、修改nginx的zrlog.conf的配置文件
[root@lb01 cert]# cat /etc/nginx/conf.d/zrlog.conf
upstream java {
server 10.0.0.11:8080;
server 10.0.0.12:8080;
}
server {
listen 443 ssl;
ssl_certificate /opt/cert/Nginx/1_blog.oldqiang.com_bundle.crt;
ssl_certificate_key /opt/cert/Nginx/2_blog.oldqiang.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
root html;
index index.html index.htm;
location / {
proxy_pass http://java/;
proxy_set_header Host $http_host;
}
}
server {
listen 80;
server_name blog.oldqiang.com;
location / {
location / {
return 302 https://blog.oldqiang.com$request_uri;
}
}
}
3、修改win本地host解析
10.0.0.3 blog.oldqiang.com
4、修改tomcat配置文件中的域名信息和nginx中一致
vim /app/apache-tomcat-8.0.27/conf/server.xml
129 <Host name="blog.oldqiang.com" appBase="/code"
211 /app/apache-tomcat-8.0.27/bin/shutdown.sh
212 /app/apache-tomcat-8.0.27/bin/startup.sh
使用maven編譯java項目
1、安裝maven
rpm -ivh jdk-8u102-linux-x64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar xf apache-maven-3.6.0-bin.tar.gz
mv apache-maven-3.6.0 /usr/local/
ln -s /usr/local/apache-maven-3.6.0 /usr/local/maven
vim /etc/profile
export M2_HOME=/usr/local/maven
export PATH=${M2_HOME}/bin:$PATH
source /etc/profile
[root@tomcat01 ~]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_102, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_102/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
2、上傳java源碼 進行編譯
java代碼使用maven編譯:jar包 war包 可能會是兩種包之中的一個
注意:maven進行編譯的時候,一定要在源碼目錄下 其他目錄下找不到pom文件 會報錯
mvn package
執行編譯後 會下載一些依賴 這些下載源是在國外
3、修改maven爲國內源
vim /usr/local/maven/conf/settings.xml
160 <mirror>
161 <id>alimaven</id>
162 <name>aliyun maven</name>
163 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
164 <mirrorOf>central</mirrorOf>165 </mirror>
166 <mirror>167 <id>alimaven</id>
168 <mirrorOf>central</mirrorOf>169 <name>aliyun maven</name>
170 <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
171 </mirror>
不需要重啓 再次進行編譯即可
mvn package
會在目錄下生成一個target目錄 在這個目錄下會有war包
將war包放入tomcat的站點目錄下即可部署完成