Nextcloud 部署及定期清理插件配置指南

一、环境准备
Kubernetes 集群:已部署并配置好 kubectl 可访问。
存储:已部署 NFS Provisioner,并创建好 StorageClass(例如 nfs-client)。
私有镜像仓库(可选):如果从私有仓库拉取镜像,需要提前登录或配置好 ImagePullSecret。

二、部署 Nextcloud + MySQL(K8s YAML)
创建 Namespace

yaml
apiVersion: v1
kind: Namespace
metadata:
  name: nextcloud

MySQL 持久卷声明 (PVC)

yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: nextcloud
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

MySQL 部署

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: nextcloud
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8.0   # 替换为你的镜像地址
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "Nextcloud2026"    # 修改为强密码
        - name: MYSQL_DATABASE
          value: "nextcloud"
        - name: MYSQL_USER
          value: "nextcloud"
        - name: MYSQL_PASSWORD
          value: "Nextcloud2026"    # 与上面一致
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-pvc

MySQL 服务(内部通信,如需外部访问可改 NodePort)

yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: nextcloud
spec:
  selector:
    app: mysql
  ports:
    - port: 3306

Nextcloud 持久卷声明 (PVC)

yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nextcloud-pvc
  namespace: nextcloud
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi   # 根据需求调整

Nextcloud 部署

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nextcloud
  namespace: nextcloud
spec:
  selector:
    matchLabels:
      app: nextcloud
  replicas: 1
  template:
    metadata:
      labels:
        app: nextcloud
    spec:
      containers:
      - name: nextcloud
        image: nextcloud:32   # 或 nextcloud:stable (32系列)
        ports:
        - containerPort: 80
        env:
        - name: MYSQL_HOST
          value: "mysql"
        - name: MYSQL_DATABASE
          value: "nextcloud"
        - name: MYSQL_USER
          value: "nextcloud"
        - name: MYSQL_PASSWORD
          value: "Nextcloud2026"
        - name: NEXTCLOUD_ADMIN_USER
          value: "admin"
        - name: NEXTCLOUD_ADMIN_PASSWORD
          value: "Admin2026"
        - name: NEXTCLOUD_LOCALE
          value: "zh_CN"
        - name: NEXTCLOUD_DEFAULT_LOCALE
          value: "zh_CN"
        volumeMounts:
        - name: nextcloud-data
          mountPath: /var/www/html
        resources:
          requests:
            memory: "512Mi"
            cpu: "500m"
          limits:
            memory: "2Gi"
            cpu: "2000m"
      volumes:
      - name: nextcloud-data
        persistentVolumeClaim:
          claimName: nextcloud-pvc

Nextcloud 服务(暴露 NodePort 供访问)

yaml
apiVersion: v1
kind: Service
metadata:
  name: nextcloud
  namespace: nextcloud
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30085   # 可自定义
  selector:
    app: nextcloud

应用所有 YAML

bash
kubectl apply -f nextcloud-all.yaml
等待 Pod 启动

bash
kubectl get pods -n nextcloud -w
添加信任域名(如果通过 IP 访问出现“不被信任的域名”提示)

bash
kubectl exec -n nextcloud <pod-name> -u www-data -- php occ config:system:set trusted_domains 1 --value="你的节点IP"
访问 Nextcloud
浏览器打开 http://<节点IP>:30085,用 admin/Admin2026 登录,界面应为中文。

三、安装定期清理插件(File Retention)
确认 Nextcloud 版本(确保主版本与插件兼容)

bash
kubectl exec -n nextcloud <pod-name> -u www-data -- php occ status

下载对应版本的 Retention 应用
访问 https://github.com/nextcloud-releases/files_retention/releases
选择与你的 Nextcloud 主版本匹配的版本(例如 Nextcloud 32 对应 v3.x.x ,Nextcloud 33对应 v4.x.x,需查看 info.xml 中的依赖)。
下载 files_retention.tar.gz。
将应用包复制到 Pod

bash
kubectl exec -n nextcloud -it <pod-name> -u www-data -- bash
cd /var/www/html/apps
tar -xzf /tmp/files_retention.tar.gz
# 注意:解压后的目录名可能是 files_retention,但应用ID是 file_retention,需要重命名
mv files_retention file_retention
chown -R www-data:www-data file_retention
cd /var/www/html
php occ app:enable file_retention
验证启用成功

bash
php occ app:list | grep retention
输出应显示 file_retention: 3.0.0 等。

(可选)处理 PHP 内存警告
若出现内存限制警告,可在 Deployment 中添加环境变量:

yaml
env:
- name: PHP_MEMORY_LIMIT
  value: "512M"
# 并适当提高 Pod 的 resources.limits.memory,然后重启 Pod。

四、配置自动清理规则
以管理员登录 Nextcloud,进入 设置 → 管理 → 工作流。
点击顶部的 “保留” 选项卡。
点击 “添加规则”,设置:
文件夹:选择需要自动清理的文件夹(例如共享文件夹 /临时文件)。
文件年龄:例如 7 天。
操作:选择 “删除”。
保存规则。系统会定期扫描并删除过期文件。

五、注意事项
用户骨架文件:如需新用户登录时不复制默认文件,可执行:

bash
php occ config:system:set skeletondirectory --value=""
备份:定期备份数据库和 nextcloud-pvc 中的数据。
升级:后续升级 Nextcloud 时,需检查插件兼容性,并重新下载对应版本。

  

posted @ 2026-03-15 01:27  teiperfly  阅读(2)  评论(0)    收藏  举报