首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >知识库文档编辑:基于minikube的onlyoffice环境部署

知识库文档编辑:基于minikube的onlyoffice环境部署

作者头像
程序员架构进阶
发布2025-07-08 09:18:25
发布2025-07-08 09:18:25
33000
代码可运行
举报
文章被收录于专栏:架构进阶架构进阶
运行总次数:0
代码可运行

一 背景

相信大家都有过使用知识库或在线文档编辑的经历。飞书、钉钉文档、百度知识库等产品都提供了word、excel等office文档的创建和编辑能力。onlyoffice就是一套可以查看并编辑文本文件、电子表格和演示文稿的在线办公软件,社区版可以免费使用。本篇就将基于minikube来实现onlyoffice的本地环境部署。

本地部署环境为MacOS 15.5 (24F74),Apple M4芯片。

二 简介

2.1 onlyoffice

onlyoffice文档(英文名onlyoffice Docs ONLYOFFICE - 云端办公应用 | ONLYOFFICE)是由Ascensio System SIA公司开发的一套在线办公软件,可以查看并编辑文本文件、电子表格和演示文稿,无需安装任何其他软件。也可以查看PDF 文件,兼容开放XML格式Office文档:.docx、.pptx、.xlsx,并且支持多人实时协同编辑。

图片
图片

2.2 minikube

Minikube是轻量级的Kubernetes实现(欢迎! | minikube 中文),可在本地计算机上创建 VM 并部署仅包含一个节点的简单集群。Minikube 可用于 Linux , macOS 和 Windows 系统。Minikube CLI提供了用于引导集群工作的多种操作,包括启动、停止、查看状态和删除。

Minikube 支持多种虚拟机驱动程序,如 VirtualBox、HyperV 和 KVM2。由于 Minikube 是 Kubernetes 世界中相对成熟的解决方案,它支持的功能列表令人印象深刻,包括负载均衡器、多集群、节点端口、持久卷、入口、仪表板和容器运行时等。

图片
图片

minikube启动命令

三 minikube安装

3.1 前置条件

  • 2个或更多CPU
  • 2GB空闲内存
  • 20GB空闲磁盘空间
  • 互联网连接
  • 容器或虚拟机管理器,例如:Docker、QEMU、Hyperkit、Hyper-V、KVM、Parallels、Podman、VirtualBox 或 VMware Fusion/Workstation

3.2 文件获取及安装

两种方式:1、参照minikube官网的安装说明,curl下载最新的minikube稳定版,并使用下图提供的命令执行安装:

图片
图片

2、万能的homebrew

执行如下命令安装即可:

代码语言:javascript
代码运行次数:0
运行
复制
brew install minikube

等待安装完成后,执行minikube start,启动信息如下:

图片
图片

完成之后,就可以使用kubectl get pods等命令查看nodes、pods等k8s集群信息了,非常方便。

四 onlyoffice安装

4.1 直接下载安装包

官网提供了支持windows、mac等设备的安装包,以mac为例,直接下载.dmg包后点击安装即可。但这种方式显然不符合我们集群部署的目标,所以仅作为第一步试用。

图片
图片

4.2 docker部署

经典的三步操作:1、拉镜像

docker pull onlyoffice/documentserver:latest

2、启动容器(带端口映射和数据持久化)

OnlyOffice 需要持久化存储配置、日志和数据(避免容器删除后数据丢失),通过 -v 挂载本地目录到容器内对应路径。 执行以下命令(直接复制,路径可按需修改):

代码语言:javascript
代码运行次数:0
运行
复制
docker run -d   --name onlyoffice  -p : -e "DB_TYPE=sqlite"  -v ~/onlyoffice/data:/var/www/onlyoffice/Data  -v ~/onlyoffice/logs:/var/log/onlyoffice -v ~/onlyoffice/conf:/etc/onlyoffice onlyoffice/documentserver:latest

关键参数说明:

-p 8080:80 # 宿主机8080端口映射到容器80端口(避免80被占用)

-v ~/onlyoffice/data:/var/www/onlyoffice/Data # 数据存储

-v ~/onlyoffice/logs:/var/log/onlyoffice # 日志

-v ~/onlyoffice/conf:/etc/onlyoffice # 配置文件

验证是否启动成功,状态为 Up 表示运行中:

图片
图片

查看启动日志(关键,确认服务就绪):

docker logs -f onlyoffice

等待日志输出 Starting supervisord... 或 OnlyOffice Document Server is running,表示启动完成(首次启动可能需要 1-2 分钟)

3、访问 OnlyOffice

打开浏览器,访问:

代码语言:javascript
代码运行次数:0
运行
复制
http://localhost:8080

首次访问会显示 OnlyOffice 初始化页面(语言选择、许可协议等),说明部署成功。

4.3 k8s部署

4.3.1 封装yaml文件

需要自己封装yaml文件,vi onlyoffice-deploy.yaml

复制以下内容:

