kkFileView的容器化部署指南

kkFileView是使用spring boot打造文件文档在线预览项目解决方案, 支持多种类型文件在线预览

基础镜像构建

如果需要基于最新的分支构建, 参考官方Gitee种的构建说明

如果使用旧版本, 直接从 Docker Hub 或者本地 Harbor 拉取

自定义部署服务

针对使用容器化运行的背景下, 配置文件的调整可以使用设置相应的环境变量来配置

环境变量的 KEY 为配置文件中每个配置项后${}中的 KEY

以修改server.servlet.context-pathbase.url为例

直接通过Docker运行

1
2
# 直接在命令中修改启动参数
docker run -it -d -p 8012:8012 -e KK_BASE_URL="https://file.kkview.cn/preview" KK_CONTEXT_PATH="/preview" keking/kkfileview:v2.2.1

使用docker-compose编排容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vim docker-compose.yml && docker-compose up -d

# 通过environment修改系统变量
version: '3.8'
services:
kkfileview:
image: keking/kkfileview:v2.2.1
container_name: kkfileview
ports:
- "8012:8012"
environment:
# 这里填写域名, 如果是公网IP就是ip:port的形式
KK_BASE_URL: "https://file.kkview.cn/preview"
KK_CONTEXT_PATH: "/preview"
restart: unless-stopped

编写K8s的启动配置模板

@prod-local-kkfileview-service.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# K8s模板片段
apiVersion: apps/v1
kind: Deployment
metadata:
# ... (前面部分保持不变)
spec:
template:
spec:
containers:
- name: prod-local-kkfileview-service
image: dev-harbor.hysz.co/basics/kkfileview:4.1.0
env: # 新增环境变量配置
- name: KK_BASE_URL
# 这里填写域名, 如果是公网IP就是ip:port的形式
value: "https://file.kkview.cn/preview"
- name: KK_CONTEXT_PATH
value: "/preview"
# ... (后面部分保持不变)

配置NGINX反代

在启动完成服务后, 如果需要正确反代服务, 还需要额外对 NGINX 做一定的配置调整

例如 NGINX 的访问地址为https://file.kkview.cn, 想要使用https://file.kkview.cn/preview/来做预览, kkFileView 部署在内网192.168.1.233服务器上

1
2
3
4
location /preview {
# 注意链接后面没有/
proxy_pass 192.168.1.233:8012;
}

修改 kkFileView 的配置文件如下两项, 容器化部署的情况就也可以通过上面的任意一种启动方式来覆盖默认的配置

1
2
3
server.servlet.context-path = /preview
# 这里填写域名, 如果是公网IP就是ip:port的形式
base.url = https://file.kkview.cn/preview

在前端预览的过程中使用如下页面

1
2
3
4
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script>

var url = 'https://file.kkview.cn/file/test.txt'; //要预览文件的访问地址
window.open('https://file.kkview.cn/preview/onlinePreview?url='+encodeURIComponent(Base64.encode(url)));

或者访问https://file.kkview.cn/preview/index的示例页面, 测试工作是否正常