跳到主要内容

信创环境部署:麒麟与达梦 8

本文以银河麒麟高级服务器操作系统 V10 + 达梦 8(DM8)+ Java 8 + Redis + Nginx 为例,介绍 SurveyKing Pro 的首次部署流程。完成后,用户通过 Nginx 访问系统,后端连接达梦数据库和 Redis。

示例将所有组件部署在一台服务器上。分机部署时,请将数据库、Redis 和 Nginx 上游地址调整为实际内网地址。单位要求使用 TongWeb 等国产中间件时,见文末的中间件替换说明

1. 准备交付文件和运行环境

交付文件

准备同一版本、适配 DM8 的以下文件,并上传至服务器上的 /opt/surveyking-package 目录:

文件用途
init-dm.sql独立交付的数据库初始化脚本,包含表结构、基础数据及所需函数
survey-3.2-xxxx.zip前端交付包,包含管理后台与公开页面
surveyking-server.jar后端程序,已包含达梦数据库驱动
license.lic与部署服务器匹配的系统授权文件

xxxx 代表实际交付的版本标识,执行命令时请替换为完整文件名。如果 JAR 和授权文件的名称也带版本标识,请在部署时分别复制为 surveyking-server.jarlicense.lic,并确认两者来自同一套交付文件。

环境约定

项目本文示例
操作系统银河麒麟高级服务器操作系统 V10
运行环境64 位 Java 8,安装包与服务器 CPU 架构一致
数据库DM8,安装在 /opt/dmdbms,监听 5236
数据库用户及 schemaSURVEYKING
Redis127.0.0.1:6379,使用 0 号逻辑库
后端127.0.0.1:48080,生产配置 prod
访问入口Nginx,域名示例 survey.example.com
应用目录/opt/surveyking
本地附件目录/opt/surveyking/files

同机部署可从 4 核 CPU、8 GB 内存起步,并按并发量、数据库大小和附件容量增加资源。本文 Java 最大堆内存为 4 GB,还需为达梦、Redis、操作系统及 Java 的其他内存开销预留空间,请按实际情况调整。

以下 Linux 命令由具有 sudo 权限的运维账号执行;SQL 在达梦 disql 中执行。示例域名、密码和文件名都需要替换为现场值。

2. 安装 Java 8、Redis 和 Nginx

使用麒麟系统的软件源或单位提供的离线安装包。软件源提供以下包名时,可执行:

sudo dnf install -y java-1.8.0-openjdk-headless redis nginx unzip
java -version
redis-server --version
nginx -v

确认 java -version 显示 1.8。如果使用指定 JDK,请记下其 java 可执行文件的绝对路径,后续替换服务配置中的 /usr/bin/java

启动 Redis:

sudo systemctl enable --now redis
redis-cli -h 127.0.0.1 -p 6379 ping

未启用密码时应返回 PONG。已启用密码时,使用支持 --askpass 的客户端执行 redis-cli --askpass -h 127.0.0.1 -p 6379 ping,按提示输入密码。服务名和配置文件位置以现场安装结果为准。

Redis 监听地址与后端连接地址应保持一致。同机部署使用回环地址;分机部署时允许应用服务器访问对应内网地址。

3. 初始化达梦数据库

3.1 安装并创建数据库实例

按照达梦官方单机安装说明,使用 dmdba 操作系统账号安装 DM8,完成安装程序要求的服务注册操作。选择与麒麟版本、CPU 架构匹配的安装包,并配置有效的数据库授权。

本系统使用以下实例参数:

参数设置值说明
PAGE_SIZE32数据页大小为 32 KB
EXTENT_SIZE16簇大小为 16 页
CHARSET1UTF-8 编码
CASE_SENSITIVE0大小写不敏感
BLANK_PAD_MODE0不采用空格填充模式
PORT_NUM5236数据库端口,可按现场调整

页大小、字符集和大小写规则需要在创建实例时设置。若数据库由管理员统一提供,请先确认这些参数满足要求,再创建应用用户。

以下为新实例的命令行示例。将占位密码替换为符合数据库密码策略的实际值,安装目录和数据目录也可按需调整:

sudo install -d -o dmdba -m 0750 /data/dm8
sudo -u dmdba env LD_LIBRARY_PATH=/opt/dmdbms/bin \
/opt/dmdbms/bin/dminit \
PATH=/data/dm8 DB_NAME=SURVEYKING INSTANCE_NAME=SURVEYKING \
PORT_NUM=5236 PAGE_SIZE=32 EXTENT_SIZE=16 \
CHARSET=1 CASE_SENSITIVE=0 BLANK_PAD_MODE=0 \
SYSDBA_PWD='<管理用户密码>' SYSAUDITOR_PWD='<审计用户密码>'

