部署智能表单
一、准备镜像
如果是离线安装,需要完成这一步骤。如果是在线安装,则跳过这个步骤。
1.1. 在外网电脑上准备镜像包
智能表单应用镜像如下:
- registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-web:latest
- registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-backend:latest
下载镜像的命令(下载镜像时先判定 CPU 架构):
- amd/x86
- arm64
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 pull --platform=arm64 registry.cn-hangzhou.aliyuncs.com/sinoform/sinoform-web:latest
docker pull --platform=arm64 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的命名空间,且命名空间不存在,需要自行添加命名空间:
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
文件中,并上传到服务器上:
# 文档转换服务
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 配置,相互之间可以共存