tomcat + nginx 部署各類工程的幾種方式

背景介紹

現在 linux 基本命令和簡單部署已經成基本功了。以下介紹都是使用 tomcat + nginx 進行部署

技能列表(多工程部署)

  1. 各 tomcat 環境變量配置及公共部分修改
  2. 使用 tomcat + nginx 部署 zip 包。自定義部署目錄
    2.1 一個 tomcat 啓動多個包
  3. 使用 tomcat + nginx 部署 war 包。使用默認目錄 + tomcat 部署管理
    3.1 nginx 反向代理 tomcat 部署管理頁面
    3.2 war 包部署進行單點替換
  4. 使用 tomcat + nginx 部署 war 包。自定義部署目錄
  5. 使用 tomcat + nginx 部署 常規靜態工程。
  6. 使用 nginx 部署 dist.zip 等 VUE \ REACT 靜態工程

多個 tomcat 環境變量配置及公共部分修改

export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# tomcat_tomcat_manage_8080
TOMCAT_HOME=/usr/local/tomcat_manage_8080
CATALINA_HOME=/usr/local/tomcat_manage_8080
CATALINA_BASE=/usr/local/tomcat_manage_8080
export TOMCAT_HOME CATALINA_HOME CATALINA_BASE
# tomcat_tomcat_manage_8082
TOMCAT_HOME_2=/usr/local/tomcat_doctor_8082
CATALINA_HOME_2=/usr/local/tomcat_doctor_8082
CATALINA_BASE_2=/usr/local/tomcat_doctor_8082
export TOMCAT_HOME_2  CATALINA_HOME_2  CATALINA_BASE_2

# tomcat_tomcat_manage_8083
TOMCAT_HOME_3=/usr/local/tomcat_manage_8083
CATALINA_HOME_3=/usr/local/tomcat_manage_8083
CATALINA_BASE_3=/usr/local/tomcat_manage_8083
export TOMCAT_HOME_3  CATALINA_HOME_3  CATALINA_BASE_3

# tomcat_tomcat_manage_8084
TOMCAT_HOME_4=/usr/local/tomcat_static_8084
CATALINA_HOME_4=/usr/local/tomcat_static_8084
CATALINA_BASE_4=/usr/local/tomcat_static_8084
export TOMCAT_HOME_4  CATALINA_HOME_4  CATALINA_BASE_4


# tomcat_tomcat_manage_8085
TOMCAT_HOME_5=/usr/local/tomcat_patient_8085
CATALINA_HOME_5=/usr/local/tomcat_patient_8085
CATALINA_BASE_5=/usr/local/tomcat_patient_8085
export TOMCAT_HOME_5  CATALINA_HOME_5  CATALINA_BASE_5


# tomcat_gateway_8086
TOMCAT_HOME_6=/usr/local/tomcat_gateway_8086
CATALINA_HOME_6=/usr/local/tomcat_gateway_8086
CATALINA_BASE_6=/usr/local/tomcat_gateway_8086
export TOMCAT_HOME_6  CATALINA_HOME_6  CATALINA_BASE_6
# tomcat_yy_8087
TOMCAT_HOME_7=/usr/local/tomcat_customer_8087
CATALINA_HOME_7=/usr/local/tomcat_customer_8087
CATALINA_BASE_7=/usr/local/tomcat_customer_8087
export TOMACT_HOME_7  CATALINA_HOME_7  CATALINA_BASE_7
# tomcat_message_8088
TOMCAT_HOME_8=/usr/local/tomcat_attachment_8088
CATALINA_HOME_8=/usr/local/tomcat_attachment_8088
CATALINA_BASE_8=/usr/local/tomcat_attachment_8088
export TOMACT_HOME_8  CATALINA_HOME_8  CATALINA_BASE_8

同時需要修改 tomcat 下 catalina.sh文件。具體路徑爲 : tomcat/bin/catalina.sh 。修改內容爲 :
在這裏插入圖片描述

接着修改 啓動文件 tomcat/conf/server.xml 主要是修改兩處端口號,各 tomcat 的端口號不能衝突

在這裏插入圖片描述

使用 tomcat + nginx 部署 zip 包。自定義部署目錄

除上述公共部分都需要修改之外。部署 zip 包有以下特殊需要修改之處。

需要修改 tomcat\conf\Catalina\localhost\XX.xml 文件。此處有幾個約定:

  1. xx.xml 文件名和上傳 zip 包名稱一致 。
    在這裏插入圖片描述
    其他屬性配置可參考百度上其他的說明。
  2. zip 包需要自己主動解壓