注册并启动数据库实例服务:

sudo /opt/dmdbms/script/root/dm_service_installer.sh \
-t dmserver -dm_ini /data/dm8/SURVEYKING/dm.ini -p SURVEYKING
sudo systemctl enable --now DmServiceSURVEYKING

dm.ini 路径和服务名以实际创建结果为准。数据库管理员已经提供可用实例时,从下一步开始。

3.2 设置兼容参数并创建应用用户

在数据库服务器上打开 disql

sudo -u dmdba env LANG=en_US.UTF-8 LD_LIBRARY_PATH=/opt/dmdbms/bin \
/opt/dmdbms/bin/disql /nolog

输入 LOGIN,按提示填写服务器地址 127.0.0.1:5236、用户名 SYSDBA 和管理密码。登录方式详见达梦 DIsql 使用说明

登录后执行以下 SQL,其中应用用户密码需要自行设置,并在后端配置中使用相同的值:

WHENEVER SQLERROR EXIT SQL.SQLCODE;

SP_SET_PARA_VALUE(2, 'COMPATIBLE_MODE', 4);
SP_SET_PARA_VALUE(2, 'JSON_MODE', 2);

CREATE USER SURVEYKING IDENTIFIED BY "<应用用户密码>";
GRANT RESOURCE TO SURVEYKING;

EXIT;

重启实例,使兼容参数生效:

sudo systemctl restart DmServiceSURVEYKING

等待数据库恢复连接后,再用 SYSDBA 登录 disql,确认两个参数分别为 42

SELECT PARA_NAME, PARA_VALUE
FROM V$DM_INI
WHERE PARA_NAME IN ('COMPATIBLE_MODE', 'JSON_MODE');
EXIT;

3.3 导入 init-dm.sql

init-dm.sql 会在 SURVEYKING schema 下创建表和导入基础数据。应用用户与同名 schema 已在上一步创建,初始化脚本只需在该空 schema 中执行一次。

将 SQL 文件放到 dmdba 可读取的目录;数据库分机部署时,请先将文件上传到数据库服务器:

sudo install -d -o dmdba -m 0700 /home/dmdba/surveyking-init
sudo install -o dmdba -m 0600 /opt/surveyking-package/init-dm.sql \
/home/dmdba/surveyking-init/init-dm.sql

sudo -u dmdba env LANG=en_US.UTF-8 LD_LIBRARY_PATH=/opt/dmdbms/bin \
/opt/dmdbms/bin/disql /nolog

输入 LOGIN,这次使用 SURVEYKING 应用用户及其密码登录,然后执行:

@/home/dmdba/surveyking-init/init-dm.sql

SQL 文件按 UTF-8 编码读取,执行过程中不应出现 SQL 错误。脚本完成后会提交并退出 disql;遇到 SQL 错误也会退出,请先排查错误再继续部署。脚本已包含所需的 SK_JSON_NUMBER 函数,无需单独安装。

如需使用其他应用用户名,请同时调整 SQL 文件中的 SET SCHEMA SURVEYKING、创建用户的 SQL,以及后端配置中的 schema 和用户名,确保三者一致。

4. 部署后端和授权文件

4.1 创建运行账号及目录

在应用服务器上执行:

sudo useradd --system --user-group --home-dir /opt/surveyking \
--shell /sbin/nologin surveyking
sudo mkdir -p /opt/surveyking/{server,client,config,files,logs}
sudo chown -R surveyking:surveyking /opt/surveyking
sudo chmod 755 /opt/surveyking /opt/surveyking/client
sudo chmod 750 /opt/surveyking/config

sudo install -o surveyking -g surveyking -m 0640 \
/opt/surveyking-package/surveyking-server.jar \
/opt/surveyking/server/surveyking-server.jar
sudo install -o surveyking -g surveyking -m 0600 \
/opt/surveyking-package/license.lic \
/opt/surveyking/config/license.lic

如果运行账号已由运维创建,可跳过 useradd,并确认目录归属一致。后端启动时会通过 --license.path 显式加载上面的授权文件;请使用针对实际部署服务器签发的文件。

4.2 配置数据库和 Redis

创建 /opt/surveyking/config/application-prod.yml,填写实际连接信息:

/opt/surveyking/config/application-prod.yml
server:
address: 127.0.0.1
port: 48080

