ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Windows下InforSuiteAS部署实战:从环境准备到服务化

Windows下InforSuiteAS部署实战:从环境准备到服务化 前阵子接到一个部署任务一台上了年纪的Windows Server一个从老J2EE架构迁过来的业务系统中间件指定用中创的InforSuiteAS。老实说过去大部分时间都在Linux环境里折腾中间件Windows上跑企业级中间件总觉得有点“非主流”。但实际做完之后发现Windows部署这件事本身没有想象中那么难真正的坑都藏在环境准备、JDK版本、端口占用、服务权限这些不起眼的细节里。这篇就把InforSuiteAS在Windows环境下的完整部署过程写出来。不光是安装步骤还包括数据源配置、JVM调优、Windows服务化、常见故障排查这些实操中一定会碰到的东西。适合实施工程师、从开发转运维的同事以及项目上有国产中间件适配任务的团队参考。1. 一台Windows服务器上跑Java应用为什么选InforSuiteAS很多人第一次接触InforSuiteAS会有一个疑问项目里原来用Tomcat跑得好好的为什么要换成一个商业中间件这个问题的答案决定了你后续所有部署工作的方向。1.1 InforSuiteAS到底是什么InforSuiteAS是中创软件中间件推出的企业级Java应用服务器全称InforSuite Application Server。它实现了Java EE/Jakarta EE规范中的完整功能集合包括Servlet容器、JSP、EJB容器、JMS消息服务、JTA事务管理、JNDI命名服务、JDBC连接池等一系列能力。最核心的区别在于Tomcat只是一个Servlet容器它的定位是“能跑Web应用”。而InforSuiteAS是一个完整的企业级应用服务器定位是“能支撑企业级分布式应用”。如果你的业务系统只是简单的Spring Boot 内置Tomcat那确实不需要商业中间件但如果应用里有EJB、有JMS消息队列、有分布式事务或者应用是十年前的老架构依赖中间件提供的各种容器能力那Tomcat就真的顶不上去了。1.2 和Tomcat、WebLogic这些产品怎么选部署前的选型往往是项目层面定好的但作为实施人员你至少要知道手里的这个产品在整个生态里的位置这直接关联到后面的部署策略和排错思路。我用一张表说清楚几类产品的差异对比维度TomcatInforSuiteASWebLogic规范支持Servlet/JSP等Web规范Java EE完整实现Java EE完整实现EJB容器不支持支持支持JMS消息服务不支持支持支持分布式事务不支持支持支持自带管理控制台无靠第三方自带自带内存占用低中较高商业授权Apache免费商业收费商业收费从表里能看出来InforSuiteAS在功能定位上和WebLogic属于同一档。实际部署时你完全可以沿用过去部署WebLogic时的很多经验比如域Domain的概念、数据源DataSource的配置方式、应用发布流程这两者在设计思路上非常接近。1.3 部署前必须确认的四件事在动手安装之前建议先把下面这四件事确认一遍能省掉后面大量返工时间。第一操作系统版本。Windows Server 2016/2019/2022都可以Windows 10/11做开发测试机也没问题。但要注意系统必须是64位现在InforSuiteAS的新版本基本已经放弃32位环境了。第二JDK版本。这一步最容易踩坑。不同版本的InforSuiteAS对JDK版本要求不一样有的要求JDK8有的要求JDK11甚至新版已经支持JDK17。下载安装包之前先确认你拿到的产品和JDK版本是匹配的别装到一半才发现JDK版本不对。第三硬件资源。官方一般会给最低配置但我的经验是中间件本身至少要预留4GB内存磁盘空间预留10GB以上。注意这只是中间件自身的开销还没算上业务应用的内存占用。第四License授权。商业中间件必须有License才能完整启动License一般会绑定机器信息。申请License之前需要先拿到目标机器的机器码。这个后面安装完会提到怎么生成但这个步骤一定要提前做因为License审批走流程可能要几天。2. 环境准备和安装包选择这一步决定了后面少踩一半坑我遇到过不少同事下载完安装包双击就开始装装完了启动然后被各种奇怪的报错折腾半天。最后发现都是环境准备阶段的疏漏。Windows上部署中间件环境准备做得好后面的过程就是一路顺畅。2.1 JDK安装和JAVA_HOME配置先确认JDK版本。以我这次部署的版本为例要求JDK8。这里有个容易被忽略的点如果安装包自带JDK那你只需要关心系统里是否有别的高版本JDK会影响命令行的默认版本如果安装包不带JDK那你就要手动安装好对应版本的JDK。JDK8建议直接用官方安装包安装路径同样不要有中文和空格。装完配置环境变量JAVA_HOMED:\Java\jdk1.8.0_202 PATH%JAVA_HOME%\bin;%PATH%配置完环境变量一定要重新打开一个命令行窗口再验证新开窗口才会加载最新的环境变量java -version能正常打印出版本信息说明JDK这一步就过了。如果显示的版本不对先检查PATH环境变量里是不是被别的高版本JDK抢先了。Windows的PATH变量查找是按顺序来的排在前面的优先。2.2 安装包获取和版本核对InforSuiteAS的安装包一般通过项目渠道或者中创官方渠道获取。下载的时候注意几个点要Windows x64版本的安装包别下成Linux的要确认安装包版本和JDK版本是配套的这个在安装包的说明文档里都会写清楚最好记录一下安装包的MD5值或者文件大小防止传输过程中文件损坏。我见过安装包从服务器传到 Windows 机器上传完就缺了几个文件解压报错的。如果有条件下载后用官方提供的校验工具验证一下。2.3 安装过程的两种方式Windows下安装一般有两种形式一种是exe向导式安装一种是zip包解压即用。exe向导式比较简单双击执行按提示走。最关键的两个界面是安装路径和管理员账号密码。安装路径强烈建议直接用D:\InforSuiteAS这样简洁的目录不要用带空格的路径更不要装到C盘的Program Files下面。虽然现在多数安装包对带空格的路径兼容性变好了但中间件的很多脚本是老的shell风格空格在脚本解析时偶尔会出问题没必要冒这个险。zip包解压的话本质上也差不太多。解压后通常需要手动设置一些环境变量或者直接运行bin目录下的配置脚本。zip包方式的好处是方便做多版本共存和迁移你要部署多个环境的话复制一份目录就能用。安装完成后先看安装目录的结构心里有个数。典型的目录包括bin执行脚本、domain域配置和应用部署目录、lib核心库文件、logs日志这几个核心目录。后续所有操作基本都围绕这些目录展开。2.4 License文件安装启动之前先确认License。安装包里通常会有说明文档告诉你License文件应该放在哪个目录、文件名是什么。如果启动时提示License不合法先别怀疑是破解问题大概率就是机器码不匹配或者License文件放错位置。额外提醒一句生成机器码的时候最好在目标机器上直接生成不要拿自己的电脑生成然后想当然地认为通用。机器码通常是基于CPU、网卡MAC这些硬件信息生成的换一台机器就不一样了。我见过同事在测试机上申请的License到了生产机上怎么都激活不了最后还是重新申请了一套。3. 创建Domain并完成首次启动跑通管理台这个最重要的里程碑InforSuiteAS延续了企业级中间件的“域”思维。Domain是运行时的隔离单元一个Domain包含独立的配置、数据源、部署应用和日志。理解这个概念后面所有配置工作才有框架可依。3.1 Domain是什么为什么要先建域可以这样理解中间件就是你的一栋办公楼Domain就是楼里的一层办公室。不同办公室Domain之间的配置互相隔离互不影响。你在测试域里怎么折腾都行不会影响生产域。一个物理机器可以创建多个Domain用不同的端口区分。我在测试环境里就是这么干的——建了一个开发域和一个测试域数据库不同、配置不同、端口不同但共用一份中间件安装程序。3.2 创建Domain的具体流程安装完成后安装目录下会有一个创建域的入口可能是图形化向导也可能是命令行脚本。图形化向导的方式和WebLogic的配置向导类似按提示填就行。创建过程中需要注意几个参数Domain名称建议用环境名业务名的方式比如prod_erp、test_oa后面多个域的时候一看就明白是哪个环境。监听IP地址如果机器有多个网卡这里要指定中间件绑定哪个IP。对内提供服务就绑内网IP对外就绑外网IP。不清楚就暂时填0.0.0.0表示监听所有网卡后面按需收紧。端口号应用访问端口和管理台端口。要提前规划好别和Windows上其他服务冲突。管理员账号和密码重置密码在这里完成。不要用默认的改成一个强密码。命令行方式创建的话脚本里会要求传入类似domainName、port、hostName这些参数原理完全一样只是操作形式不同。3.3 首次启动成功和失败的标志Domain创建好之后进入domain目录找到对应的启动脚本在Windows上一般是.bat后缀用管理员身份运行cmd再执行启动。首次启动成功的标志有两个第一控制台没有报错并出现启动完成的提示比如类似“Server startup in xxx seconds”这样的信息第二浏览器能访问管理台地址登录管理台能看到当前Domain和运行状态。日志是排错的第一现场。启动相关的日志在domain\logs目录下比如server.log。控制台窗口没来得及看到的内容日志里都会有记录。首次启动最常见的失败有三类。第一类找不到Java报错信息提示JAVA_HOME相关的错误这种基本就是环境变量配置不对重开cmd窗口再试。第二类端口被占用报Address already in use需要找到占用端口的进程处理掉。第三类内存不够启动失败启动脚本里默认的堆内存参数太大机器物理内存撑不住这种情况需要去修改启动脚本里的JVM参数把-Xmx调小或者给机器加内存。4. 把业务应用真放上去数据源、部署包与访问路径配置中间件装好、管理台能打开这只是万里长征第一步。真正有价值的是把业务应用跑起来这里涉及数据源配置、应用部署、上下文根设置这三件事。4.1 数据源配置连接池参数是关键企业级应用通常把数据库连接池托管给中间件应用本身不直接创建JDBC连接而是通过JNDI从中间件拿到连接池里的连接。这种做法的好处是连接复用、统一管理、应用故障时连接池能自动恢复。配置数据源之前先把JDBC驱动jar包准备好。Oracle的驱动是ojdbc8.jar这类MySQL的是mysql-connector-java-8.x.jar。驱动jar要放到Domain的lib目录或者通过管理台的上传功能部署。这一步很多人会忽略等应用启动后报ClassNotFoundException才想起来。数据源配置的核心在管理台里操作新建数据源录入这些信息配置项推荐值说明JNDI名称jdbc/erpDB应用通过这个名字引用连接池数据库URLjdbc:mysql://localhost:3306/erp按实际数据库填写用户名业务专用账号不要用root这种超级权限账号初始连接数5启动时创建的连接数最大连接数20应用峰值时的上限最小空闲连接5连接池保持的最小空闲数连接超时60000单位毫秒获取连接最大等待时间连接池参数一定要根据业务实际情况来配。配太小高峰期应用拿不到连接直接报连接超时配太大数据库那边连接数被打满数据库先挂。这个没有绝对标准一般先从上面的推荐值开始观察一段时间再调。数据源配完后管理台会有“测试连接”的功能点一下能通过说明数据源没问题。4.2 应用部署的两种方式部署war包或ear包的方式有两种。第一种是在管理台上操作选择部署文件 → 填写应用名称 → 设置上下文根 → 部署 → 启动。这种方式是正式环境推荐的方式每一步有记录后续好追踪。第二种是直接把war包拷贝到domain的应用部署目录下中间件会识别并自动部署。这种方式适合开发和测试阶段的快速迭代但正式环境我不建议这么干因为缺少一个清晰的部署记录和回滚机制。正式应用如果包含多个war包注意部署顺序。有些系统依赖别的应用先启动这时候要检查应用模块之间的依赖关系必要时分开启动给前一个应用留出启动时间。4.3 上下文根与访问路径的调整上下文根就是应用URL路径的那一部分。你期望用户通过http://ip:端口/erp访问就要把上下文根设置为/erp。如果应用要作为默认站点上下文根可以设置为/。部署完成后登录管理台确认应用状态是“运行中”。然后浏览器访问试试能出现登录页说明基本通了。这时候再看server.log确认没有启动级别的ERROR。5. 让中间件适配生产JVM调优、端口规划和Windows服务化早期部署应用能在中间件上跑起来就满足了。但过一阵子你会发现跑起来只是开始跑得稳才是核心竞争力。JVM参数、端口规划、服务自启这三件事是中间件能否长期稳定运行的关键。5.1 JVM参数在哪里改、怎么改JVM参数一般在Domain的启动脚本里配置不同版本具体文件名略有不同可能是setDomainEnv.bat也可能直接写在启动脚本里。找到脚本里设置JAVA_OPTS的位置修改配置。set JAVA_OPTS%JAVA_OPTS% -Xms512m -Xmx2048m -XX:MaxMetaspaceSize256m -Djava.awt.headlesstrue这里解释一下几个参数的含义。-Xms和-Xmx分别是堆内存初始值和最大值建议设置成同一个值避免运行过程中堆大小频繁伸缩带来的性能抖动。-XX:MaxMetaspaceSize是元空间上限存放类元数据设置太小应用加载的类一多就直接OOM。-Djava.awt.headlesstrue在Windows上通常不会造成问题但如果应用里有生成图表、处理图片的功能配置了这个参数后可以避免一些无头模式下的异常。JVM调优的基本原则是堆内存不要超过物理内存的50%毕竟是多个组件共享一台机器。同时建议打开GC日志这样以后出了问题才有数据可以分析set JAVA_OPTS%JAVA_OPTS% -Xloggc:D:/logs/gc.log -XX:PrintGCDetails -XX:PrintGCDateStampsGC日志建议重定向到非系统盘避免日志写满C盘之后系统崩溃。5.2 端口规划不只是改一个数字那么简单中间件启动后会在Windows上监听多个端口。应用端口默认常见8080、管理台端口、还有一些内部通信端口。这些端口在安装或创建域的时候已经规划过但生产环境往往需要调整。改端口的入口一般是在conf目录下的server配置里找到Connector相关配置。改端口时一定要同步考虑三件事第一Windows防火墙是否放行了新端口第二端口是否和其他服务冲突第三应用系统里的回调地址、重定向地址是否写死了旧端口。管理台端口这里要特别说一句如果管理台不对公网提供服务最好把它的监听地址改成内网IP或者干脆只监听127.0.0.1然后通过跳板机访问。管理台权限被拿到相当于中间件整体沦陷这个风险不值得冒。5.3 注册Windows服务让中间件开机自启中间件不会因为你手动启动了就一直活着机器重启之后你得手动去启动它这对一个需要长期稳定运行的服务来说不可接受。解决办法是注册成Windows服务。注册Windows服务有几种方式。最通用的是用WinSW这个开源工具它支持把一个命令行程序包装成Windows服务。使用方法很简单下载WinSW的exe文件重命名成和你的服务名一致的名字比如inforSuiteAS-service.exe然后在同一目录下创建同名xml配置文件写入服务名、执行命令、日志路径这些参数。service idInforSuiteAS/id nameInforSuiteAS/name descriptionInforSuiteAS Application Server/description executableD:\InforSuiteAS\domain\bin\startServer.bat/executable stopexecutableD:\InforSuiteAS\domain\bin\stopServer.bat/stopexecutable /service在命令行用管理员身份执行安装inforSuiteAS-service.exe install然后就能在服务管理器里看到这个服务了。服务配置里建议设置成“自动启动”如果中间件偶尔崩溃还可以在“恢复”标签页配置失败后自动重启服务。服务化的一个重要注意点是服务运行账号。用LocalSystem账号虽然权限高但访问网络资源比如数据库时可能有问题因为它在网络上是以机器身份出现的。如果数据库那边有IP白名单或者账号限制建议在服务属性里指定一个专门的运行账号。6. 这套部署过程中我踩过的坑完整排查链路与修复记录任何一次中间件部署都不会百分之百顺畅。我把这次部署遇到的几个典型问题按排查链路写出来希望能帮你少走弯路。6.1 启动后管理台打不开防火墙拦截部署完成启动脚本没有报错但浏览器访问管理台就是打不开。排查链路应该是这样的先在本机用curl访问管理台地址能通说明中间件没问题然后在其他机器上访问通不了说明网络有问题最后看Windows防火墙。实际情况确实是Windows防火墙默认阻断了Java进程对外部入站请求的响应。第一次启动时Windows会弹窗询问是否允许Java访问网络如果你点了取消防火墙规则里就不会放行。快速放行端口用命令操作比图形界面效率高netsh advfirewall firewall add rule nameInforSuiteAS-8080 dirin actionallow protocolTCP localport8080 netsh advfirewall firewall add rule nameInforSuiteAS-管理台 dirin actionallow protocolTCP localport81816.2 端口被占用netstat和PID定位启动时报端口被占用我的排查顺序是先用netstat查看端口占用情况netstat -ano | findstr :8080找到占用端口的PID再通过任务管理器定位是哪个进程。实际遇到的情况是机器上已经跑了一个旧的Tomcat实例占用了8080端口而中间件也想用8080自然就冲突了。处理方式就是停掉旧服务。如果你无法停掉另一个应用就修改中间件的端口。6.3 应用部署后ClassNotFoundException驱动jar放错位置应用启动后日志里报ClassNotFoundExceptionCaused by信息指向某个JDBC驱动类。这个问题的根因是虽然应用自己打了一个驱动jar进去但数据源是中间件创建的中间件在创建连接时要从自己的类路径里加载驱动类找不到应用lib里的类。正确做法是把驱动的jar放到domain的lib目录下然后重启中间件让驱动类能被中间件加载。6.4 内存溢出区分堆内存和元空间运行一段时间后应用开始出现OutOfMemoryError错误。这里最重要的是看错误信息里说的是哪块内存。提示Java heap space说明堆内存不够调大-Xmx提示Metaspace说明类元数据空间不够调大-XX:MaxMetaspaceSize。调参之前先把dump文件打开看看内存到底被谁占了。步骤是在JVM参数里加上下面这两个参数等下次OOM时自动dump内存快照-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPathD:/logs/dump文件用jvisualvm这个工具打开分析找找有没有大对象一直没释放、有没有集合类无限增长这种情况。6.5 应用能打开但页面404上下文根问题应用显示运行中但访问页面就是404。排查链路先看server.log里有没有部署报错确认应用确实启动完成再看管理台里应用的上下文根设置最后看访问日志里实际收到的路径。这种情况多半是上下文根设置和访问URL不对应。比如应用设置的是/erp你却用http://ip:端口/访问自然会404。改管理台里的应用属性设置或者用正确的URL访问。7. 部署收尾备份、升级和安全加固的日常维护建议部署完成、应用跑通这还不算完。作为一个长期运行的中间件日常维护的思路从第一天就要建立起来。7.1 备份策略备份是整个运维动作里最廉价却最容易被忽视的。备份的重点是整个domain目录因为这个目录里包含了数据源定义、部署的应用、相关的配置文件。lib目录下如果有额外添加的jar包也要一起备份。Windows环境可以用计划任务定期执行压缩脚本把domain目录打个zip包放到独立磁盘或者NAS上。目的就是一个中间件出了问题能在一小时内恢复到备份时的状态。升级中间件之前务必备份domain目录。有的中间件升级包不支持回滚没有备份的话一旦升级失败结果非常被动。7.2 应用升级的标准流程应用版本更新时不要直接在生产环境上传覆盖。一个稳妥的路径是确认停机窗口 → 备份当前domain → 管理台先停止旧应用 → 上传新war包 → 启动新应用 → 快速验证核心功能 → 有问题立即回滚到备份。速度很重要但稳定性更重要。升级后至少观察一个业务周期确认日志没有持续报错再做下一轮操作。7.3 安全加固的几个要点最后把安全加固这件事提一下。企业中间件最常见的安全问题是管理台被暴力破解、默认密码未修改、不必要端口对外开放。至少要做这么几件事修改默认管理员密码密码要有足够的复杂度管理台限制IP来源能绑内网就绑内网关闭不需要的样例应用和帮助页面定期检查日志目录防止日志写满磁盘有条件的话配置HTTPS用keytool先生成证书库然后修改服务配置里的SSL连接器。日常巡检我一般会看三个地方进程是否正常存活、端口是否正常监听、日志里是否持续出现ERROR级别以上的异常。这三个点没问题基本可以说明中间件运行状态正常。我自己做完这套Windows环境的部署之后最大的感受是中间件本身在这类平台上的兼容性问题已经很少了真正花时间的都是环境层面的细节。端口、防火墙、JDK版本、账号权限、备份习惯这些事看起来琐碎但每一个都可能导致服务起不来或者跑不稳。建议你部署时也把上面这些检查点过一遍尤其是第一次在一台“非干净”的机器上装中间件先花十分钟确认环境后面的过程会顺畅很多。
返回列表