openEuler 24.03 LTS SP3 安装 ITACC 平台完整记录

本次安装由codex半自动化安装。

1. 环境信息

  • 虚拟化平台:PVE 9.1
  • 虚拟机 IP:10.139.27.9
  • SSH 用户:bg4vrg
  • SSH 端口:22
  • 操作系统:openEuler 24.03 (LTS-SP3)
  • 目标组件:
    • JDK 17
    • Tomcat 11
    • PostgreSQL 18.1
    • itacc-admin-1.60.0.war
    • itacc_full.dump

2. 实际安装结论

本次环境已经成功安装并可用,最终状态如下:

  • JDK 17 已安装并可用
  • Tomcat 11 已安装并通过 systemd 管理
  • PostgreSQL 18.1 已源码编译安装并通过 systemd 管理
  • itacc 数据库已成功恢复
  • itacc-admin-1.60.0.war 已成功部署
  • 前端页面可打开
  • 登录后菜单可正常点击和打开

3. 与原始方案相比的关键修正

3.1 JDK 17

直接使用 openEuler 仓库安装:

1
sudo dnf install -y java-17-openjdk java-17-openjdk-devel

3.2 Tomcat 11

openEuler 仓库只有 tomcat 9,不满足要求,因此改为使用 Apache 官方二进制包安装。

3.3 PostgreSQL 18.1

openEuler 仓库主版本不是 18.1,因此改为 PostgreSQL 官方源码编译安装。

3.4 PostgreSQL 18.1 额外依赖

实际编译时发现需要额外安装:

1
sudo dnf install -y libicu-devel

否则 configure 会报 ICU 依赖缺失。

3.5 平台数据库配置

应用包里默认数据库地址是:

1
192.168.143.107:5432

必须覆盖为本机数据库,否则应用启动时 Flyway 会连接超时。

3.6 平台部署路径

war 包前端资源引用使用根路径 /assets/...,因此必须部署到站点根路径,也就是:

1
ROOT.war

不能继续挂在 /itacc-admin/ 下,否则首页虽然能打开,但静态资源路径会错。

3.7 空权限数组问题

登录接口实际返回:

1
"permissions": []

前端会把空权限数组直接作为有效权限,导致登录后左侧菜单子项全部被过滤。实际处理方式是补丁修正为:

  • 如果权限数组有值,按接口返回使用
  • 如果权限数组为空且用户名是 admin,则按管理员全权限处理

4. 最终目录规划

4.1 程序目录

1
2
3
/opt/tomcat11
/usr/local/pg18
/usr/local/pg18/data

4.2 临时上传文件

1
2
/tmp/itacc_full.dump
/tmp/itacc-admin-1.60.0.war

5. 基础依赖安装

执行:

1
2
3
4
5
6
7
8
sudo dnf install -y \
wget curl tar vim-enhanced lsof which \
gcc gcc-c++ make \
readline-devel zlib-devel openssl-devel \
libxml2-devel libxslt-devel \
bison flex perl-devel python3-devel systemd-devel \
libicu-devel \
java-17-openjdk java-17-openjdk-devel

6. JDK 17 安装与验证

6.1 安装

1
sudo dnf install -y java-17-openjdk java-17-openjdk-devel

6.2 验证

1
2
3
4
java -version
javac -version
readlink -f /usr/bin/java
readlink -f /usr/bin/javac

本次实际结果:

  • openjdk version "17.0.18"

7. Tomcat 11 安装

7.1 创建运行用户

1
sudo useradd -r -m -U -d /opt/tomcat11 -s /sbin/nologin tomcat

7.2 下载并安装 Tomcat 11

11.0.18 为例:

1
2
3
4
5
6
7
8
9
cd /tmp
curl -fL https://downloads.apache.org/tomcat/tomcat-11/v11.0.18/bin/apache-tomcat-11.0.18.tar.gz -o apache-tomcat-11.0.18.tar.gz || \
curl -fL https://archive.apache.org/dist/tomcat/tomcat-11/v11.0.18/bin/apache-tomcat-11.0.18.tar.gz -o apache-tomcat-11.0.18.tar.gz

