欢迎光临殡葬白事网
详情描述

1. 配置Tomcat多端口

方法一:修改server.xml(最常用)

conf/server.xml 中添加新的 <Service> 配置:

<!-- 默认的8080端口服务 -->
<Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
        <Host name="localhost" appBase="webapps"
              unpackWARs="true" autoDeploy="true">
        </Host>
    </Engine>
</Service>

<!-- 新增8081端口服务 -->
<Service name="Catalina2">
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8444" />
    <Engine name="Catalina2" defaultHost="localhost">
        <Host name="localhost" appBase="webapps2"
              unpackWARs="true" autoDeploy="true">
        </Host>
    </Engine>
</Service>

还需要创建对应的目录:

cd $CATALINA_HOME
mkdir webapps2

方法二:使用多个Connector(同一服务不同端口)

<Service name="Catalina">
    <!-- 默认8080端口 -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <!-- 新增8081端口 -->
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8444" />

    <Engine name="Catalina" defaultHost="localhost">
        <Host name="localhost" appBase="webapps"
              unpackWARs="true" autoDeploy="true">
        </Host>
    </Engine>
</Service>

2. Vue3项目部署到Tomcat

步骤1:Vue3项目配置

vite.config.js(Vite项目):

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  // 关键配置
  base: '/my-vue-app/', // 指定部署路径
  build: {
    outDir: 'dist',
    assetsDir: 'static',
    // 生成hash文件名,避免缓存问题
    rollupOptions: {
      output: {
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
      }
    }
  }
})

vue.config.js(Vue CLI项目):

module.exports = {
  publicPath: '/my-vue-app/', // 部署路径
  outputDir: 'dist',
  assetsDir: 'static',
  filenameHashing: true,

  // 生产环境配置
  chainWebpack: config => {
    if (process.env.NODE_ENV === 'production') {
      config.output.filename('static/js/[name].[contenthash:8].js')
      config.output.chunkFilename('static/js/[name].[contenthash:8].js')
    }
  }
}

步骤2:处理路由问题

router/index.js

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  // history模式需要服务器配置
  history: createWebHistory('/my-vue-app/'),
  // 或使用hash模式(无需服务器配置)
  // history: createWebHashHistory(),
  routes: [
    // 你的路由配置
  ]
})

步骤3:构建Vue项目

# 生产环境构建
npm run build
# 或
yarn build

步骤4:部署到Tomcat

