# oxicloud Ultra-fast, secure & lightweight self-hosted cloud storage — your files, photos, calendars & contacts, all in one place. Built in Rust. ## TL;DR ```bash 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: ```yaml 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.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: ```yaml 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 ### Pod not starting Check if the PVC is bound: ```bash kubectl get pvc -n apps-roboces -l app.kubernetes.io/name=oxicloud ``` ### Check logs ```bash kubectl logs oxicloud-0 -n apps-roboces ``` ### Verify configmap ```bash kubectl get configmap oxicloud-config -n apps-roboces -o yaml ```