侧边栏壁纸
博主头像
青菜-halo2 博主等级

行动起来,活在当下

  • 累计撰写 74 篇文章
  • 累计创建 6 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Kubernetes 部署 Nextcloud + OnlyOffice

Administrator
2025-04-25 / 0 评论 / 2 点赞 / 21 阅读 / 0 字

开启您的智能云办公新时代

在数字化转型浪潮中,安全、高效、自主可控的协作平台是企业与团队的核心需求。本项目基于 Kubernetes 构建了一套开箱即用的云原生解决方案,将 NextCloud 强大的文件管理能力与 OnlyOffice 的实时协作功能深度融合,为企业提供以下核心价值:

🔹 私有化部署
告别公有云数据风险,所有服务部署于自有基础设施,完全掌控数据主权,满足金融、医疗等高合规性行业需求。

🔹 无缝协作体验

  • 📂 文件中枢:集中管理文档、图片、视频等各类数字资产

  • 📝 在线编辑:通过OnlyOffice实现Word/Excel/PPT多人实时协作

  • 🌐 跨平台访问:支持Web、桌面客户端及移动端,随时随地安全接入

🔹 云原生架构优势

  • 弹性伸缩:基于Kubernetes的动态资源调度,轻松应对流量高峰

  • 🔒 高可用设计:数据库持久化存储+多副本服务,保障业务连续性

无论您是

  • 🏢 企业IT团队,需要构建安全内网协作平台

  • 🎓 教育机构,期望实现教学资源统一管理

  • 💻 开发者,寻求可定制的云存储基础框架

这套方案都将成为您的理想选择。通过简洁的声明式配置,即可获得媲美商业云服务的功能体验,同时拥有完全的自主控制权。

源代码地址:

github: https://gitee.com/qingcaihub/nextcloud-onlyoffice

gitee: https://gitee.com/qingcaihub/nextcloud-onlyoffice

一、项目概述

本项目在Kubernetes集群中部署完整的NextCloud云存储解决方案,集成OnlyOffice文档协作服务,包含以下组件:

  • NextCloud应用(PHP-FPM)

  • MariaDB数据库

  • Nginx反向代理

  • OnlyOffice Document Server

  • NFS持久化存储

文件结构说明

.
├── 00-run.sh                  # 部署脚本(需自行添加执行权限)
├── 01-ns-nextcloud.yaml       # 命名空间配置
├── 02-pod-pvc.yaml            # 测试Pod的PVC(可忽略)
├── 03-db-deployment.yaml      # MariaDB数据库部署
├── 04-db-svc.yaml             # 数据库服务
├── 05-nextcloud-pvc.yaml      # NextCloud主存储PVC
├── 06-edit-config.php-cm.yaml # NextCloud配置修改脚本
├── 07-nc-deployment.yaml      # NextCloud应用部署
├── 08-nc-svc.yaml             # NextCloud服务
├── 09-onlyoffice.yaml         # OnlyOffice部署
├── 10-nginx-configmap.yaml    # Nginx配置
├── 11-nginx.yaml              # Nginx部署
└── onlyoffice.tar.gz          # OnlyOffice插件

前置要求

  1. Kubernetes集群(v1.27+)

  2. NFS CSI存储驱动(已配置storageClassName: nfs-csi)

  3. 私有镜像仓库访问权限(harbor.yq.com)

  4. DNS解析配置(nextcloud.yq.com指向Ingress IP)

二、部署步骤

方法一:使用 00-run.sh 自动部署

# 克隆代码、进入项目
git clone https://gitee.com/qingcaihub/nextcloud-onlyoffice
cd nextcloud-onlyoffice
​
# 运行项目
bash 00-run.sh
# cat 00-run.sh
#!/bin/bash
# git clone https://gitee.com/qingcaihub/nextcloud-onlyoffice
# cd nextcloud-onlyoffice
for i in {01..11} ; do kubectl apply -f $i* ; done
sleep 200
kubectl exec -it -n nextcloud nextcloud-app-0 -- /bin/bash /tmp/run.sh

方法二:手动部署

1. 创建命名空间
kubectl apply -f 01-ns-nextcloud.yaml
​
2. 部署数据库
kubectl apply -f 03-db-deployment.yaml
kubectl apply -f 04-db-svc.yaml
​
3. 部署持久化存储
kubectl apply -f 05-nextcloud-pvc.yaml
​
4. 部署NextCloud核心应用
kubectl apply -f 07-nc-deployment.yaml
kubectl apply -f 08-nc-svc.yaml
kubectl apply -f 06-edit-config.php-cm.yaml
​
5. 部署OnlyOffice
kubectl apply -f 09-onlyoffice.yaml
​
6. 部署Nginx代理
kubectl apply -f 10-nginx-configmap.yaml
kubectl apply -f 11-nginx.yaml
​

验证部署状态

kubectl -n nextcloud get pods,svc,pvc

三、配置说明

关键配置项

  1. 数据库认证(03-db-deployment.yaml)

    - name: MYSQL_ROOT_PASSWORD
      value: xxxxxxxxx
    - name: MYSQL_PASSWORD
      value: xxxxxxxxx
  2. 存储配置(05-nextcloud-pvc.yaml)

    storageClassName: nfs-csi
    resources:
      requests:
        storage: 10Gi
  3. 域名配置(07-nc-deployment.yaml)

    - name: NEXTCLOUD_URL
      value: http://<someDomain>  # 需替换为实际域名
  4. OnlyOffice集成(06-edit-config.php-cm.yaml)

    php occ config:system:set onlyoffice DocumentServerUrl --value="/ds-vpath/"
    php occ config:system:set onlyoffice DocumentServerInternalUrl --value="http://nextcloud-onlyoffice/"

