fukuops/k8s/charts/oxicloud
cătălin 1fd2bfef3d
feat(helm): complete chart normalization with ConfigMap, HPA, and OCI migration
- Added debug mode, structured ConfigMap pattern, and README to all charts
- Migrated all flat-structure charts to hierarchical values under chartname key
- Fixed templates to use correct hierarchical paths
- Renamed helm-rustical key to rustical, added HPA support
- Fixed ingress YAML parsing (oxicloud), nested env vars (rustical)
- Pushed all normalized charts to OCI registry as 1.0.0+ and updated ArgoCD apps
2026-08-14 09:35:19 +02:00
..
templates feat(helm): complete chart normalization with ConfigMap, HPA, and OCI migration 2026-08-14 09:35:19 +02:00
.helmignore feat: add oxicloud charts and argo app 2026-04-02 00:56:40 +02:00
Chart.yaml feat(helm): complete chart normalization with ConfigMap, HPA, and OCI migration 2026-08-14 09:35:19 +02:00
README.md feat(helm): complete chart normalization with ConfigMap, HPA, and OCI migration 2026-08-14 09:35:19 +02:00
values.yaml feat(helm): complete chart normalization with ConfigMap, HPA, and OCI migration 2026-08-14 09:35:19 +02:00

oxicloud

Ultra-fast, secure & lightweight self-hosted cloud storage — your files, photos, calendars & contacts, all in one place. Built in Rust.

TL;DR

helm install oxicloud oci://git.roboces.dev/catalin/fukuops/oxicloud --version 1.0.0 -n apps-roboces

Prerequisites

  • Kubernetes 1.19+
  • Helm 3+
  • A NFS storage class (default: truenas-nfs-csi)
  • An existing Secret containing:
    • OXICLOUD_JWT_SECRET (optional - generated if not provided)

Configuration

All values are nested under the oxicloud: key. Example:

oxicloud:
  persistence:
    enabled: true
    storageClass: "truenas-nfs-csi"
    accessMode: ReadWriteMany
    size: 50Gi
  service:
    type: LoadBalancer
    port: 8086
  config:
    server:
      port: 8086
      host: "0.0.0.0"
      baseUrl: "https://cloud.example.com"
    features:
      enableAuth: true
      enableSharing: true
  secret:
    existingSecretName: oxicloud
  wopi:
    enabled: false
  ingress:
    enabled: true
    className: "traefik"
    hosts:
      - host: cloud.example.com
        paths:
          - path: /
            pathType: ImplementationSpecific

Values Reference

Key Type Default Description
oxicloud.replicaCount int 1 Number of replicas
oxicloud.image.repository string diocrafts/oxicloud Image repository
oxicloud.image.pullPolicy string Always Image pull policy
oxicloud.image.tag string .Chart.AppVersion Image tag
oxicloud.service.type string LoadBalancer Service type
oxicloud.service.port int 8086 Service port
oxicloud.config.server.port int 8086 Server port
oxicloud.config.server.host string 0.0.0.0 Server host
oxicloud.config.server.baseUrl string https://cloud.example.com Public base URL
oxicloud.config.features.enableAuth bool true Enable authentication
oxicloud.config.features.enableSharing bool true Enable file sharing
oxicloud.persistence.enabled bool true Enable persistence
oxicloud.persistence.storageClass string "" Storage class
oxicloud.persistence.accessMode string ReadWriteOnce Access mode
oxicloud.persistence.size string 50Gi PVC size
oxicloud.secret.existingSecretName string "" Existing secret name
oxicloud.wopi.enabled bool false Enable WOPI/Collabora integration
oxicloud.debug.enabled bool false Enable debug mode (adds init container for troubleshooting)
oxicloud.ingress.enabled bool false Enable ingress
oxicloud.ingress.className string "" Ingress class
oxicloud.resources object {} Container resources
oxicloud.livenessProbe object (see values.yaml) Liveness probe
oxicloud.readinessProbe object (see values.yaml) Readiness probe

WOPI/Collabora

WOPI integration is disabled by default. To enable it:

oxicloud:
  wopi:
    enabled: true
    collabora:
      url: "cloud.example.com"
      domain: "cloud.example.com"
      image:
        repository: collabora/code
        tag: latest
      service:
        port: 9980
      admin:
        existingSecretName: "collabora-admin"

When enabling WOPI, you must provide an existing Secret containing WOPI_ADMIN_USERNAME and WOPI_ADMIN_PASSWORD keys.

Persistence

The chart creates a StatefulSet with a PVC named oxicloud-data. The PVC uses the truenas-nfs-csi storage class by default (when not specified).

Secret Management

The chart looks for an existing Secret with the name specified in oxicloud.secret.existingSecretName. If not provided, a chart-managed secret will be created (only if additional secrets are needed).

Required secret keys depend on configuration:

  • OXICLOUD_JWT_SECRET - JWT signing secret (recommended)
  • WOPI_ADMIN_USERNAME / WOPI_ADMIN_PASSWORD - Collabora admin credentials (when WOPI enabled)

Troubleshooting

Debug Mode

Enable debug mode to troubleshoot issues by adding an init container with a shell:

oxicloud:
  debug:
    enabled: true

This adds an alpine:3.19 init container with sleep infinity that mounts all volumes and inherits env vars. You can exec into it to inspect the environment:

kubectl exec -it <pod-name> -c debug -- sh

When debug mode is enabled, liveness and readiness probes are disabled to prevent restarts.

Pod not starting

Check if the PVC is bound:

kubectl get pvc -n apps-roboces -l app.kubernetes.io/name=oxicloud

Check logs

kubectl logs oxicloud-0 -n apps-roboces

Verify configmap

kubectl get configmap oxicloud-config -n apps-roboces -o yaml