ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

TongWeb 7.0.4.9在Linux下的完整安装部署指南:从License到应用上线

TongWeb 7.0.4.9在Linux下的完整安装部署指南:从License到应用上线 最近帮客户做国产中间件迁移对方扔过来一个TongWeb 7.0.4.9企业版安装包要求部署到一台刚装好的Linux服务器上。我一开始没当回事结果实际动手才发现TongWeb不像Tomcat解压就能跑安装之前有一堆前置工作要做License授权机制、域目录结构、JDK版本匹配、控制台初始化。中途踩了几个坑查了不少资料才跑通。这篇就把整个流程从零梳理一遍覆盖TongWeb 7.0.4.9在Linux下从拿到安装包到管理控制台能登录、静态页面能部署的全过程适合做国产化交付的实施工程师、运维同学以及第一次接触TongWeb的Java开发。我用的测试环境是CentOS 7.6 x86_644核8G内存OpenJDK 1.8.0_202中间件安装目录放在 /opt/tongweb。不同版本的TongWeb在目录命名和默认端口上会有一点点差异但整体思路一致。后面每个步骤我都会把原理讲清楚再给出实际操作方便你举一反三。1. 安装前必须搞懂的3个问题License、JDK、目录规划1.1 先搞清楚TongWeb的授权机制不然装到一半卡住TongWeb企业版和开源Tomcat最大的区别就在License。Tomcat解压完没有任何限制但TongWeb企业版必须有一份授权文件否则服务虽然能起来但对外提供的功能、并发数、管理控制台都会受限甚至直接不让正常对外提供服务。授权文件是一份绑定了服务器指纹的许可证一般扩展名是.lic。厂商会提供一个生成机器码的小工具或脚本你在目标服务器上运行一次把生成的机器码文件或字符串发给东方通对方再回传一份对应这个机器码的.lic文件。所以安装前必须搞清楚三件事License放哪个目录、机器码怎么生成、授权文件是不是和这台服务器绑定的。我在实际操作中踩过一个很典型的坑第一次部署时没注意授权文件的时效拿到的.lic文件其实已经过期了启动日志里一直报授权校验失败。后来查系统时间才发现服务器时间被人为改慢了两天导致License判定未生效。所以建议安装前先用date命令确认服务器时间是否准确时间偏差太大不仅影响License校验还会影响集群节点间的通信。1.2 JDK版本匹配TongWeb 7.0.x和JDK 1.8是黄金搭档TongWeb 7.0.4.9这个版本号对应的是企业版7系列底层是Java EE规范的应用服务器对JDK版本有明确要求。我测试下来它和JDK 1.8配合是最稳的无论是Oracle JDK还是OpenJDK 8都可以。你在Linux上装好JDK后一定要确认java -version输出的版本同时把JAVA_HOME环境变量配置好。有一个很容易被忽略的点如果服务器上同时装了多个JDK版本比如系统自带的OpenJDK 11和项目要求的JDK 8启动TongWeb时脚本会按顺序去找JAVA_HOME再去找PATH里的java命令。如果你只改了PATH没改JAVA_HOME或者改了JAVA_HOME但启动脚本里写死了别的路径就会出现版本不一致的诡异问题。建议在启动前统一检查一下这两个变量echo $JAVA_HOME echo $PATH | tr : \n | grep java如果JAVA_HOME为空可以在 /etc/profile 或启动脚本里显式指定。我习惯在setenv.sh后面会讲里写死JAVA_HOME这样不污染全局环境也能保证TongWeb启动时一定用对版本。1.3 安装目录规划路径别带中文和空格磁盘空间至少留5G安装前还要规划一下目录。Linux下TongWeb的安装包通常是一个tar.gz压缩包不需要执行install脚本解压即“安装”。但目录位置有讲究第一路径不能带中文、不能带空格有些脚本对路径的解析非常弱解析错一个字符就起不来第二磁盘剩余空间至少留5GTongWeb运行时会写日志、临时文件、部署缓存空间不够会莫名其妙出问题。检查磁盘和内存可以这样操作df -h free -h uname -a我建议把安装目录放在 /opt 或 /usr/local 下单独建一个tongweb用户来跑服务不要用root直接跑生产环境。用普通用户启动的好处是即使控制台被入侵或者部署了恶意应用攻击者拿到的也只是普通用户权限破坏范围受限。建用户和授权目录的操作useradd -m -s /bin/bash tongweb mkdir -p /opt/tongweb chown -R tongweb:tongweb /opt/tongweb2. 安装包解压与目录结构每个文件夹是干什么的2.1 解压的正确姿势先看压缩包格式再处理中文乱码拿到安装包后先别急着解压。先用file命令看一眼这个文件到底是tar.gz、tar还是zip因为不同格式的压缩包解压方式不同处理中文文件名的方式也不同。file TongWeb_7.0.4.9_Enterprise_Linux.tar.gz如果是tar.gz标准解压命令是tar -zxvf TongWeb_7.0.4.9_Enterprise_Linux.tar.gz -C /opt/tongweb但这里有一个高频问题很多安装包是技术人员在Windows下压缩后再传到Linux服务器的Windows的zip默认使用GBK编码保存中文文件名Linux下解压时按UTF-8解析就会变成乱码比如“部署文档”变成“閮ㄧ讲鏂囦欢”。如果解压后发现一堆乱码文件名说明压缩包是在Windows下生成的。解决办法有两个一个是拿到安装包后检查文件头如果是zip格式用unzip加-O选项指定编码unzip -O GBK TongWeb_Enterprise_Linux.zip -d /opt/tongweb另一个是tar格式但中文乱码可以用convmv工具批量转码convmv -f GBK -t UTF-8 -r --notest /opt/tongweb我在实施中遇到这个问题的频率非常高建议你解压后先用ls查看一遍目录内容确认文件名可读再继续。2.2 理解TongWeb的目录结构bin、conf、deploy、logs、license解压完成后TongWeb的根目录下会有一批子目录。不同版本的命名可能有差异但大致包含下面这些目录名作用补充说明bin启动、停止脚本核心是startserv.sh和stopserv.shconf配置文件server.xml、web.xml等类似Tomcatdeploy应用部署目录默认Web应用放这里lib运行时依赖库大量jar包一般不用动logs日志目录server.log、access.log等licenseLicense授权文件目录企业版必须关注samples示例应用可用来验证安装是否成功理解目录结构的意义在于遇到问题知道去哪里看。比如启动失败先去看logs目录下的server.log部署的应用404先去看deploy目录下应用结构是否正确端口冲突去conf目录改server.xml。这里我特别想强调一点TongWeb的deploy目录和Tomcat的webapps基本类似但也有企业版的特殊之处——它支持“域”domain的概念。企业版可以创建多个domain每个domain有自己独立的配置、应用、端口类似WebLogic的Domain。如果你在部署时发现应用没有按预期出现在默认deploy目录先确认当前运行的是哪个domain。这个细节在官方文档里有但不太起眼很多人忽略后怎么部署都不生效最后发现应用放错了domain。2.3 首次解压后的授权文件放置放错目录等于没放把.tar.gz解压完成后下一步就是处理License。安装包里一般会有一个license目录或者你需要在domain目录下创建license子目录。不同版本对License目录的要求不一样但通用的做法是查看安装包根目录或conf目录下是否有README、部署手册或lic文件。我在7.0.4.9上实际操作时是将厂商提供的.lic文件放到了安装根目录的license目录下。如果找不到license目录就自己创建一个mkdir -p /opt/tongweb/license cp /data/zhongjianjian.lic /opt/tongweb/license/放完后不要急着启动先检查.lic文件的权限确保运行TongWeb的用户有读权限chown -R tongweb:tongweb /opt/tongweb/license chmod 644 /opt/tongweb/license/*.lic有一个常见的坑有些人把License放在了管理控制台导入但导入后提示成功重启后License又消失。这种情况多半是因为License文件没有落到正确目录只是临时写入了内存或临时目录。最稳妥的办法是直接放到license目录下然后再登录控制台确认授权状态。3. 启动前配置与首次启动从脚本参数到端口监听3.1 配置setenv.sh内存、JAVA_HOME、启动参数都在这TongWeb的bin目录下一般会有一个setenv.sh不同版本可能叫setEnv.sh或类似名字这个脚本的作用是设置TongWeb启动时的环境变量。它默认可能存在也可能需要你自己创建。我是直接在这个文件里配置JAVA_HOME、JVM内存参数和启动模式。一个典型的setenv.sh内容如下#/bin/bash export JAVA_HOME/usr/local/jdk1.8.0_202 export PATH$JAVA_HOME/bin:$PATH export JAVA_OPTS-Xms2048m -Xmx4096m -XX:MetaspaceSize256m -XX:MaxMetaspaceSize512m -Dfile.encodingUTF-8关于JVM内存参数的设置我有一个自己的经验值如果服务器内存是8GTongWeb的堆内存建议给2G到4G之间MetaSpace给256M到512M。不要把所有内存都给Java进程因为Linux系统本身、日志、缓存都需要内存。如果给得太大系统内存紧张时会开始swap性能反而更差。如果机器只有4G内存堆内存建议压在2G以内。另外注意-Dfile.encodingUTF-8这个参数。TongWeb在Linux下如果没显式指定文件编码处理中文文件名的静态资源、响应中文请求头时可能出现乱码。提前在JVM参数里固定UTF-8能省掉很多后面的麻烦。3.2 首次启动startserv.sh、日志和端口检查配置好setenv.sh并放好License后以tongweb用户身份启动服务su - tongweb cd /opt/tongweb/bin ./startserv.sh启动后不能只看命令窗口的输出一定要看日志。TongWeb的启动日志在logs目录下一般叫server.log。用tail命令实时观察启动过程tail -f /opt/tongweb/logs/server.log正常情况下你会看到类似“Server startup in XXXX ms”的字样。如果看到“Fatal”“Error”“License invalid”等字样说明启动有问题需要用CtrlC退出日志跟踪再排查具体原因。服务起来后确认端口是否正常监听。TongWeb 7.0.4.9的默认HTTP端口常见是8080管理控制台端口有可能是9060但不同版本和内部配置会有差异。用netstat或ss命令检查ss -lntp | grep java如果看到Java进程监听在8080或9060等端口说明端口已经起来了。如果没起来别急继续往下看错误日志。3.3 启动脚本背后发生了什么为什么startserv.sh比直接跑java更靠谱很多用过Tomcat的人会好奇我能不能不跑startserv.sh直接用java -jar或者java -cp的方式启动理论上可以但强烈不建议。TongWeb的startserv.sh不只是启动一个Java进程它还会做几件关键事情设置classpath加载lib目录下所有jar包读取conf目录下的server.xml配置初始化domain写PID文件方便stopserv.sh停止时找到进程。所以如果自己用java命令启动很容易漏掉classpath里的某个依赖库或者PID文件没生成导致后面stopserv.sh停不掉服务。不要试图绕开官方脚本你省下的两分钟会在后面花两个小时还回去。首次启动还有一个细节如果端口被占用比如服务器上已经跑了一个Tomcat占用了8080TongWeb会启动失败。此时先看哪一步占用了端口lsof -i :8080然后决定是停掉旧的进程还是修改TongWeb的端口。4. 管理控制台登录与初始化账号密码、端口和安全策略4.1 管理控制台地址与初始账号密码怎么找TongWeb启动成功后管理控制台的访问地址一般是http://服务器IP:9060/console这里9060是管理端口具体端口取决于conf/server.xml里的配置也可能在启动日志里打印出来。如果你访问的时候浏览器提示连接拒绝先检查一下端口是否监听再用curl在本机测试curl -v http://127.0.0.1:9060/console如果本机curl能通但外部访问不了基本上是防火墙或安全组的问题需要在服务器层面放行对应端口。关于初始账号密码不同版本的初始行为不一样。有的版本初始账号是admin密码在部署文档或授权邮件里有的版本是首次访问时让你自己设置管理员密码。在我的测试版本里初始密码是随授权文件一同提供的。所以拿到授权文件时记得看看同目录下有没有说明文档不要只盯着.lic文件。如果管理员密码丢了最直接的办法是找厂商技术支持重置他们一般有内部工具可以处理。网上有些人说删除conf下的某个文件就能重置密码但不同版本文件路径差异很大盲目删文件可能导致整个domain配置丢失我不建议你自己猜。4.2 修改管理端口和HTTP端口server.xml的Connector配置如果你需要把TongWeb的HTTP服务端口改成8081或者把管理端口从9060改成9080可以修改conf目录下的server.xml文件。这个文件的格式和Tomcat的server.xml非常相似里面会有多个Connector节点。比如修改HTTP服务端口Connector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 /把port改成你需要的端口保存退出后重启TongWeb。修改管理端口也是类似思路找到对应管理服务的Connector节点把port改掉。这里有一个我踩过的坑只改了HTTP端口但忘了检查管理端口是否和HTTP端口冲突。如果两个端口设成同一个TongWeb会出现端口绑定失败的异常导致整个服务起不来。改完端口后一定要确认没有端口冲突。4.3 控制台登录后的3个必做安全配置TongWeb控制台正常登录后很多人直接开始部署应用马上踩坑。我强烈建议先做三个安全配置第一修改管理员默认密码。默认密码太容易被猜到了尤其是暴露在公网上的服务器几分钟内就可能被扫描爆破。修改路径一般在控制台的“系统管理”或“用户管理”模块里或者在conf目录的配置文件里手动改。第二开启访问日志。控制台里找到日志配置或访问日志选项开启HTTP访问日志这样有人攻击或恶意扫描时你能从日志里看到来源IP和请求特征。第三生产环境不要直接用root用户跑TongWeb。如果你前面建了tongweb用户那就不用改如果已经用root启动了也需要停掉服务改完目录权限再以普通用户启动。这个动作虽然麻烦但值得做。5. 部署一个Web应用从HTML静态页面到WAR包5.1 部署静态HTML项目控制台图形化部署和手动部署两种方式在TongWeb上部署静态HTML项目最常见的是两种方式控制台部署和手动拷目录。我先说控制台方式。登录管理控制台后找到“应用管理”或“部署应用”模块选择“上传”或“选择目录”将你的HTML项目打包成一个zip或war上传上去然后填写部署名称比如myweb和访问路径比如/或/myweb根路径就用/点击部署并启动。部署完成后访问地址就是 http://IP:端口/ 或 http://IP:端口/myweb。手动部署方式就是把HTML目录直接拷到deploy目录下对应应用的路径。比如如果你想让它直接通过根路径访问就将静态文件放到deploy目录下ROOT路径里如果你希望访问路径是 /demo就建一个demo目录放进去。放完后重启TongWeb或触发热部署。这里我踩过一个很典型的坑静态HTML项目里如果引用了绝对路径的JS/CSS资源比如/static/js/common.js而实际部署的上下文路径不是根路径资源就会404。遇到这种情况要么把资源路径改成相对路径要么在部署时把上下文路径设置为/要么用后面的虚拟主机配置方案。5.2 部署WAR包注意JDK版本编译兼容性部署WAR包和部署HTML类似在控制台直接上传war文件即可。但有几个问题需要注意WAR包内的web.xml、Servlet版本要和TongWeb兼容。TongWeb 7.0.4.9支持Java EE 7规范如果你的应用是用JDK 8编译的一般没问题但如果你用了一些只支持更高版本容器的库可能会出现类加载异常。WAR包部署后出现404先检查WAR包解压后的目录结构是否正确。用unzip或者解压工具看一眼确保WEB-INF/classes和WEB-INF/lib存在web.xml没有被破坏。我个人还有一个建议WAR包部署时尽量保持文件名是英文不要用中文名。虽然TongWeb理论上支持中文名但在Linux环境下中文应用名加中文请求路径组合时很容易出现URL编码和文件系统编码不一致的问题排查起来很头疼。5.3 部署后的验证和常见配置端口、虚拟主机、默认应用应用部署上去之后验证步骤别省。先在服务器本机用curl测试curl -I http://127.0.0.1:8080/ curl -I http://127.0.0.1:8080/myweb/看返回的状态码是200还是404、503。如果本机正常外部访问不了就检查防火墙和安全组。如果你有多个域名想通过不同域名访问不同应用可以在conf/server.xml里配置虚拟主机。方法和Tomcat类似新增一个Host节点指定name为域名appBase指向对应应用目录。比如Host namewww.example.com appBase/data/www/example autoDeploytrue /配置完成后重启服务用对应的域名访问。这里注意Host的appBase路径需要有正确的读写权限否则控制台部署或热部署会失败。6. 常见问题与排查技巧6.1 启动失败先看日志再猜原因TongWeb启动失败时很多人的第一反应是去网上搜报错但报错信息千奇百怪搜索引擎未必能搜到。我的习惯是先看日志再看端口然后看配置。现象可能原因排查方向启动日志无明显报错但进程起不来JVM参数分配过大无法申请内存检查-Xmx是否超过物理内存free -h确认内存剩余端口占用导致启动失败8080或9060已被其他进程占用ss -lntp | grep 端口杀掉旧进程或改端口日志报License错误License文件放错目录、授权过期、机器码不匹配检查license目录和厂商确认授权信息控制台可以打开但应用全404应用部署路径不对或上下文配置错误检查deploy目录确认上下文路径应用页面中文乱码JVM未设置UTF-8或页面meta字符集不对在setenv.sh加-Dfile.encodingUTF-8检查页面charset日志文件位置是logs/server.log但有些版本还有logs/error.log。如果一个日志里没找到关键信息就去logs目录下把所有.log文件翻一遍。6.2 忘记控制台密码或License过期怎么办控制台密码忘了优先找公司内部文档或厂商技术支持。不建议自己乱删配置文件否则可能把domain配置一起干掉。License过期则有点麻烦表现为启动日志里出现授权过期相关字样或者控制台提示“授权已过期”。首先确认服务器系统时间是否正确用date -R查看时间和时区date -R如果时区或时间不对用timedatectl修正再重启TongWeb。如果时间没问题那就是授权文件本身到期了只能联系厂商续期没有别的办法。这里要感叹一下因为License过期问题项目交付时被卡过很多次。后来我养成了一个习惯拿到.lic文件后会顺手用openssl或者cat看文件内容记录里面的有效期信息并在日历上设置提醒提前一个月安排续期避免生产环境突然挂掉。6.3 部署的HTML项目无法访问检查应用路径和文件权限部署了HTML项目却无法访问除了前面说的路径问题还有一个很容易忽略的原因文件权限不足。如果你上传的应用文件所有者是root而TongWeb以tongweb用户运行tongweb用户读取不了这些文件就会出现页面打不开或样式丢失。解决办法是批量修改文件属主chown -R tongweb:tongweb /opt/tongweb/deploy部署HTMl项目还有一个细节确认部署目录下有没有index.html或默认首页。如果访问根路径却直接返回404很多情况下不是中间件问题而是目录下根本没有index文件浏览器不知道该显示什么。6.4 设置开机自启systemd服务配置和注意事项最后说一下开机自启。TongWeb安装包里可能没有自带systemd service文件所以每次机器重启后要手动启动这在生产环境是不现实的。我的做法是写一个systemd服务文件。在 /etc/systemd/system/tongweb.service 中添加如下内容[Unit] DescriptionTongWeb Application Server Afternetwork.target [Service] Typeforking Usertongweb Grouptongweb EnvironmentJAVA_HOME/usr/local/jdk1.8.0_202 ExecStart/opt/tongweb/bin/startserv.sh ExecStop/opt/tongweb/bin/stopserv.sh PIDFile/opt/tongweb/bin/tongweb.pid [Install] WantedBymulti-user.target然后执行systemctl daemon-reload systemctl enable tongweb systemctl start tongweb注意Typeforking的前提是startserv.sh本身会后台启动并将进程PID写入PIDFile。如果TongWeb的startserv.sh不会生成pid文件可以把Type改成simple但这样ExecStop里的stopserv.sh可能会无法对应到正确进程需要自己调试。这里我可以分享一个调整技巧先手动执行一次startserv.sh然后用ps -ef | grep tongweb找到Java进程的父进程和启动脚本类型再回头改systemd配置这样准确率更高。我在配置自启时踩过一次坑systemd服务文件里写了Usertongweb但忘了给tongweb用户设置JAVA_HOME环境。结果systemd启动时找不到java命令服务一直处于failed状态。后来在Service段里显式加上EnvironmentJAVA_HOME才解决。6.5 聊聊我用到现在的体会TongWeb 7.0.4.9的安装本身不复杂本质上就是解压、授权、配环境、启动四步。但这个产品有个特点它对环境细节非常敏感JDK版本、文件编码、目录权限、License时效任何一个环节不对都能整出各种说不出原因的现象。所以我的建议是每一步都按部就班地验证尤其是启动之后一定看日志、确认端口不要看到命令行有输出就以为启动成功了。如果你也是第一次在Linux上部署TongWeb建议给自己留一个不那么赶时间的下午按这个流程走一遍确认系统时间准备好JDK和授权文件统一用tongweb用户操作解压后先把目录结构翻一遍再启动。顺利的话半小时内就能看到控制台登录页。中途哪怕遇到报错也不用慌日志里都有线索排错的过程才是对这个中间件最深入的学习。
返回列表