方案A:部署到webapps根目录(默认上下文)
# 1. 复制dist文件夹内容到Tomcat
cd /path/to/tomcat/webapps
rm -rf ROOT  # 如果需要替换默认应用
cp -r /path/to/vue-project/dist/* ROOT/

# 2. 或创建新应用目录
mkdir myapp
cp -r /path/to/vue-project/dist/* myapp/
# 访问:http://localhost:8080/myapp
方案B:部署到指定路径(带上下文)

创建 WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- 处理Vue Router的history模式 -->
    <error-page>
        <error-code>404</error-code>
        <location>/index.html</location>
    </error-page>
</web-app>

目录结构:

my-vue-app/
├── index.html
├── static/
│   ├── js/
│   ├── css/
│   └── img/
└── WEB-INF/
    └── web.xml

打包为WAR文件:

# 在dist目录中创建WEB-INF/web.xml后
cd dist
jar -cvf my-vue-app.war *
mv my-vue-app.war $CATALINA_HOME/webapps/

3. 完整部署示例

示例:配置两个端口分别部署不同Vue应用

server.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">

    <!-- 服务1:管理后台 (8080) -->
    <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />

        <Engine name="Catalina" defaultHost="localhost">
            <Host name="localhost" appBase="webapps"
                  unpackWARs="true" autoDeploy="true">

                <!-- 指定上下文路径 -->
                <Context path="/admin" docBase="/opt/apps/admin-vue"
                         reloadable="true" />
            </Host>
        </Engine>
    </Service>

    <!-- 服务2:用户前台 (8081) -->
    <Service name="UserService">
        <Connector port="8081" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8444" />

        <Engine name="UserService" defaultHost="localhost">
            <Host name="localhost" appBase="webapps2"
                  unpackWARs="true" autoDeploy="true">

                <Context path="" docBase="/opt/apps/user-vue"
                         reloadable="true" />
            </Host>
        </Engine>
    </Service>
</Server>

自动部署脚本 deploy.sh:

#!/bin/bash

# 部署脚本
TOMCAT_HOME="/opt/tomcat"
VUE_PROJECT="/opt/projects/vue-app"

echo "开始构建Vue项目..."
cd $VUE_PROJECT
npm run build

echo "备份旧版本..."
BACKUP_DIR="/opt/backup/$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR
cp -r $TOMCAT_HOME/webapps/myapp $BACKUP_DIR/ 2>/dev/null || true

echo "部署新版本..."
rm -rf $TOMCAT_HOME/webapps/myapp
mkdir -p $TOMCAT_HOME/webapps/myapp
cp -r $VUE_PROJECT/dist/* $TOMCAT_HOME/webapps/myapp/

# 添加web.xml处理history模式
cat > $TOMCAT_HOME/webapps/myapp/WEB-INF/web.xml << EOF
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <error-page>
        <error-code>404</error-code>
        <location>/index.html</location>
    </error-page>
</web-app>
EOF

echo "重启Tomcat..."
$TOMCAT_HOME/bin/shutdown.sh 2>/dev/null || true
sleep 5
$TOMCAT_HOME/bin/startup.sh

echo "部署完成!"

4. 配置Nginx反向代理(推荐)

对于生产环境,建议使用Nginx作为反向代理:

server {
    listen 80;
    server_name example.com;

    location /my-vue-app/ {
        proxy_pass http://localhost:8080/my-vue-app/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;

        # 处理Vue Router的history模式
        try_files $uri $uri/ /my-vue-app/index.html;
    }

    location /api/ {
        proxy_pass http://localhost:8081/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

5. 常见问题解决

问题1:刷新页面404

解决:配置web.xml的error-page或使用Nginx try_files

问题2:静态资源路径错误

解决:确保Vue配置中 publicPath 与部署路径一致

问题3:跨域问题

解决:配置Tomcat的CORS过滤器或在Nginx中配置代理

问题4:端口冲突

解决:检查端口占用 netstat -tlnp | grep 8080

总结

方案 优点 缺点
多Service 完全隔离,不同应用独立 配置复杂,资源占用多
多Connector 配置简单 共享同一服务资源
Nginx代理 性能好,功能丰富 需要额外部署Nginx

建议生产环境使用 Nginx + Tomcat多端口 的组合方式,既能灵活管理端口,又能获得更好的性能和安全性。

相关帖子
安阳市殡葬一条龙服务电话%丧葬灵棚策划,丧葬服务办理
安阳市殡葬一条龙服务电话%丧葬灵棚策划,丧葬服务办理
2026年针对灵活就业人员的社保补贴政策有哪些,具体申请条件和流程是什么?
2026年针对灵活就业人员的社保补贴政策有哪些,具体申请条件和流程是什么?
安阳市白事摄像服务#殡葬服务公司电话,一年365天
安阳市白事摄像服务#殡葬服务公司电话,一年365天
经期情绪波动是否与日常压力水平有关?如何从根源上管理长期压力?
经期情绪波动是否与日常压力水平有关?如何从根源上管理长期压力?
安阳市一条龙殡葬服务办理%白事花蓝,白事丧事一条龙
安阳市一条龙殡葬服务办理%白事花蓝,白事丧事一条龙
惠州市殡葬一条龙公司电话%丧葬跟拍录像,丧葬服务一条龙办理
惠州市殡葬一条龙公司电话%丧葬跟拍录像,丧葬服务一条龙办理
济宁市殡葬一条龙服务电话%白事录像,丧葬服务一条龙
济宁市殡葬一条龙服务电话%白事录像,丧葬服务一条龙
蚌埠市殡葬服务公司办理%丧事悼念会服务,办理白事服务
蚌埠市殡葬服务公司办理%丧事悼念会服务,办理白事服务
大同市殡葬摄像服务#正规殡葬公司,收费标准
大同市殡葬摄像服务#正规殡葬公司,收费标准
假离婚躲避过桥垫资债务?虚假离婚法律风险
假离婚躲避过桥垫资债务?虚假离婚法律风险
吉安市葬礼咨询#丧葬服务公司,收费标准,快速上门
吉安市葬礼咨询#丧葬服务公司,收费标准,快速上门
无锡市殡葬服务一站式办理%白事吊唁,丧事服务一条龙
无锡市殡葬服务一站式办理%白事吊唁,丧事服务一条龙
岳阳市殡葬服务车出租%丧事告别会策划,丧葬一条龙
岳阳市殡葬服务车出租%丧事告别会策划,丧葬一条龙
绵阳市白事葬礼#丧葬一条龙服务,正规专业
绵阳市白事葬礼#丧葬一条龙服务,正规专业
在家庭教育中,少数民族家庭的父母如何向孩子传授本民族的传统文化?
在家庭教育中,少数民族家庭的父母如何向孩子传授本民族的传统文化?
湖州市殡葬服务车租赁%丧事悼念会策划,白事一条龙
湖州市殡葬服务车租赁%丧事悼念会策划,白事一条龙
520这天给伴侣发红包,除了常见数字外还有哪些寓意美好的金额?
520这天给伴侣发红包,除了常见数字外还有哪些寓意美好的金额?
新的一年,对于新入职的员工,单位通常从何时开始为其缴存住房公积金?
新的一年,对于新入职的员工,单位通常从何时开始为其缴存住房公积金?
青岛市殡葬乐队#殡葬服务公司一条龙办理,是您的放心选择
青岛市殡葬乐队#殡葬服务公司一条龙办理,是您的放心选择
南宁市正规殡葬公司%殡葬花篮,丧葬服务租车
南宁市正规殡葬公司%殡葬花篮,丧葬服务租车