sudo rm -rf /opt/tomcat11
sudo mkdir -p /opt/tomcat11
sudo tar -xzf apache-tomcat-11.0.18.tar.gz --strip-components=1 -C /opt/tomcat11
sudo chown -R tomcat:tomcat /opt/tomcat11
sudo chmod +x /opt/tomcat11/bin/*.sh

7.3 systemd 服务文件

文件:

1
/etc/systemd/system/tomcat11.service

内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Unit]
Description=Apache Tomcat 11
After=network.target

[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.18.8-8.oe2403sp3.x86_64
Environment=CATALINA_PID=/opt/tomcat11/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat11
Environment=CATALINA_BASE=/opt/tomcat11
ExecStart=/opt/tomcat11/bin/startup.sh
ExecStop=/opt/tomcat11/bin/shutdown.sh
Restart=on-failure
RestartSec=5
UMask=0007

[Install]
WantedBy=multi-user.target

7.4 启动与放通端口

1
2
3
4
sudo systemctl daemon-reload
sudo systemctl enable --now tomcat11
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

7.5 验证

1
2
3
sudo systemctl status tomcat11 --no-pager -l
curl -I http://127.0.0.1:8080/
ss -ltnp | grep 8080

8. PostgreSQL 18.1 安装

8.1 创建 postgres 用户

1
sudo useradd -m postgres

8.2 下载源码并编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd /usr/local/src
sudo curl -fL https://ftp.postgresql.org/pub/source/v18.1/postgresql-18.1.tar.gz -o postgresql-18.1.tar.gz
sudo tar -xzf postgresql-18.1.tar.gz
cd postgresql-18.1

sudo ./configure --prefix=/usr/local/pg18 \
--with-openssl \
--with-perl \
--with-python \
--with-libxml \
--with-libxslt \
--with-systemd

sudo make -j"$(nproc)"
sudo make install

8.3 初始化数据目录

1
2
sudo mkdir -p /usr/local/pg18/data
sudo chown -R postgres:postgres /usr/local/pg18

检查 locale:

1
locale -a

初始化:

1
2
sudo su - postgres
/usr/local/pg18/bin/initdb -D /usr/local/pg18/data --locale=en_US.UTF-8 --encoding=UTF8

如果系统没有 en_US.UTF-8,可改用:

1
/usr/local/pg18/bin/initdb -D /usr/local/pg18/data --locale=C.utf8 --encoding=UTF8

8.4 配置 PostgreSQL

编辑:

1
/usr/local/pg18/data/postgresql.conf

设置:

1
2
listen_addresses = '*'
port = 5432

编辑:

1
/usr/local/pg18/data/pg_hba.conf

追加:

1
host    all             all             0.0.0.0/0            scram-sha-256

8.5 PostgreSQL systemd 服务

文件:

1
/etc/systemd/system/postgresql.service

内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Unit]
Description=PostgreSQL 18.1 database server
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGDATA=/usr/local/pg18/data
PIDFile=/usr/local/pg18/data/postmaster.pid
ExecStart=/usr/local/pg18/bin/pg_ctl start -D /usr/local/pg18/data -s -w -t 300
ExecStop=/usr/local/pg18/bin/pg_ctl stop -D /usr/local/pg18/data -m fast
ExecReload=/usr/local/pg18/bin/pg_ctl reload -D /usr/local/pg18/data -s
TimeoutSec=300
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

8.6 启动与放通端口

1
2
3
4
sudo systemctl daemon-reload
sudo systemctl enable --now postgresql
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload

8.7 设置密码

1
2
sudo su - postgres
/usr/local/pg18/bin/psql -d postgres

执行:

1
ALTER USER postgres WITH PASSWORD '123.asd#';

8.8 验证

1
2
3
sudo systemctl status postgresql --no-pager -l
ss -ltnp | grep 5432
PGPASSWORD='123.asd#' /usr/local/pg18/bin/psql -h 127.0.0.1 -U postgres -d postgres -c 'select version();'

9. 导入数据库

9.1 上传 dump

itacc_full.dump 上传到:

1
/tmp/itacc_full.dump

9.2 创建数据库

1
PGPASSWORD='123.asd#' /usr/local/pg18/bin/createdb -h 127.0.0.1 -U postgres itacc

9.3 恢复

本次 dump 实际格式为 PostgreSQL custom format,因此使用:

1
2
3
4
5
6
7
PGPASSWORD='123.asd#' /usr/local/pg18/bin/pg_restore \
-h 127.0.0.1 \
-U postgres \
-d itacc \
--no-owner \
--no-privileges \
/tmp/itacc_full.dump

9.4 验证

1
2
PGPASSWORD='123.asd#' /usr/local/pg18/bin/psql -h 127.0.0.1 -U postgres -d itacc -Atc \
"select count(*) from information_schema.tables where table_schema='public';"

本次恢复后,公共 schema 表数量为:

1
38

10. 部署 war 包

10.1 上传 war

将:

1
itacc-admin-1.60.0.war

上传到:

1
/tmp/itacc-admin-1.60.0.war

10.2 覆盖数据库环境变量

应用默认数据库配置位于 application.yml

1
2
3
url: ${DB_URL:jdbc:postgresql://192.168.143.107:5432/itacc?...}
username: ${DB_USER:postgres}
password: ${DB_PASSWORD:123.asd#}

因此需要通过 Tomcat setenv.sh 覆盖。

创建:

1
/opt/tomcat11/bin/setenv.sh

内容:

1
2
3
4
#!/bin/sh
export DB_URL='jdbc:postgresql://127.0.0.1:5432/itacc?currentSchema=public&useUnicode=true&characterEncoding=utf8&stringtype=unspecified&sslmode=disable'
export DB_USER='postgres'
export DB_PASSWORD='123.asd#'

设置权限:

1
2
sudo chown tomcat:tomcat /opt/tomcat11/bin/setenv.sh
sudo chmod 750 /opt/tomcat11/bin/setenv.sh

10.3 以 ROOT.war 方式部署

必须部署到根路径:

1
2
3
4
sudo rm -rf /opt/tomcat11/webapps/ROOT /opt/tomcat11/webapps/ROOT.war
sudo cp /tmp/itacc-admin-1.60.0.war /opt/tomcat11/webapps/ROOT.war
sudo chown tomcat:tomcat /opt/tomcat11/webapps/ROOT.war
sudo systemctl restart tomcat11

10.4 验证

1
2
3
curl -I http://127.0.0.1:8080/
curl -I http://127.0.0.1:8080/assets/index-4OEjHvD5.js
sudo tail -n 80 /opt/tomcat11/logs/catalina.out

正常时:

  • / 返回 HTTP/1.1 200
  • /assets/... 返回 HTTP/1.1 200

11. 修复 admin 登录后菜单无响应问题

11.1 问题现象

  • admin / 123.asd# 可登录
  • 左侧菜单点击后看起来没有反应

11.2 根因

登录接口返回:

1
2
3
4
5
6
7
8
9
{
"msg": "登录成功",
"code": 200,
"data": {
"nickName": "管理员",
"permissions": [],
"token": "..."
}
}

前端逻辑把空权限数组当成有效权限,导致所有子菜单被过滤。

11.3 修复方式

将前端打包文件中的这段逻辑:

1
Array.isArray(l)?Yn(l):s.username.trim()==="admin"?Yn(["*:*:*"]):...

改为:

1
Array.isArray(l)&&l.length>0?Yn(l):s.username.trim()==="admin"?Yn(["*:*:*"]):...

这样空权限数组时:

  • 普通用户仍按默认兜底权限处理
  • admin 自动使用 *:*:*

11.4 修复后处理

重打 ROOT.war 并重启 Tomcat

用户侧需要:

1
2
Ctrl+F5 强制刷新
重新登录

12. 最终验证结果

12.1 服务状态

1
2
sudo systemctl status tomcat11
sudo systemctl status postgresql

12.2 端口监听

1
ss -ltnp | grep -E ':8080|:5432'

12.3 HTTP 验证

1
2
curl -I http://127.0.0.1:8080/
curl -I http://127.0.0.1:8080/assets/index-4OEjHvD5.js

12.4 数据库验证

1
PGPASSWORD='123.asd#' /usr/local/pg18/bin/psql -h 127.0.0.1 -U postgres -d itacc -Atc 'select 1;'

12.5 实际可用结果

  • 可以访问首页
  • 可以使用 admin / 123.asd# 登录
  • 登录后左侧菜单可以正常点击打开

13. 当前重要配置汇总

13.1 访问地址

1
http://10.139.27.9:8080/

13.2 数据库连接

1
2
3
4
5
Host: 127.0.0.1
Port: 5432
Database: itacc
User: postgres
Password: 123.asd#

13.3 平台登录

1
2
User: admin
Password: 123.asd#

14. 建议的后续优化

  1. 删除 Tomcat 默认应用:

    • docs
    • examples
    • manager
    • host-manager
  2. 将测试环境数据库放通规则从:

1
host    all             all             0.0.0.0/0            scram-sha-256

改为精确网段。

  1. 将前端“admin 空权限数组兜底”修复回源代码,而不是只保留在线上包中。

  2. 为 PostgreSQL 和 Tomcat 做备份与升级记录。

openEuler 24.03 LTS SP3 安装 ITACC 平台完整记录

https://bg4vrg.com/post/20260409084314.html

作者

fei

发布于

2026-04-09

更新于

2026-04-09

许可协议

评论