去年接了一个老客户的A8-N国产化改造项目。他们原来的OA跑在Windows Server + SQL Server上,因为信创要求,必须整体迁移到完全国产化的软硬件环境。等我把安装包解压完,看着里面那一堆关于麒麟、达梦、东方通的适配说明,第一反应是:这趟的坑不会少。
实际上,A8-N国产化环境部署本身并不神秘——只要把操作系统、数据库、中间件、应用四层的关系理顺,再避开几个高频坑,整个流程一下午就能走通。这篇文档把我这次在飞腾平台上的完整实施过程写下来,包括每个坑是怎么踩的、怎么排查的,希望能给正在做A8-N信创适配的同行省点时间。
1. 部署前先把架构、版本、目录三件事定死
很多新手拿到安装包就急着关防火墙、解压、跑install.sh,结果跑到一半发现数据库版本不对,或者磁盘不够用,又回头重新折腾。我建议先花半小时把三个基础问题定下来,这事想清楚了,后面就是按部就班。
1.1 CPU架构决定整套技术栈走向
国产化环境不只是一个"换了名字的Linux",CPU架构才是底层变量。目前常见的几类国产CPU,对应的软件包差异非常大:
- 飞腾、鲲鹏:ARM架构,JDK、数据库、中间件必须找aarch64版本。
- 海光、兆芯:x86架构,兼容性最好,基本可以沿用原来CentOS时代的部署思路。
- 龙芯:LoongArch架构,适配资源相对少,很多组件要单独确认。
- 申威:SW64架构,更小众,通常只出现在特定行业。
我这次用的是飞腾S2500,所以所有软件包都认准aarch64。架构搞错的典型表现是:启动时报Cannot execute binary file,或者java: cannot execute binary file。很多同事在这卡了半小时,其实只是包拿错了,换成对应架构的版本立刻就好。
顺便说一句,拿到安装介质后,先看包名里的架构标识。比如JDK的包名经常带aarch64、x86_64字样,数据库和中间件也一样,这一步花两分钟,能省后面两小时。
1.2 版本兼容矩阵:别等装到一半才喊停
A8-N本身对中间件和数据库有明确的适配清单,官方文档里一定有一张兼容性列表。虽然每个项目拿到的版本组合可能不同,但实施人员还是要记住几个常见搭配:
| 操作系统 | 数据库 | 中间件 | A8-N版本 | 实际使用情况 |
|---|---|---|---|---|
| 银河麒麟V10 SP1/SP2 | 达梦DM8 | 东方通TongWeb 7.0 | A8-N V5.1 | 最普遍 |
| 统信UOS 1050 | 人大金仓V8R6 | 金蝶天燕Apusic | A8-N V5.1 | 常见于政务云 |
| openEuler 22.03 | openGauss | 东方通TongWeb | A8-N V5.1 | 部分信创项目 |
操作系统和数据库选型通常是甲方已经定死的,中间件还可以商量。我的建议是:优先选A8-N安装包内置或官方适配文档里推荐的那套组合,别自己发明搭配。版本不一致的典型翻车场景,是用高版本数据库驱动连低版本数据库,或者中间件版本过老不支持当前JDK,这种问题排查起来非常痛苦,而且往往发生在半夜割接的时候。
如果安装包里带了适配说明文档,先翻到"兼容性列表"那一页,比对安装包的版本号和你手里的OS、数据库、中间件版本,确认没问题再往下走。
1.3 磁盘规划:目录分开,坑少一半
OA系统最怕的是附件目录把根分区写满。我之前见过一个项目,所有数据都在一个分区里,跑了两年之后磁盘100%,服务直接瘫痪,备份也做不了。所以规划磁盘时我建议至少分三个区:
- 系统分区:50GB起,装操作系统用。
- 应用分区:100GB以上,放A8-N应用和中间件。
- 数据分区:200GB以上,放数据库文件、附件、备份。
我这次的实际划分如下,仅供参考:
/opt/A8-N—— A8-N应用安装目录/opt/TongWeb—— 东方通中间件/dmdata—— 达梦数据库数据文件/data/A8-N/file—— OA附件、导出文件、临时文件
建议在系统安装时用LVM,留一部分可扩展的卷组,不要图省事把所有空间都分给根分区。后面数据涨了,LVM扩容比重新分区要简单太多。
2. 系统层准备:看似无用,其实最容易卡住部署
这一步很多人觉得无所谓,实际上国产化环境里,部署失败的根因有一大半出在系统基础配置上。操作系统层面的准备工作,我按下面几条依次做一遍。
2.1 安装包校验与License准备
说实话,国产化安装包从厂商传递到实施人员手里,中间经过的渠道往往比较多,介质损坏或者下载不完整的情况并不罕见。解压之前先做一下完整性校验:
sha256sum A8-N_xxx.tar.gz md5sum TongWeb_xxx.tar.gz拿这个值和厂商提供的校验码比对,不一致就重新下载,别硬着头皮解压。
A8-N的License文件通常是一个.lic或.bin文件,跟服务器硬件信息、机器码绑定。正式环境一定要确认申请License时填的机器码跟当前服务器一致,不同的机器码即使拿到License也启动不了。如果安装包里带了测试License,先别拿到生产环境用。
2.2 字符集、时区、资源限制一个都不能少
国产操作系统安装完之后,默认字符集不一定是UTF-8,有些服务器装好之后是en_US.UTF-8或者更糟糕的POSIX。A8-N页面和数据库都依赖UTF-8编码,乱码问题往往根源就在这里。我一般在部署前先执行:
localectl set-locale LANG=zh_CN.UTF-8 source /etc/profile时区同样重要。很多国产服务器默认时区是UTC,而A8-N的License校验会读取系统时间。如果系统时间和北京时间偏差了几个小时,轻则日志时间对不上,重则License直接判定无效。建议统一设置并开启时间同步:
timedatectl set-timezone Asia/Shanghai timedatectl set-ntp yes另外,系统文件描述符限制也是隐藏坑。默认ulimit -n经常是1024,对于Oracle、MySQL这类数据库和Web中间件来说完全不够用。修改方式:
echo "* soft nofile 65536" >> /etc/security/limits.conf echo "* hard nofile 65536" >> /etc/security/limits.conf改完重新登录会话,用ulimit -n确认是否生效。
2.3 防火墙与安全策略
国产操作系统默认防火墙通常是开启的,如果不放行端口,A8-N安装向导虽然能跑,但浏览器访问永远超时。我这次需要放行的端口:
| 服务 | 端口 | 说明 |
|---|---|---|
| TongWeb管理控制台 | 9060 | 管理页面 |
| A8-N应用 | 8080/8081 | HTTP访问 |
| 达梦数据库 | 5236 | JDBC连接 |
| 中间件部署/关闭 | 随机 | 偶发需要 |
操作方式:
systemctl stop firewalld systemctl disable firewalld如果服务器上有安全加固要求不能关防火墙,就单独执行:
firewall-cmd --permanent --add-port=9060/tcp firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --permanent --add-port=5236/tcp firewall-cmd --reloadSELinux如果开启,也建议先临时关闭。国产化环境里很多应用目录的SELinux上下文配置并不完善,开着会导致文件读取权限异常,表现很诡异。
setenforce 0注意setenforce 0只是临时生效,永久关闭要修改/etc/selinux/config,把SELINUX=enforcing改成SELINUX=disabled。
2.4 JDK与环境的正确姿势
A8-N一般要求JDK 1.8版本,具体看安装包自带的说明。在国产化ARM环境下,JDK必须选对应架构的版本,我用的是aarch64版本的OpenJDK。
安装完成后,环境变量建议写进/etc/profile:
export JAVA_HOME=/usr/local/java/jdk1.8 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar验证一下:
java -version输出里应该能看到Java HotSpot(TM) 64-Bit Server VM,并且如果版本支持,能看到aarch64相关字段。这一步确认完,系统环境才算真正就绪。
3. 达梦数据库部署与建库
达梦数据库在信创项目里出现频率非常高。虽然它是国产数据库,但整体使用习惯跟Oracle有几分相似,用过Oracle的人上手会比较快。下面讲几个关键节点。
3.1 实例初始化参数必须先定
达梦DM8的安装本身不复杂,图形化和静默安装都支持。我建议在服务器上用图形化或者命令行方式安装,但最关键的是初始化实例时那两个参数,一旦定错后面改起来代价很大。
达梦安装完成后,通常需要创建数据库实例,常用的初始化命令大致如下(具体路径以实际安装目录为准):
su - dmdba cd /opt/dmdbms/bin ./dminit PATH=/dmdata/data PAGE_SIZE=32 LOG_SIZE=2048 CHARSET=1 CASE_SENSITIVE=Y其中:
PATH:数据文件存放路径,对应前面规划的数据分区。PAGE_SIZE:页大小,A8-N一般要求32K,按官方文档配置。CHARSET=1:表示数据库字符集为UTF-8。这个必须确认好,否则后续页面中文显示问号。CASE_SENSITIVE:大小写敏感选项,按A8-N适配文档要求设置,不同版本要求可能不同。
我见过一个项目,安装人员初始化实例时没注意字符集,用了默认的GBK,结果OA系统里所有中文都变成乱码。最后只能重建实例,重新初始化,白白多花了一个晚上。这一步真的值得停下来反复确认三遍。
3.2 创建业务用户和表空间
实例初始化完成后,启动数据库服务,然后用disql登录:
su - dmdba cd /opt/dmdbms/bin ./disql SYSDBA/SYSDBA@localhost:5236在disql里创建A8-N专用的表空间和用户:
CREATE TABLESPACE A8_DATA DATAFILE '/dmdata/A8/A8_DATA.DBF' SIZE 2048; CREATE USER A8 IDENTIFIED BY "A8@123" DEFAULT TABLESPACE A8_DATA; GRANT DBA TO A8;用户名和密码按实际规划填写,但有一点要提醒:密码里尽量避免特殊字符如@、#,防止在配置文件和连接串里需要转义。A8-N安装向导里输入特殊字符有时会解析出问题,这种低级坑烦人得很。
3.3 初始化脚本导入
A8-N安装介质里通常会附带数据库初始化脚本,里面包含建表、初始化数据等大量的SQL。导入方式可以在disql中执行脚本:
SQL> start /opt/A8-N/script/create_tables.sql脚本大的话,导入可能要几分钟到十几分钟,期间不要关闭窗口,也不要中断数据库服务。导入完成后可以简单验证一下表数量:
SELECT COUNT(*) FROM USER_TABLES;如果是一个干净的新环境,这个数字应该和文档里给出的表清单数量相差无几。如果差距很大,说明导入有问题,尽早排查。
3.4 导入报错处理两例
实际导入时遇到过两类问题。
第一类是用户已存在或表已存在。这种情况往往是因为之前有人跑过一遍脚本,或者是脚本本身带有CREATE TABLE IF NOT EXISTS但部分版本不支持。处理办法简单粗暴:把业务用户DROP掉重新创建,再重新导入一遍,但前提是确认这个库上没有其他业务。
第二类是脚本里带了别家数据库的方言。A8-N有些历史脚本是从Oracle或者MySQL版本抽出来的,里面可能有反引号、ENGINE=InnoDB、NUMBER(10)之类语法,在达梦里会报错。如果官方没有提供达梦专用脚本,只能手动改脚本或者找厂商要。所以拿到安装包后,先打开脚本目录看一眼里面的SQL风格。
4. 东方通中间件部署与调优
中间件这层是连接应用和数据库的桥梁,部署上相对直接,但JVM参数和部署方式有一些值得注意的地方。
4.1 部署方式与目录结构
东方通TongWeb的安装介质通常是tar包,解压即可用。我解压到了/opt/TongWeb。A8-N安装包有可能自带了配套中间件,这种情况下优先用自带的版本,版本一致性问题最少。
启动脚本在bin目录下:
/opt/TongWeb/bin/startserver.sh启动之后访问http://服务器IP:9060进入管理控制台,默认账号密码首次登录会要求修改。控制台里可以查看应用部署状态、JVM内存使用情况、数据源连接状态等。
如果需要部署war包,把war包放到autodeploy目录下,或者通过控制台手动部署。A8-N如果是向导安装到当前中间件,这一步通常已经被安装程序处理好了。
4.2 JVM参数调优
A8-N是典型的Java Web应用,JVM给得太小容易频繁Full GC,给得太大又可能跟数据库抢内存。以物理内存8G的服务器为例,我的建议是这样分配:
- A8-N应用和中间件:4G堆内存
- 达梦数据库:至少3G内存
- 系统本身:预留1G以上
编辑TongWeb的启动脚本,在JAVA_OPTS里加参数:
JAVA_OPTS="-Xms4096m -Xmx4096m -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8"注意-Xms和-Xmx建议设成一样,避免运行时动态扩容导致性能抖动。另外,国产化ARM机器上的JDK,有些参数跟x86版JDK不同,如果启动时报不支持某参数,把那个参数去掉就行,不影响核心运行。
4.3 部署后的路径与日志验证
应用部署完,先别急着登录页面。先看日志:
tail -f /opt/TongWeb/logs/*.out启动日志里如果出现Deploy application finished或类似字样,说明应用启动流程走完了。如果出现数据库连接失败、License错误,就先去处理对应环节。
5. A8-N安装:向导背后的原理与手动修整
A8-N的安装向导设计得相对友好,它会引导你完成数据库信息填写、中间件选择、License导入等步骤。但向导跑通只是第一步,部署完成后通常还有一些需要手工微调的地方。
5.1 安装向导流程
解压安装包后,在安装目录下执行:
./install.sh然后按提示选择语言,接着填写:
- 数据库类型:选达梦
- 数据库IP、端口、实例名
- 数据库用户名和密码
- 中间件路径
- License文件路径
向导本质上是把这些部署参数写入A8-N的配置文件中,然后调用中间件脚本部署应用并启动。整个过程如果停在某一步,先看终端输出,它一般会提示缺少什么组件或连接失败。
有个细节:安装向导里的路径尽量用纯英文,不要带中文和空格。国产软件对路径字符支持参差不齐,/opt/A8-N这种路径最省心。
5.2 配置文件微调:部署后的体力活
向导跑通之后,有几个配置项我每次都会手工检查调整。
首先是附件存储路径。A8-N默认可能在应用目录下存放上传的附件和导出文件,时间长了会撑爆系统盘。我改到独立数据分区:
attachment.path=/data/A8-N/file其次是上传文件大小限制。默认值可能偏小,OA系统里上传几百MB的文件是常有的事。这个限制在配置文件里一般能找到,按需调大。
然后是临时目录。A8-N运行过程中会产生临时文件,如果/tmp分区空间不足,会出现莫名其妙的上传失败或导出失败。建议把临时目录同样指到数据分区:
temp.path=/data/A8-N/temp每次修改配置前先备份原文件,改完要重启中间件生效。别图省事只重启应用不重启中间件,有时候配置不生效就是因为中间件还缓存着旧配置。
5.3 服务启停与开机自启
A8-N和中间件合在一起时,通常由中间件脚本统一管理。手动启停用:
/opt/TongWeb/bin/startserver.sh /opt/TongWeb/bin/stopserver.sh但生产环境不能总靠人去盯着,配置systemd开机自启更稳妥。以下是我在实际环境中用过的service文件示例:
[Unit] Description=A8-N OA Service After=network.target [Service] Type=forking ExecStart=/opt/TongWeb/bin/startserver.sh ExecStop=/opt/TongWeb/bin/stopserver.sh User=root Restart=on-failure [Install] WantedBy=multi-user.target写入/etc/systemd/system/a8n.service后:
systemctl daemon-reload systemctl enable a8n systemctl start a8n这样即使服务器意外重启,A8-N也会跟着起来,省得大晚上跑机房。
6. 部署验证与排障实录
配置全部完成之后,别急着交工。建议按清单逐项验证一遍,再处理几个我这次实际遇到的典型问题。
6.1 功能验证清单
| 验证项 | 操作 | 预期结果 |
|---|---|---|
| 登录页访问 | 浏览器打开应用地址 | 出现登录页,无乱码 |
| 系统管理员登录 | 用admin账号登录 | 进入首页无报错 |
| 发起流程 | 新建一个审批流程 | 流转正常,待办可见 |
| 附件上传下载 | 上传文件再下载 | 文件名正常,内容不损坏 |
| 用户同步 | 从组织架构导入用户 | 用户能看到,部门层级正确 |
| 系统监控 | 查看系统监控页 | CPU、内存、磁盘展示正常 |
这六项如果都能通过,环境基本就稳了。
6.2 我遇到的四个典型问题
问题一:数据库连接失败
现象:登录页能打开,但点击登录提示无法连接数据库。
排查链路:先ping数据库IP,通了;再检查端口:
telnet 数据库IP 5236端口不通。然后用disql本地登录数据库,发现数据库服务没起来。查了一下服务状态,果然是达梦数据库服务没设置开机自启,服务器重启后数据库起不来。手动启动数据库服务后再重启A8-N,问题解决。
问题二:页面中文乱码
现象:登录页本身正常,但系统里录入的中文显示为问号,新建流程里中文保存后变成乱码。
排查链路:操作系统字符集已经确认是UTF-8,中间件启动参数也带了-Dfile.encoding=UTF-8,最后定位到达梦数据库实例。初始化实例时字符集选了默认值,没有明确指定UTF-8。这个只能在数据库初始化阶段规避,上线后发现重建实例的代价非常大。
问题三:License校验失败
现象:启动后系统提示License无效或过期,但文件明明是新拿到的。
排查链路:检查License文件内容,确认机器码和当前服务器一致,没问题;检查系统时间,发现date显示的日期比实际时间偏了几个小时。原来是服务器时区是UTC,没同步北京时间。把时区改成Asia/Shanghai,并开启NTP同步后重启应用,License正常。
问题四:安装向导中途退出
现象:install.sh跑到一半报错退出,没有任何代码提示,终端输出只有一行缺少某脚本。
排查链路:检查当前目录的写权限,没问题;检查磁盘空间,发现应用分区只有几百MB剩余空间,是之前解压临时文件占满了。清掉临时文件,给应用分区腾出空间,重新执行安装向导,顺利跑完。后来我把数据目录独立挂载作为硬性规矩,就是这次的血泪教训。
6.3 上线前的备份习惯
环境验证通过后,立刻做一次全量备份再交付。我这边通常做三件事:
- 达梦数据库全备,用达梦自带的备份工具或SQL执行
BACKUP DATABASE。 - 归档A8-N配置目录和License文件,放到独立备份目录。
- 附件目录做一次快照或用rsync同步到备份盘。
备份的目的不是给演出示意,而是万一后续升级出问题,能第一时间回滚到当前可用状态。国产化环境里很多厂商补丁包质量参差不齐,没有回滚能力的升级都是赌博。
整个流程走完,你会发现A8-N国产化部署本质上就是:按官方兼容清单把组件选对,把系统基础环境收拾干净,再照着向导填参数。真正花时间的反而是那些不起眼的小问题——时间没同步、字符集不对、目录空间不够。我这次把实施过程按步骤沉淀成文档后,后面团队里新同事照着走一遍,四个小时就能完成一套环境。后面如果你在达梦、TongWeb或A8-N部署过程中遇到别的奇怪问题,欢迎留言交流,我也在持续收集信创项目里的各种坑,互相学习少走弯路。