1. 先摸清TongWeb的定位:这个中间件适合哪些场景、7.0.4.9值不值得装
如果你接到过“在Linux上装一套TongWeb 7.0.4.9企业版”这种任务,多半是项目里要用国产中间件跑Java Web应用。TongWeb是东方通的产品,和Tomcat、WebLogic、WebSphere算同类东西,都是Java应用服务器,但TongWeb在企业级市场里的角色更偏“完整商业解决方案”:自带管理控制台、集群管理、集中运维、国密算法支持,还有一套比较严格的授权体系。国内政企、金融、运营商、能源这类项目里非常常见,很多系统集成商交付时指定的中间件就是它。
我这些年帮人装过不少次TongWeb,先说一个经常被忽视的点:TongWeb和Tomcat的“手感”有点像,但千万别拿Tomcat的惯性思维去套。Tomcat是开源免费的,解压就能跑,顶多配置下端口;TongWeb企业版则牵扯到授权文件、产品激活、控制台登录,安装流程多出来好几步。第一次装的人往往卡在三个地方:不知道授权文件放哪、不知道默认管理账号是什么、不确定启动日志里哪些报错能忽略哪些不能。这篇文章就是把我反复踩过、趟过的路径整理成一条能直接照做的流程,从解压、授权、启动,到控制台登录、部署HTML项目,再到排错,一次讲完。
顺便说说7.0.4.9这个版本。7.0是主版本系列,4.9属于补丁版。企业版和社区版的差异不在功能列表上有多悬殊,主要是授权机制、技术支持、组件完整度。很多项目招标或者等保测评里把版本号写得死死的,那你就老实装这个版本,别自己私自升到更新的补丁版,否则验收对不上版本号,后面扯皮是自己找罪受。如果项目里没限定这么死,那我建议装到该系列下最新的补丁版,毕竟补丁版修了一堆已知问题,同样部署环境,出问题的概率明显低。
2. 安装前必须确认的三件事:JDK版本、授权文件、安装包来源
2.1 先确认JDK:版本不对,后面全是坑
TongWeb 7依赖JDK 1.8,一般建议用8u202之后的版本。装之前先在自己机器上敲一下:
java -version echo $JAVA_HOME which java如果机器上没装Java,或者默认Java版本不对,先去装一个JDK 8。CentOS、RHEL这类系统可以直接用OpenJDK:
sudo yum install -y java-1.8.0-openjdk但我个人建议,生产环境最好单独装一个固定的JDK 8发行版,然后把JAVA_HOME写清楚,不要让TongWeb去猜系统默认的Java。原因很简单:TongWeb启动脚本会优先读JAVA_HOME环境变量,你如果不显式指定,它可能找到机器上另一个版本的JDK,版本不对直接启动失败,而且报错信息还不太直观。我碰到过一次,机器上同时装了JDK 8和JDK 17,TongWeb启动的时候捡到17,日志里一堆UnsupportedClassVersionError,折腾半天才反应过来是JDK版本问题。
2.2 企业版授权文件:这个才是“企业版”和“社区版”的分水岭
TongWeb企业版安装包本身解压出来就能跑,但能不能长期正常用,全靠授权文件。授权文件一般是厂商交付时单独给的,命名可能是license.dat、license.xml,不同批次可能不一样。它的核心作用是产品激活,有的授权绑定服务器网卡MAC地址,有的绑定机器指纹,还有的绑定申请授权时填写的IP或主机名。
所以安装前,你最好先确认三件事:
- 授权文件解压出来没有、文件完整不完整;
- 授权文件绑定的服务器信息和你要装的这台机器是否一致,尤其是MAC地址,虚拟化环境经常因为换了虚拟网卡导致授权失效;
- 当前系统时间是否正确,时区和实际时间差太离谱的话,授权校验也会失败。
我见过最无语的情况是,负责申请授权的同事拿A机信息申请了授权,结果装的时候装到B机上,启动一模一样的报错。授权文件这个东西是绑硬件的,千万别指望“复制过来就行”。
2.3 安装包来源和完整性校验
安装包从哪里来,看着是个小事,实际影响很大。有的下载站上的包打包不完整,解压到一半报错,或者里面缺了关键lib目录,启动直接失败。正规的做法是拿到厂商给的包之后,先看有没有附带MD5或SHA256校验值:
md5sum TongWeb-7.0.4.9.tar.gz sha256sum TongWeb-7.0.4.9.tar.gz校验值对得上再往下走,对不上先别解压,回去找包。这一步能省掉很多后续排错,尤其是那种解压时“部分文件损坏”的暗病,校验值一眼就能看出来。
2.4 运行用户和目录规划:别用root跑中间件
TongWeb官方交付文档里一般都会提醒,建议使用专用系统用户运行。做运维久了你会发现,用root跑Web中间件是给自己埋雷:授权文件权限、日志文件归属、可能面临的提权风险,全是麻烦。我习惯的做法是单独建一个用户:
sudo useradd -m -s /bin/bash tongweb安装目录建议放/opt/tongweb,不要丢在/root或者某个用户家目录下,否则后面其他同事接手时路径猜都猜不到。目录规划有一个原则:安装目录、部署目录、日志目录尽量保持默认结构,减少自定义项。TongWeb默认结构里deploy放应用、logs放日志,如果你非得把它们挪到别的地方,不是不行,但要同步改配置,改滚动日志、权限、备份策略的时候都得跟着改,复杂度上去了,收益很小。
3. 实际安装动作:解压、授权、启动三步走
3.1 解压安装包与中文乱码问题
TongWeb的安装包常见两种格式:tar.gz和zip。如果是tar.gz包,一条命令搞定:
sudo mkdir -p /opt/tongweb sudo tar -zxvf TongWeb-7.0.4.9.tar.gz -C /opt/tongweb解压完看一下目录结构,正常情况下会得到一个类似/opt/tongweb/TongWeb的目录,里面包含bin、conf、deploy、lib、license、logs、work这些子目录。各部分干什么用的,我列个表:
| 目录 | 作用 |
|---|---|
| bin | 启动、停止脚本,比如 startserver.sh、stopserver.sh |
| conf | 核心配置文件,server.xml、tongweb.xml 等 |
| deploy | 应用发布目录,war包或静态目录放这里 |
| lib | 运行时依赖jar包,第三方JDBC驱动也扔这里 |
| license | 授权文件目录,放license.dat等 |
| logs | 日志输出目录 |
| work | 运行时编译缓存,应用发布时自动生成 |
如果你拿到的是zip包,用unzip解压:
sudo unzip TongWeb-7.0.4.9.zip -d /opt/tongweb很多人在这一步遇到过中文文件名乱码的问题,尤其当这个zip包是在Windows环境打出来的,文件内部中文名用了GBK编码,Linux上默认按UTF-8解压,于是文件名全部变成乱码。这不是TongWeb的问题,是zip压缩包编码的老问题。解决办法是让unzip显式指定编码:
sudo unzip -O GBK TongWeb-7.0.4.9.zip -d /opt/tongweb如果-O参数你的unzip版本不支持,也可以用unar或者7z处理。说实话,TongWeb安装包里一般不会有太多中文文件名,但偶发情况下文档、样例里会带,所以这个命令建议收藏。
3.2 部署License授权文件
解压完成后,把厂商给的授权文件放到license目录下:
sudo cp license.dat /opt/tongweb/TongWeb/license/然后修正目录权限,让刚才创建的专用用户能正常读写:
sudo chown -R tongweb:tongweb /opt/tongweb这里有个细节:授权文件能不能被TongWeb读到,取决于启动用户对license目录有没有读权限。你如果前面图省事用root解压,后面用tongweb用户启动,授权文件权限不对,启动时照样报License错误。先统一chown一下,能省掉很多多余的排查。
3.3 配置JAVA_HOME,启动TongWeb
启动前把JAVA_HOME写清楚。我习惯在启动脚本或者/etc/profile里加:
export JAVA_HOME=/usr/local/java/jdk1.8.0_202 export PATH=$JAVA_HOME/bin:$PATH然后启动:
cd /opt/tongweb/TongWeb/bin sudo -u tongweb ./startserver.sh看到脚本执行完,别急着开心,启动脚本返回不等于服务起来了。要让TongWeb完整启动,静态文件服务和控制台服务都在监听,才算是真正好了。TongWeb启动过程中要初始化一堆组件,首次启动可能稍慢,多等个十几秒再验证。
停止服务对应的命令是:
cd /opt/tongweb/TongWeb/bin sudo -u tongweb ./stopserver.sh3.4 首启验证:日志、进程、端口三连查
TongWeb启动后,我会从三个层面验证它是否真的起来了。
第一是看日志。TongWeb的主日志在logs/server.log,首次启动时重点看有没有Server startup completed这类字样,或者有没有ERROR、Exception级别的内容。有些组件初始化告警是正常的业务告警,不致命,但如果是FATAL或者license is invalid,那还是要重视。
tail -f /opt/tongweb/TongWeb/logs/server.log第二是查进程:
ps -ef | grep TongWeb如果有Java进程在跑,说明启动脚本执行成功了。
第三是查端口。TongWeb 7默认HTTP端口是8080,管理控制台也通过这个端口对外,确认监听状态:
ss -tlnp | grep 8080然后本机做个HTTP探测:
curl -I http://127.0.0.1:8080/console如果返回HTTP 200,说明控制台已经可以访问了。这里我要提醒一下:如果端口不通,先别怀疑TongWeb,用ss确认到底绑定在哪个端口上;不同批次的安装包,默认端口可能因为external.properties配置文件被改过。查看端口信息最靠谱的还是这个文件,其次是conf/server.xml。
4. 启动后第一件事:管理控制台登录与基础设置
4.1 控制台地址和默认账号
TongWeb安装好后,浏览器打开:
http://服务器IP:8080/console就能看到管理控制台的登录页。登录账号这边有个很重要的经验:不同交付批次、不同基础版本,默认账号不一定一样。我接触过的大部分TongWeb 7交付批次,默认管理员是thanos,默认口令是thanos123.com,但你的安装包如果不一致,去厂商交付资料里找,别硬试,输错次数多了可能触发锁定策略。
提示:拿到控制台权限后的第一件事,永远是修改默认密码。中间件管理后台一旦被裸奔的内网扫描器发现,攻击者可以直接部署恶意应用,后果比服务器被拿SSH还严重。
4.2 控制台里常用的几类配置
控制台登录后的操作,不同项目差异很大,但有几类配置是高频的:
端口调整。如果业务对端口有要求,比如限制8080不能对外,可以在控制台或conf/external.properties里改HTTP端口,改完重启生效。生产环境我一般建议把控制台和应用端口分开管理,实在分不开,至少给控制台加上访问IP白名单的Java层过滤器,这属于安全加固范畴,但TongWeb控制台本身也支持这类配置。
JVM参数。内存、GC参数影响TongWeb对高并发业务的支持。常见的是在启动脚本里设置JAVA_OPTS,或者通过控制台的JVM配置入口修改。一个低配机器上默认堆内存可能偏小,并发一上来就频繁Full GC。我的基线建议是:
export JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"具体值要结合机器内存和应用负载,别盲目给满,给满了服务没起来,别怪我没提醒,物理内存先得够。
日志级别。平时用INFO,出现问题想深挖时可以临时调成DEBUG,排查完再调回来。生产环境长期开DEBUG,日志量会爆炸式增长,磁盘空间和性能都会受影响。
4.3 控制台打不开的排查路径
实际场景里,服务起来了、8080端口也监听着,但浏览器就是访问不了控制台。这种问题九成出在网络层,跟TongWeb本身没关系。快速排查顺序是这样的:
- 本机执行
curl -I http://127.0.0.1:8080/console,通说明TongWeb没问题; - 从其他机器
telnet 服务器IP 8080,不通说明防火墙或安全组拦截; - 检查Linux防火墙:
sudo firewall-cmd --list-ports sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --reload- 如果在云上,还要去安全组控制台放行对应端口。
最怕的是本机通、外网不通,然后你去翻TongWeb日志,翻了半天发现是白折腾。
5. 在TongWeb上部署HTML项目的两种姿势
很多项目用TongWeb并不跑复杂Java应用,就是部署一个静态HTML站点、一个前端打包出来的dist目录,或者一个简单的报表页面。这部分我单独拎出来讲,因为实际遇到的人太多了,相关搜索里“TongWeb部署html项目”一直居高不下,说明这是高频需求。
5.1 方式一:WAR包部署,适合正式发布和版本管理
WAR包方式是Java中间件最标准的部署形态。把HTML项目打成WAR包,不仅TongWeb能部署,以后迁移到Tomcat、WebLogic也都是同一套逻辑。
假设你的项目目录长这样:
mysite/ ├── index.html ├── css/ │ └── style.css ├── js/ │ └── app.js └── images/进入该目录,用JDK自带的jar命令打包:
cd mysite jar -cvf mysite.war .然后把war包放到TongWeb的deploy目录下:
cp mysite.war /opt/tongweb/TongWeb/deploy/TongWeb会检测到新的war包并自动发布。访问路径就是:
http://IP:8080/mysite/发布这件事从控制台操作更容易观察状态:【应用管理】里能看到已部署的应用列表和状态。如果发布失败,控制台也会给出错误信息,比看日志更直接。
这里有个细节:纯静态HTML项目里没有WEB-INF/web.xml,很多人担心TongWeb不认。实际上TongWeb对静态目录的部署是很宽容的,没有web.xml的项目也能正常部署,只要目录里有index.html这类默认页面文件。
5.2 方式二:目录部署和根路径映射,适合静态站点快速上线
如果项目本身就是一个纯静态站点,不涉及Java编译,直接放到deploy目录下也一样能跑,不需要打出war包:
mkdir -p /opt/tongweb/TongWeb/deploy/mysite cp -r /data/wwwroot/mysite/* /opt/tongweb/TongWeb/deploy/mysite/访问方式和war包部署一样,都是走/mysite/。
如果想直接通过根路径访问,就是把站点文件放到默认根应用deploy/ROOT下:
cp -r /data/wwwroot/mysite/* /opt/tongweb/TongWeb/deploy/ROOT/这样访问http://IP:8080/就是你的站点。
另外一种更灵活的做法是修改conf/server.xml,增加一个Context映射,把外部静态目录直接映射到指定访问路径,比如:
<Context path="/htmlsite" docBase="/data/wwwroot/htmlsite" reloadable="true"/>改完配置后重启TongWeb生效。这种方式适合应用文件不想挪到TongWeb部署目录的项目,比如前端团队自己有发布目录,TongWeb只是做个映射代理。
5.3 部署后的访问验证
部署完别急着交付,按这三个维度把基础验证跑一遍:
- 本地
curl -I http://127.0.0.1:8080/项目名/看响应码; - 浏览器访问,确认页面、CSS、JS、图片都能正常加载,按F12看控制台有没有404的资源路径错误;
- 去TongWeb控制台看应用状态是不是
Started。
静态项目部署经常出现的诡异问题是:改了文件,浏览器里看到的还是旧页面。这不是TongWeb部署失败,而是浏览器缓存。开发调试时建议强制刷新或者开无痕窗口,省得自己和前端团队来回扯皮。
6. 安装过程中常见的坑与排查思路
6.1 启动脚本找不到Java
症状:执行./startserver.sh后,终端输出类似Unable to locate java或者启动进程一闪即逝。
排查路径:先确认当前用户环境变量里有没有JAVA_HOME。用sudo -u tongweb env | grep JAVA看看,因为切用户后环境变量可能和root不一样。然后确认启动脚本对JAVA_HOME的读取逻辑。有些版本要求你自己在setenv.sh里写死JAVA_HOME,我见过在脚本外配置了Java路径结果启动不生效的情况。
解决:在启动脚本同级的setenv.sh(如果存在)或~/.bashrc里显式加上:
export JAVA_HOME=/usr/local/java/jdk1.8.0_202然后重新登录或source一下再启动。
6.2 License授权校验失败
症状:日志里出现license is invalid、license expired、License not found之类的关键词,TongWeb启动后HTTP服务没起来或者起来后过一段时间被自动停掉。
排查路径:一步步排除:
- 授权文件路径对不对?确认在
/opt/tongweb/TongWeb/license/下; - 授权文件属主权限对不对?
ls -l看一眼; - 授权绑定的服务器信息是否和当前机器一致?用
ip link看MAC地址; - 系统时间是否准确?
date确认,时间偏差大了授权校验必挂。
这个坑在虚拟化环境里极其常见:虚拟机迁移、克隆之后网卡MAC变了,授权直接失效。遇到这种情况,别硬调,找厂商重新申请授权或者走授权变更流程才是正路。
6.3 端口被占用导致启动失败
症状:启动日志里出现Address already in use,或者8080端口被一个未知进程占着,TongWeb启动后访问不到控制台。
排查:
ss -tlnp | grep 8080 lsof -i :8080看到占用进程后,如果确实用不到,就Kill掉,或者给TongWeb换一个端口。生产环境经常出现别的中间件或nginx占着8080不放的情况,别硬刚,换端口往往更省事。
6.4 内存不足导致启动失败或运行中进程被系统杀死
症状:启动阶段日志中出现OutOfMemoryError,或者进程运行一段时间后神秘消失,查dmesg发现是OOM Killer干的。
排查:先看机器物理内存:
free -h确认内存余量之后,调大或者调小JVM堆参数。我给一个保守的起步配置,4G内存的机器上跑TongWeb,可以这么设:
export JAVA_OPTS="-Xms512m -Xmx1024m"低于512M的堆跑TongWeb控制台都很勉强,不是不能用,是性能会很难看。
6.5 外部访问不了,本机却正常
症状:服务器上curl 127.0.0.1:8080有响应,其他机器访问不通。
排查路径:
- 防火墙没有放行端口:
sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --reload- 云厂商安全组没有添加规则;
- 如果服务器有多个网卡,TongWeb的Connector可能只绑定了内网IP,检查
conf/server.xml里Connector的address属性,我通常会显式绑定所有可用地址或者特定的对外地址,避免出现“服务在跑,但就是访问不到”的迷惑现象。
6.6 日志怎么看最省力
TongWeb的日志文件都在logs目录下,一般分成几类:
server.log:主运行日志,启动、部署、框架信息都在这;console.log:标准输出日志,可以理解为Java程序往控制台打印的内容;- 应用自身的日志:可能在
deploy对应应用目录下,或者随应用配置输出到其他位置。
排查问题的顺序建议是:先看控制台日志有没有明显异常,再看server.log搜关键词,最后才去看应用自身的输出。很多人一上来就翻应用日志,绕了一大圈发现是中间件层的问题,白费劲。
最后说一点个人感受。TongWeb 7.0.4.9的安装本身并不复杂,但因为它带了一套商业产品的授权流程和更完整的管理体系,步骤比Tomcat多,坑也比Tomcat多一些。装得多了你会发现,绝大多数问题都出在安装前的准备没做好,而不是安装过程中的操作错误。JDK版本、授权文件、运行用户、端口占用,这四件事如果能在动手前花五分钟确认清楚,后面基本是一路顺风的节奏。希望这篇流程和经验总结,能把后来的人从“反复装、反复挂”的循环里拉出来。