一個 tomcat 啓動多個包

即 增加多個 XX.xml 文件即可。如圖

在這裏插入圖片描述

使用 tomcat + nginx 部署 war 包。使用默認目錄 + tomcat 部署管理

除上述公共部分都需要修改之外。部署 war 包有以下特殊需要修改之處。

  1. 如果無需自定義存放目錄。則 jar 包可以直接上傳至
    /usr/local/taotao-manager-web/webapps
    在這裏插入圖片描述
  2. 啓動則可,tomcat 會自動給配置上下文根爲 war 包 名稱,即請求時,自動加上 /taotao-manager-web
  3. 存放到默認目錄,可以考慮使用 tomcat 自帶的部署管理頁面。這樣可以外網上傳 war 包進行熱部署。
    3.1 修改 /usr/local/taotao-manager-web/conf/tomcat-users.xml 新增圖片處。爲賬號密碼。
    在這裏插入圖片描述
    3.2 登錄管理頁面
    http://ip:8080/manager/html 點擊 undeploy 和 delpoy
    在這裏插入圖片描述
    3.3 修改 /usr/local/taotao-manager-web/webapps/manager/WEB-INF/web.xml 設置允許上傳包的大小
    在這裏插入圖片描述
    3.4 修改 nginx 上傳文件限制。2020年1月14日 今天剛剛發現。特此更新

記得 http 和 https 都需要更改
在這裏插入圖片描述

nginx 反向代理 tomcat 部署管理頁面

背景當我們有多個 tomcat 需要部署時,那麼對應的就有多個管理頁面需要被我們代理,這樣就又涉及更改 tomcat 的配置了
先介紹 tomcat 相關默認的目錄結構如下:
在這裏插入圖片描述

manager 文件名就是我們需要關注的地方。默認請求管理頁面的路徑爲
http://ip:8080/manager/html 文件名和路徑存在聯動性
那麼修改有以下步驟:

  1. 定義好自己的工程名稱 如 :patient-manager

  2. 在 nginx 中做好代理配置 。
    在這裏插入圖片描述

  3. rename manager 文件名爲 patient-manager
    在這裏插入圖片描述

  4. 成果
    在這裏插入圖片描述

war 包部署進行單點替換

最近往服務器上的tomcat上替換webapps裏的工程class文件,出現不能直接生效而是需要重啓才能生效的現象,非常影響效率,後才知道需要在tomcat目錄下的conf文件夾下的server.xml文件的host節點下加上如下配置:

<Context path="/" docBase="/usr/local/tomcat_patient_8085/webapps/"  debug="0" privileged="true" reloadable="true"/>

就可實現替換後重新加載的效果,另外需要注意的是,加了後可能會出現內存不足的情況,需要設置 一下jvm參數,修改tomcat目錄下的bin下的catalina.sh的內容,在“Execute The Requested Command ”下面加入如下語句:

JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"

使用 tomcat + nginx 部署 war 包。自定義部署目錄

使用自定義目錄,則需要放棄 管理頁面。暫時我也不知道怎麼配置。留作以後研究
在這裏插入圖片描述
不推薦在nginx代理的 URL 後增加 / 來屏蔽代理 URL 的上下文根,這樣管理頁面其他按鈕會報錯

使用 tomcat + nginx 部署 常規靜態工程。

  1. 使用 一個 WEB 殼子包裝啓動 。其實就是參照 使用 tomcat + nginx 部署 zip 包。自定義部署目錄

使用 nginx 部署 dist.zip 等 VUE \ REACT 靜態工程

以 VUE 項目舉例。多個 VUE 項目只是新增 nginx 配置和重命名文件夾即可

  1. 需要修改前端工程配置。
    修改上下文根
    在這裏插入圖片描述
    修改基礎請求頭 。不要斜槓 不要斜槓 不要斜槓 重要的事情說三遍
    在這裏插入圖片描述

  2. 修改 nginx 配置

worker_processes  2;
error_log  logs/error.log;
events {
worker_connections  1024;
}