spring:
datasource:
dynamic:
datasource:
master:
name: SURVEYKING
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://127.0.0.1:5236?schema=SURVEYKING
username: SURVEYKING
password: '请替换为应用用户密码'
redis:
host: 127.0.0.1
port: 6379
database: 0
# 仅在 Redis 启用密码时取消下一行注释,并填写实际密码。
# password: '请替换为 Redis 密码'

logging:
file:
name: /opt/surveyking/logs/surveyking-server.log

配置说明:

  • master.name 和 JDBC URL 中的 schema 都是数据库的应用 schema,本例均为 SURVEYKING
  • usernamepassword 使用上一步创建的应用账号。
  • Redis 无密码时,省略 password 配置项,也不要设置 Redis 密码环境变量。 有密码时再填写实际值。
  • Nginx 与后端分机部署时,将 server.address 改为应用服务器供 Nginx 访问的内网地址,并同步修改 Nginx 上游地址。

设置配置文件权限:

sudo chown surveyking:surveyking /opt/surveyking/config/application-prod.yml
sudo chmod 600 /opt/surveyking/config/application-prod.yml

4.3 使用 systemd 启动后端

创建服务文件:

/etc/systemd/system/surveyking.service
[Unit]
Description=SurveyKing Pro
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=surveyking
Group=surveyking
WorkingDirectory=/opt/surveyking/files
ExecStart=/usr/bin/java -Xms512m -Xmx4g -Dfile.encoding=UTF-8 -jar /opt/surveyking/server/surveyking-server.jar --spring.profiles.active=prod --spring.config.additional-location=file:/opt/surveyking/config/ --license.path=/opt/surveyking/config/license.lic
SuccessExitStatus=143
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

交付的后端默认使用 prod,启动命令中也显式指定该配置。外部的 application-prod.yml 用于覆盖部署环境的连接和日志设置。

-Xmx4g 表示最大堆内存为 4 GB,请根据服务器可用内存和业务规模修改。 修改服务文件后,需要执行 systemctl daemon-reload 并重启服务。

确认达梦和 Redis 已就绪,再启动应用:

sudo systemctl daemon-reload
sudo systemctl enable --now surveyking
sudo systemctl status surveyking --no-pager
sudo journalctl -u surveyking -n 100 --no-pager

日志出现启动完成信息,且没有数据库、Redis 或授权错误后,继续配置前端。

5. 部署前端并配置 Nginx

5.1 解压前端交付包

将下面的 survey-3.2-xxxx.zip 替换为实际交付文件名:

sudo unzip -q /opt/surveyking-package/survey-3.2-xxxx.zip \
-d /opt/surveyking/client
sudo chown -R surveyking:surveyking /opt/surveyking/client
sudo chmod -R a+rX /opt/surveyking/client

test -f /opt/surveyking/client/dist/public/index.html
test -f /opt/surveyking/client/dist/admin/index.html

两个入口文件都应存在,最终目录如下:

/opt/surveyking/
├── server/
│ └── surveyking-server.jar
├── config/
│ ├── application-prod.yml
│ └── license.lic
├── client/
│ └── dist/
│ ├── public/
│ │ └── index.html
│ └── admin/
│ └── index.html
├── files/
└── logs/

5.2 配置站点

创建 /etc/nginx/conf.d/surveyking.conf,将 survey.example.com 换为实际访问域名。通过 IP 访问时,可填写服务器 IP。