代码语言:javascript
代码运行次数:0
运行
复制
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000}
span.s1 {font-variant-ligatures: no-common-ligatures}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: onlyoffice
spec:
  replicas: 1
  selector:
    matchLabels:
      app: onlyoffice
  template:
    metadata:
      labels:
        app: onlyoffice
    spec:
      containers:
      - name: onlyoffice
        image: onlyoffice/documentserver:latest  # 镜像名(需与本地拉取的一致)
        imagePullPolicy: IfNotPresent  # 优先使用节点本地镜像(避免重复拉取)
        ports:
        - containerPort: 80  # OnlyOffice 默认端口
        resources:
          requests:
            cpu: "1"         # 最低 CPU 要求(OnlyOffice 较耗资源)
            memory: "2Gi"    # 最低内存要求(避免 OOM 崩溃)
          limits:
            cpu: "2"
            memory: "4Gi"
---
apiVersion: v1
kind: Service
metadata:
  name: onlyoffice-service
spec:
  selector:
    app: onlyoffice
  type: NodePort  # 用 NodePort 暴露服务,方便 Minikube 访问
  ports:
  - port: 80       # Service 内部端口
    targetPort: 80 # 容器端口(与 Deployment 中一致)
    nodePort: 30080 # 固定 NodePort(范围 30000-32767,可选

粘贴完成后保存。

4.3.2 应用YAML 配置部署到minikube

代码语言:javascript
代码运行次数:0
运行
复制
kubectlapply-fonlyoffice-deploy.yaml

查看部署状态:

代码语言:javascript
代码运行次数:0
运行
复制
# 查看 Pod 是否运行(可能需要 1-2 分钟初始化)
kubectl get pods -w
# 查看 Service 状态
kubectl get svc onlyoffice-service
图片
图片

注意:如果Pod 状态长时间卡在 Pending 或 ImagePullBackOff,用以下命令排查错误:

代码语言:javascript
代码运行次数:0
运行
复制
kubectl describe pod <pod-name>  # 替换 <pod-name> 为实际 Pod 名称

4.3.3 访问 OnlyOffice 服务

Minikube 中通过 NodePort 访问服务,需通过 Minikube 的 IP + 映射的端口:

获取 Minikube 节点 IP:

代码语言:javascript
代码运行次数:0
运行
复制
minikubeip # 输出类似:192.168.49.2

访问地址:在浏览器中输入 http://<minikube-ip>:30080(例如 http://192.168.49.2:30080)。

首次访问会显示 OnlyOffice 初始化页面,说明部署成功。

4.3.4 常见问题

1、Pod 启动后立即崩溃(OOM 或 CPU 不足): OnlyOffice 对资源要求较高,若提示 OutOfMemory 或 CPUThrottled,修改 YAML 中 resources.limits 提高内存(如 memory: "6Gi"),重新应用:

代码语言:javascript
代码运行次数:0
运行
复制
kubectlapply-fonlyoffice-deploy.yaml

2、访问服务超时:检查 Service 端口是否正确(30080),以及 Minikube 是否正常运行:

代码语言:javascript
代码运行次数:0
运行
复制
minikube status  # 确保状态为 Running

3、pod运行正常,但通过上述地址就是无法访问

(1)检查 Service 与 Pod 关联是否正常:

代码语言:javascript
代码运行次数:0
运行
复制
kubectl describe svc onlyoffice-service | grep Endpoints

如果 ENDPOINTS 为空,说明 Service 没关联到 Pod,检查 Deployment 的selector和 Pod 的labels是否一致。

(2)确认 Pod 内服务是否真的启动:

代码语言:javascript
代码运行次数:0
运行
复制
# 进入Pod,检查80端口是否监听
kubectl exec -it <pod-name> -- netstat -tuln | grep

# 尝试在Pod内访问自身服务
kubectl exec -it <pod-name> -- curl -I localhost:
代码语言:javascript
代码运行次数:0
运行
复制
如果端口未监听或curl无响应,说明容器内服务没启动,看日志:
用Minikube自带命令暴露服务(避免IP/端口输错):
  1. 用 Minikube 自带命令暴露服务(避免 IP / 端口输错):
代码语言:javascript
代码运行次数:0
运行
复制
# 自动获取可访问的地址(会处理驱动层端口转发)
minikube service onlyoffice-service --url

直接用输出的 URL 访问(可能和你手动输的不同,因 Minikube 驱动而异)。通过这里输出的url,一般都可以直接访问。

图片
图片

页面效果如下:

图片
图片

至此,我们就完成了onlyoffice的pod部署。

其他可能的问题参考:例如docker镜像源设置,可修改为清华、中科大等国内的镜像源,相关文章较多,这里就不再赘述。如果有问题可以留言交流。

5、小结

本篇介绍了minikube的快速安装,搭建一个本地可用的k8s集群,并介绍了onlyoffice在线文档编辑以及几种部署方式。下一篇将演示怎样实现文档编辑、存储及上传,以及onlyoffice的架构,敬请期待。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员架构进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 背景
  • 二 简介
  • 2.1 onlyoffice
  • 2.2 minikube
  • 三 minikube安装
  • 3.1 前置条件
  • 3.2 文件获取及安装
  • 四 onlyoffice安装
  • 4.1 直接下载安装包
  • 4.2 docker部署
  • 4.3 k8s部署
  • 4.3.1 封装yaml文件
  • 4.3.2 应用YAML 配置部署到minikube
  • 4.3.3 访问 OnlyOffice 服务
  • 4.3.4 常见问题
  • 5、小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档