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

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年智能血压计如何更精准监测家庭成员健康数据?
智能表格分析工具如何帮助普通人快速处理复杂数据?
智能表格分析工具如何帮助普通人快速处理复杂数据?
2026年社区推行“宠物公约”,养宠邻居和普通居民的看法究竟有什么不同?
2026年社区推行“宠物公约”,养宠邻居和普通居民的看法究竟有什么不同?
天津市丧葬灵棚服务#白事一站式服务,价格公道,快速上门
天津市丧葬灵棚服务#白事一站式服务,价格公道,快速上门
农村白事中“报丧”、“守灵”、“吊唁”等环节具体有哪些规矩和礼节?
农村白事中“报丧”、“守灵”、“吊唁”等环节具体有哪些规矩和礼节?
岳阳市殡葬一条龙公司电话%丧葬灵棚服务,丧葬服务一条龙办理
岳阳市殡葬一条龙公司电话%丧葬灵棚服务,丧葬服务一条龙办理
湖州市殡葬一条龙公司电话%丧事灵堂布置,丧事办理
湖州市殡葬一条龙公司电话%丧事灵堂布置,丧事办理
2026年,数字技术如区块链在器官捐献志愿登记与信息溯源方面有哪些新应用?
2026年,数字技术如区块链在器官捐献志愿登记与信息溯源方面有哪些新应用?
遵义市灵堂鲜花#白事殡葬一条龙服务,价格公道,快速上门
遵义市灵堂鲜花#白事殡葬一条龙服务,价格公道,快速上门
2026年街头艺术创作如何逐步走向合法化,并为从业者提供清晰的职业发展路径?
2026年街头艺术创作如何逐步走向合法化,并为从业者提供清晰的职业发展路径?
放疗口腔溃疡用什么药
放疗口腔溃疡用什么药
小区公共收益不透明,业主该如何有效行使审计权来维护自身权益?
小区公共收益不透明,业主该如何有效行使审计权来维护自身权益?
南宁市一条龙殡葬服务%丧事拍摄,白事服务
南宁市一条龙殡葬服务%丧事拍摄,白事服务
2026年市面上哪些常见产品,可能使用了来自废旧衣物的再生材料?
2026年市面上哪些常见产品,可能使用了来自废旧衣物的再生材料?
汕头市丧事悼念会布置#殡葬礼仪服务公司,收费合理
汕头市丧事悼念会布置#殡葬礼仪服务公司,收费合理
天津市殡葬一条龙公司电话%葬礼仪式,白事一条龙办理
天津市殡葬一条龙公司电话%葬礼仪式,白事一条龙办理