☰
TongWeb 7.0.4.9在Linux下的完整安装部署指南:从License到应用上线
2026/10/1 6:25:05 网站建设 项目流程

最近帮客户做国产中间件迁移,对方扔过来一个TongWeb 7.0.4.9企业版安装包,要求部署到一台刚装好的Linux服务器上。我一开始没当回事,结果实际动手才发现,TongWeb不像Tomcat解压就能跑,安装之前有一堆前置工作要做:License授权机制、域目录结构、JDK版本匹配、控制台初始化。中途踩了几个坑,查了不少资料才跑通。这篇就把整个流程从零梳理一遍,覆盖TongWeb 7.0.4.9在Linux下从拿到安装包到管理控制台能登录、静态页面能部署的全过程,适合做国产化交付的实施工程师、运维同学,以及第一次接触TongWeb的Java开发。

我用的测试环境是CentOS 7.6 x86_64,4核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脚本,解压即“安装”。但目录位置有讲究:第一,路径不能带中文、不能带空格,有些脚本对路径的解析非常弱,解析错一个字符就起不来;第二,磁盘剩余空间至少留5G,TongWeb运行时会写日志、临时文件、部署缓存,空间不够会莫名其妙出问题。

检查磁盘和内存可以这样操作:

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/tongweb

2. 安装包解压与目录结构:每个文件夹是干什么的

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.sh
conf配置文件server.xml、web.xml等,类似Tomcat
deploy应用部署目录默认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:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8"

关于JVM内存参数的设置,我有一个自己的经验值:如果服务器内存是8G,TongWeb的堆内存建议给2G到4G之间,MetaSpace给256M到512M。不要把所有内存都给Java进程,因为Linux系统本身、日志、缓存都需要内存。如果给得太大,系统内存紧张时会开始swap,性能反而更差。如果机器只有4G内存,堆内存建议压在2G以内。

另外注意-Dfile.encoding=UTF-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”等字样,说明启动有问题,需要用Ctrl+C退出日志跟踪,再排查具体原因。

服务起来后,确认端口是否正常监听。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占用了8080,TongWeb会启动失败。此时先看哪一步占用了端口:

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 port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

把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 name="www.example.com" appBase="/data/www/example" autoDeploy="true" />

配置完成后重启服务,用对应的域名访问。这里注意,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.encoding=UTF-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] Description=TongWeb Application Server After=network.target [Service] Type=forking User=tongweb Group=tongweb Environment=JAVA_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] WantedBy=multi-user.target

然后执行:

systemctl daemon-reload systemctl enable tongweb systemctl start tongweb

注意Type=forking的前提是startserv.sh本身会后台启动并将进程PID写入PIDFile。如果TongWeb的startserv.sh不会生成pid文件,可以把Type改成simple,但这样ExecStop里的stopserv.sh可能会无法对应到正确进程,需要自己调试。这里我可以分享一个调整技巧:先手动执行一次startserv.sh,然后用ps -ef | grep tongweb找到Java进程的父进程和启动脚本类型,再回头改systemd配置,这样准确率更高。

我在配置自启时踩过一次坑:systemd服务文件里写了User=tongweb,但忘了给tongweb用户设置JAVA_HOME环境。结果systemd启动时找不到java命令,服务一直处于failed状态。后来在Service段里显式加上Environment=JAVA_HOME才解决。

6.5 聊聊我用到现在的体会

TongWeb 7.0.4.9的安装本身不复杂,本质上就是解压、授权、配环境、启动四步。但这个产品有个特点:它对环境细节非常敏感,JDK版本、文件编码、目录权限、License时效,任何一个环节不对,都能整出各种说不出原因的现象。所以,我的建议是每一步都按部就班地验证,尤其是启动之后一定看日志、确认端口,不要看到命令行有输出就以为启动成功了。

如果你也是第一次在Linux上部署TongWeb,建议给自己留一个不那么赶时间的下午,按这个流程走一遍:确认系统时间,准备好JDK和授权文件,统一用tongweb用户操作,解压后先把目录结构翻一遍,再启动。顺利的话,半小时内就能看到控制台登录页。中途哪怕遇到报错也不用慌,日志里都有线索,排错的过程才是对这个中间件最深入的学习。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询