Skip to main content

部署智能表单

一、准备镜像

如果是离线安装,需要完成这一步骤。如果是在线安装,则跳过这个步骤。

1.1. 在外网电脑上准备镜像包

智能表单应用镜像如下:

  • registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-web:latest
  • registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-backend:latest

下载镜像的命令(下载镜像时先判定 CPU 架构):

docker pull --platform=amd64 registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-web:latest
docker pull --platform=amd64 registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-backend:latest

然后生成镜像离线包:

docker save -o sinoform-latest.tar registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-web:latest registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-backend:latest

上面的命令行会生成 sinoform-latest.tar 镜像包文件。

1.2. 在内网服务器上导入并上传镜像

首先将 sinoform-latest.tar 文件拷贝到内网服务器上。然后导入并上传镜像到私有镜像仓库中:

nerdctl load < sinoform-latest.tar
nerdctl push registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-web:latest
nerdctl push registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-backend:latest

二、准备智能表单配置

智能表单依赖 MongoDB 和关系型数据库才能运行。所以需要准备智能表单的配置。

如果已经有了配置文件,那么可以通过下面的命令行生成智能表单 ConfigMap:

kubectl create configmap sinoform-backend-config --from-file=application.yaml

上面的命令行指定配置文件名称必须application.yaml

如果没有配置文件,可以通过下面的方式生成配置文件。

生成配置文件之后,可以通过下面的命令行创建 ConfigMap:

kubectl apply -f sinoform-backend-config.yaml
warning

如果修改了Kubernetes的命名空间,且命名空间不存在,需要自行添加命名空间:

sinoform-backend-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
# 命名空间名称
name: default

以下服务的部署文件,也需要同步修改namespace

三、运行智能表单

warning
  • yaml文件,除namespace及资源配置以外,不要改动核心配置

将下面的配置保存到 sinoform-k8s.yaml 文件中,并上传到服务器上:

# 部署智能表单前端
apiVersion: apps/v1
kind: Deployment
metadata:
name: sinoformweb
namespace: default
spec:
selector:
matchLabels:
app: sinoformweb
template:
metadata:
labels:
app: sinoformweb
spec:
containers:
- name: sinoformweb
image: registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-web:latest
imagePullPolicy: Always
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
---
# 智能表单前端服务(ClusterIP)
apiVersion: v1
kind: Service
metadata:
name: sinoformweb
namespace: default
spec:
selector:
app: sinoformweb
ports:
- port: 80
targetPort: 80
---
# 部署智能表单后端
apiVersion: apps/v1
kind: Deployment
metadata:
name: sinoform-backend
namespace: default
spec:
selector:
matchLabels:
app: sinoform-backend
template:
metadata:
labels:
app: sinoform-backend
spec:
containers:
- name: sinoform-backend
image: registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-backend:latest
imagePullPolicy: Always
resources:
limits:
memory: "4096Mi"
cpu: "2000m"
ports:
- containerPort: 8080
volumeMounts:
# 因为文件上传的缓存会放在 /tmp 目录中,所以/tmp目录需要挂载到镜像之外
- name: temp-storage
mountPath: /tmp
- mountPath: /app/config
name: config
env:
- name: SPRING_PROFILE_ACTIVE
value: prod
volumes:
- name: temp-storage
emptyDir: {}
- configMap:
name: sinoform-backend-config
name: config
---
# 智能表单后端服务(ClusterIP)
apiVersion: v1
kind: Service
metadata:
name: sinoform-backend
namespace: default
spec:
selector:
app: sinoform-backend
ports:
- port: 8080
---
# ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sinoform-ingress
namespace: default
labels:
name: sinoform-ingress
annotations:
# 去掉上传文件大小限制
nginx.ingress.kubernetes.io/proxy-body-size: "0"
spec:
ingressClassName: nginx
rules:
- http:
paths:
# 智能表单前端(PC端表单应用)
- path: "/intellisense-form"
pathType: Prefix
backend:
service:
name: sinoformweb
port:
number: 80
# 智能表单前端(移动端表单应用)
- path: "/intellisense-form-mobile"
pathType: Prefix
backend:
service:
name: sinoformweb
port:
number: 80
# 智能表单前端(表单管理)
- path: "/intellisense-form-manager"
pathType: Prefix
backend:
service:
name: sinoformweb
port:
number: 80
# 智能表单后端
- path: "/apis/intellisense-form"
pathType: Prefix
backend:
service:
name: sinoform-backend
port:
number: 8080

然后执行以下命令启动项目:

kubectl apply -f sinoform-k8s.yaml

稍等片刻,即可访问智能表单应用:http://[ingress 地址:端口号]/intellisense-form 。

四、部署文档转换服务

如果智能表单需要启用附件预览功能,则需要安装文档转换服务。服务镜像地址:

  • registry.cn-hangzhou.aliyuncs.com/sinoform/office-to-pdf:latest
warning

文档转换服务暂不支持arm64架构的系统部署

4.1 准备镜像

安装上述准备智能表单镜像包的步骤准备转换服务的镜像包

4.2 部署

将下面的配置保存到office-to-pdf-k8s.yaml文件中,并上传到服务器上:

office-to-pdf-k8s.yaml
# 文档转换服务
apiVersion: apps/v1
kind: Deployment
metadata:
name: office-to-pdf
namespace: default
spec:
selector:
matchLabels:
app: office-to-pdf
template:
metadata:
labels:
app: office-to-pdf
spec:
containers:
- name: office-to-pdf
image: registry.cn-hangzhou.aliyuncs.com/sinoform/office-to-pdf:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
env:
- name: SPRING_PROFILE_ACTIVE
value: prod
---
# 文档转换服务(ClusterIP)
apiVersion: v1
kind: Service
metadata:
name: office-to-pdf
namespace: default
spec:
selector:
app: office-to-pdf
ports:
- port: 8080
---
# ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: office-to-pdf-ingress
namespace: default
labels:
name: office-to-pdf-ingress
annotations:
# 去掉上传文件大小限制
nginx.ingress.kubernetes.io/proxy-body-size: "0"
spec:
ingressClassName: nginx
rules:
- http:
paths:
# 智能表单后端
- path: "/office-to-pdf"
pathType: Prefix
backend:
service:
name: office-to-pdf
port:
number: 8080

执行以下命令启动服务:

kubectl apply -f office-to-pdf-k8s.yaml

稍等片刻,服务 pod 启动后,可通过 POST 请求访问接口:http://[ingress 地址:端口号]/office-to-pdf ,测试服务是否可用。

五、异常情况处理

5.1 访问503响应错误

有可能 ingress 配置有问题。可以检查一下 ingress 的路径映射是否正确

info

温馨提示:kubernetes 可以有多个 ingress 配置,相互之间可以共存