访问方式

  1. 通过Ingress访问:

    http://nextcloud.yq.com

    默认管理员账号:admin / 123456

四、06-edit-config.php-cm.yaml配置说明

run.sh 脚本的详细技术解释:

此脚本通过NextCloud的 occ 命令行工具完成以下关键配置操作:

# 步骤1. 下载并解压OnlyOffice插件
su -s /bin/sh www-data -c 'curl -O http://yum.yq.com/yumrepos/www/nextcloud/onlyoffice.tar.gz && tar -xvf onlyoffice.tar.gz -C apps/ \

# 步骤2. 生成信任域名临时文件
; php occ --no-warnings config:system:get trusted_domains >> trusted_domain.tmp \

# 步骤3. 启用核心功能
; php occ --no-warnings app:enable onlyoffice \        # 激活OnlyOffice插件
; php occ --no-warnings app:enable files_external \   # 启用外部存储功能

# 步骤4. 配置OnlyOffice连接
; php occ --no-warnings config:system:set onlyoffice DocumentServerUrl --value="/ds-vpath/" \              # 设置文档服务外部访问路径
&& php occ --no-warnings config:system:set onlyoffice DocumentServerInternalUrl --value="http://nextcloud-onlyoffice/" \  # 内部服务地址
&& php occ --no-warnings config:system:set onlyoffice StorageUrl --value="http://nextcloud-nginx/" \      # 存储服务地址
&& php occ --no-warnings config:system:set overwrite.cli.url --value="http://nextcloud.yq.com/" \         # 覆盖CLI访问地址

# 步骤5. JWT安全配置
&& php occ --no-warnings config:system:set onlyoffice jwt_secret --value="secret" \                       # 设置JWT密钥(需与OnlyOffice服务端一致)

# 步骤6. 动态更新信任域名
&& ! grep -q "nextcloud.yq.com" trusted_domain.tmp \                # 检查域名是否已存在
&& TRUSTED_INDEX=$(cat trusted_domain.tmp | wc -l) \                # 计算当前域名数量
&& php occ --no-warnings config:system:set trusted_domains 0 --value="nextcloud.yq.com" \  # 强制设置主域名为索引0
&& php occ --no-warnings config:system:set trusted_domains 1 --value="nextcloud-nginx" \   # 设置内部服务名为索引1
; rm trusted_domain.tmp'                                            # 清理临时文件

关键技术细节

  1. 用户上下文控制

    su -s /bin/sh www-data -c '...'
    • 使用 www-data 用户身份执行命令,确保生成的文件权限与NextCloud运行用户一致

  2. 信任域名动态更新

    • 通过 trusted_domain.tmp 文件暂存现有配置

    • 使用 grep 检查域名是否已存在(! grep -q 表示"如果不存在")

    • 强制覆盖策略:直接设置索引0和1,而非动态追加,确保关键域名优先

  3. OnlyOffice服务对接

    DocumentServerUrl="/ds-vpath/"                   # 通过Nginx反向代理的路径
    DocumentServerInternalUrl="http://nextcloud-onlyoffice/"  # Kubernetes内部服务地址
    • 双路径配置同时满足内外网访问需求

    • StorageUrl 指向Nginx服务实现文件缓存

  4. 安全增强配置

    jwt_secret="secret"  # 需与09-onlyoffice.yaml中的JWT_SECRET值完全一致
    • 使用JWT令牌验证确保OnlyOffice服务通信安全


配置验证方法

  1. 检查已启用的应用

    kubectl -n nextcloud exec nextcloud-app-0 -- php occ app:list

    预期输出应包含:

    - onlyoffice: 7.1.1
    - files_external: 2.3.0
  2. 验证信任域名配置

    kubectl -n nextcloud exec nextcloud-app-0 -- php occ config:system:get trusted_domains

    预期输出:

    0 => 'nextcloud.yq.com',
    1 => 'nextcloud-nginx'
  3. 检查OnlyOffice服务状态

    kubectl -n nextcloud exec nextcloud-app-0 -- curl -I http://nextcloud-onlyoffice/

    应返回 HTTP/1.1 200 OK


故障排查提示

  1. 插件安装失败

    • 检查网络连通性:kubectl -n nextcloud exec nextcloud-app-0 -- curl -v http://yum.yq.com/yumrepos/www/nextcloud/onlyoffice.tar.gz

    • 验证NFS存储权限:kubectl -n nextcloud exec nextcloud-app-0 -- ls -l /var/www/html/apps/

  2. JWT验证错误

    • 对比检查两个位置的密钥是否一致:

      kubectl -n nextcloud exec nextcloud-app-0 -- php occ config:system:get onlyoffice jwt_secret
      kubectl -n nextcloud get statefulset nextcloud-onlyoffice -o yaml | grep JWT_SECRET
  3. 域名不信任错误

    • 临时添加调试命令:

      && php occ --no-warnings config:system:set loglevel --value=2 \  # 开启调试日志
      && tail -f /var/www/html/data/nextcloud.log

2

评论区