# ...
# 反向代理
http {
    include mime.types;
    default_type application/octet-stream;
 
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    sendfile        on;
    keepalive_timeout  65;
 
    client_max_body_size 20M;
    client_body_buffer_size 10M;
    large_client_header_buffers 4 128k;
    
    # 這裏可以做集羣
    #upstream p1_server {
    #    server localhost:8081;
    #}
 
    # 這裏可以做集羣
    #upstream p2_server {
    #    server localhost:8082;
    #}
 
    server {
        listen 80;
        server_name 47.99.69.84;
        charset utf-8;
 
        proxy_connect_timeout 180;
        proxy_send_timeout 180;
        proxy_read_timeout 180;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarder-For $remote_addr;
		# 這裏指定剛剛我們的文件夾
        root /war; 
        
        # 總的項目路由,我偷懶直接寫在了同一個文件
        # 如果有很多可以在配置多個 conf 文件,使用 include 關聯進來
		# 這裏可以理解指定到 html 文件夾下的 index.html
        #location / {
        #    try_files $uri $uri/ /index.html; 
        #}
        
        # yeb-ud-web
        # 這裏就是剛剛我們在 vue 項目中 config/index.js 的配置 build.assetsPublicPath,
        # 也是 vue 項目中配置的 router 中的 base
		# 這裏可以理解指定到 html 文件夾下 yeb-ud-web 文件夾 的 index.html
        location /yeb-ud-web {
            try_files $uri $uri/ /yeb-ud-web/index.html; 
        }
		location @rewrites {
            rewrite ^(.+)$ /index.html last;
        }
        
        # yeb-cd-web
        # 這裏是項目二的配置
		# 這裏可以理解指定到 html 文件夾下 project2 文件夾 的 index.html
        location ^~ /yeb-cd-web { 
            try_files $uri $uri/ /yeb-cd-web/dist/index.html;
        }
        
		# 或者如下也行
		# 其他代表轉發 cookie 和 請求頭
		location / {
                 root E:/hbuildworkspace/yiyibang-doctor-h5/dist/build/h5;
                 index index.html index.htm;
                 add_header Access-Control-Allow-Origin *;
                 add_header Access-Control-Allow-Headers X-Requested-With;
                 add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
                 try_files $uri $uri/ /index.html;
        }
		
        # 這裏是 project1 配置需要調用的接口
		# 這裏就是在 vue 項目中 prod.env.js 的配置 BASE_API 
		#  proxy_pass http://p1_server; # 此處的 p1_server 對應的上面的配置 upstream p1_server 
		# {},這裏可以做集羣,我用不到,就簡單配置了
        location /yeb-doctor/ { 
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass https://zhyy.whyyy.com/yeb-doctor/ ;
        }
        
         # 這裏是 project1 配置需要調用的接口
		 # 這裏就是在 vue 項目中 prod.env.js 的配置 BASE_API
		 # 此處的 p2_server 對應的上面的配置 upstream p2_server 
		 # # # {},這裏可以做集羣,我用不到,就簡單配置了
        location /yeb-patient/ {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass  https://zhyy.whyyy.com/yeb-patient/; 
        }
	   
	   	location /yeb-attachment/ {
			proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass https://zhyy.whyyy.com/yeb-attachment/;
       }
	   
	   	location /yeb-customer-service/ {
			proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass https://zhyy.whyyy.com/yeb-customer-service/;
       }
	   
	    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        }      
    }
  
}

使用 nginx 部署多個常規靜態工程

所謂的常規靜態工程。就是傳統的 html + css + js 工程,區別於 VUE/REACT 等直接壓縮打包成一個 js 文件。
那麼部署常規靜態工程,其要點在於有效匹配對應的 URL 並進行硬盤路徑映射。比如

匹配

http://localhost:8686/yeb-doctor-mobile/xswz/doctor/d-login.html?companyId=ff8080816b266ad2016b2ac86e2a037f

中的 /yeb-doctor-mobile/xswz/ 映射到一個硬盤路徑
匹配另外一個 /xxxx/xxxx URL 映射到其他硬盤路徑

那麼對代碼有一個要求,即 html 引入的 css 和 js 寫的是文件的相對路徑
上配置

		 location  /yeb-doctor-mobile/xswz/  {
            alias   'E:/business_project/hospital/second_phase/workpace/yeb-yidong/0002/code/yeb-doctor-mobile/xswz/';
         }
		
		
		location /yeb-message/rest/ { 
		   proxy_pass  http://yiyibang.com.cn;      
		}

效果如圖 :對應的 html 和樣式都能加載成功
在這裏插入圖片描述
本地硬盤文件路徑效果爲 :
在這裏插入圖片描述

驗證結果

洋洋灑灑寫了比較多,驗證結果中間也貼了一些

  1. 在這裏插入圖片描述
  2. 在這裏插入圖片描述
  3. 在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章