确认 Nginx 主配置的 http {} 中已经包含 include /etc/nginx/conf.d/*.conf;,并加载了 mime.types。下面的 map 位于 server 外部,由主配置纳入 http;若已经定义过同名变量,请复用现有定义。

/etc/nginx/conf.d/surveyking.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

server {
listen 80;
server_name survey.example.com;
index index.html;
client_max_body_size 100m;

location = /pub { return 301 /pub/; }
location = /adm { return 301 /adm/; }

# 两套前端入口 HTML 不缓存。
location = /pub/index.html {
root /opt/surveyking/client/dist/public;
add_header Cache-Control "no-cache, no-store, must-revalidate" always;
try_files /index.html =404;
}

location = /adm/index.html {
root /opt/surveyking/client/dist/admin;
add_header Cache-Control "no-cache, no-store, must-revalidate" always;
try_files /index.html =404;
}

location ^~ /pub/ {
alias /opt/surveyking/client/dist/public/;
}

location ^~ /adm/ {
alias /opt/surveyking/client/dist/admin/;
}

# 答题、结果、公开查询等页面使用 public 入口。
location ~ ^/(e|s|t|q|share|redeem)(/|$) {
root /opt/surveyking/client/dist/public;
add_header Cache-Control "no-cache, no-store, must-revalidate" always;
try_files /index.html =404;
}

location ~ ^/user/(login|register|binding)/?$ {
root /opt/surveyking/client/dist/public;
add_header Cache-Control "no-cache, no-store, must-revalidate" always;
try_files /index.html =404;
}

# 接口路径原样传递给后端,proxy_pass 末尾不添加 /。
location ^~ /admin-api {
proxy_pass http://127.0.0.1:48080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_buffering off;
proxy_cache off;
proxy_connect_timeout 60s;
proxy_read_timeout 1800s;
proxy_send_timeout 1800s;
}

location ^~ /captcha {
proxy_pass http://127.0.0.1:48080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

# 管理后台页面及刷新后的路由回退。
location / {
root /opt/surveyking/client/dist/admin;
add_header Cache-Control "no-cache, no-store, must-revalidate" always;
try_files $uri $uri/ /index.html;
}
}

检查配置并启动或重新加载 Nginx:

sudo nginx -t
sudo systemctl enable --now nginx
sudo systemctl reload nginx

确认域名解析到服务器,并按网络策略放行访问端口。启用 HTTPS 时,在该站点配置有效证书并保留相同的路由与代理规则,系统中的对外地址也统一使用 HTTPS。

6. 登录并完成系统初始化

浏览器打开 http://survey.example.com/user/login,使用交付说明中的管理员账号登录。

部署完成后必须进行系统初始化,再正式开放使用。 根据实际环境设置系统名称、对外访问地址、管理员信息和文件存储,并修改初始登录密码。

配置本地硬盘存储

如果附件保存在本地硬盘,打开管理后台的 基础设置 → 文件管理 → 文件配置,页面路径为 /infra/file/file-config

编辑“本地磁盘”配置,并填写:

配置项本文示例填写说明
存储器本地磁盘选择本地磁盘类型
基础路径/opt/surveyking/files后端所在服务器的绝对路径,运行用户必须可读写
自定义域名http://survey.example.com使用用户实际可访问的地址;启用 HTTPS 时使用 https://,末尾不加 /

保存后,将该项设为主配置,点击“测试”,确认返回的文件地址可以打开。本地文件通过后端接口访问,上面的 Nginx /admin-api 代理已覆盖该路径。

若改用 /data/files 等其他目录,请先在后端服务器上创建目录并授予运行用户权限,再修改“基础路径”:

sudo install -d -o surveyking -g surveyking -m 0750 /data/files

完成初始化后,创建一个测试问卷并提交答卷,检查后台数据,以及附件上传、预览和下载。确认登录、填写和文件访问都正常后,再正式使用。

7. 常用运维命令与问题排查

# 查看后端状态与最近日志
sudo systemctl status surveyking --no-pager
sudo journalctl -u surveyking -n 100 --no-pager

# 修改配置后重启后端
sudo systemctl restart surveyking

# 停止后端
sudo systemctl stop surveyking

# 修改 Nginx 配置后检查并加载
sudo nginx -t && sudo systemctl reload nginx
现象检查内容
数据库连接失败DM8 服务和 5236 端口、应用用户名与密码、内网连通性
提示表或函数不存在SQL 是否成功导入、JDBC URL 的 schema 是否一致、两个兼容参数是否生效
导入时提示中文或 SQL 语法错误SQL 文件和 disql 环境是否使用 UTF-8,实例参数是否符合本文要求
Redis 提示认证失败无密码时是否仍设置了密码项或密码环境变量;有密码时配置值是否正确
授权校验失败--license.path 指向的文件是否可读、授权是否与服务器匹配且在有效期内
页面空白或资源 404dist/publicdist/admin 目录及 Nginx 路径是否一致,静态文件是否可读
接口返回 502后端是否启动成功、Nginx 上游地址是否正确、代理连接是否被系统访问策略拦截
文件上传或访问失败文件配置的基础路径、运行用户权限、自定义域名和主配置是否正确

日常备份应包括达梦数据库、本地附件目录、外部配置和授权文件。

使用 TongWeb 等国产中间件

可按项目要求将应用服务器替换为 TongWeb 等国产中间件。实施前请向交付方确认中间件版本、Java 版本及对应的部署包,并按照该部署包的说明安装;若中间件采用 WAR 部署,需要提供相应的 WAR 包。

替换后仍需配置 DM8、Redis、授权文件和附件目录,并将 Nginx 的接口代理指向中间件实际监听的地址和端口,保持 /admin-api/captcha 等对外路径一致。完成部署后,同样需要进行系统初始化和文件存储配置。