fukuops/k8s/charts/immich/README.md
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

192 lines
6 KiB
Markdown

# immich
A Helm chart for Immich, a self-hosted photo and video backup solution.
## TL;DR
```bash
helm install immich oci://git.roboces.dev/catalin/fukuops/immich --version 1.0.0 -n apps-roboces
```
## Prerequisites
- Kubernetes 1.19+
- Helm 3+
- A NFS storage class (default: `truenas-nfs-csi`)
- External PostgreSQL database
- External Redis instance
## Configuration
All values are nested under the `immich:` key. Example:
```yaml
immich:
replicaCount: 1
service:
type: ClusterIP
port: 2283
config:
database:
hostname: "192.168.1.3"
port: 55432
username: ""
password: ""
name: ""
redis:
hostname: "192.168.1.3"
port: 6379
general:
timezone: Europe/Madrid
persistence:
library:
enabled: true
storageClass: "truenas-nfs-csi"
accessMode: ReadWriteMany
size: 10Gi
machineLearning:
enabled: false
secret:
enabled: false
existingSecretName: ""
```
## Values Reference
### Main Application
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| `immich.replicaCount` | int | `1` | Number of replicas |
| `immich.image.repository` | string | `ghcr.io/immich-app/immich-server` | Image repository |
| `immich.image.pullPolicy` | string | `Always` | Image pull policy |
| `immich.image.tag` | string | `.Chart.AppVersion` | Image tag |
| `immich.service.type` | string | `ClusterIP` | Service type |
| `immich.service.port` | int | `2283` | Service port |
| `immich.service.targetPort` | int | `2283` | Container port |
| `immich.ingress.enabled` | bool | `false` | Enable ingress |
| `immich.debug.enabled` | bool | `false` | Enable debug mode (adds init container for troubleshooting) |
| `immich.resources` | object | `{}` | Container resources |
| `immich.livenessProbe` | object | (see values.yaml) | Liveness probe |
| `immich.readinessProbe` | object | (see values.yaml) | Readiness probe |
### Database Configuration
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| `immich.config.database.hostname` | string | `""` | External database hostname |
| `immich.config.database.port` | int | `55432` | Database port |
| `immich.config.database.username` | string | `""` | Database username |
| `immich.config.database.password` | string | `""` | Database password |
| `immich.config.database.name` | string | `""` | Database name |
### Redis Configuration
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| `immich.config.redis.hostname` | string | `""` | External Redis hostname |
| `immich.config.redis.port` | int | `6379` | Redis port |
| `immich.config.redis.dbIndex` | string | `""` | Redis database index |
### General Configuration
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| `immich.config.general.timezone` | string | `Europe/Madrid` | Timezone |
### Persistence
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| `immich.persistence.library.enabled` | bool | `true` | Enable library persistence |
| `immich.persistence.library.storageClass` | string | `truenas-nfs-csi` | Storage class |
| `immich.persistence.library.size` | string | `10Gi` | PVC size |
| `immich.persistence.encodedVideo.enabled` | bool | `true` | Enable encoded video persistence |
| `immich.persistence.thumbs.enabled` | bool | `true` | Enable thumbnails persistence |
| `immich.persistence.upload.enabled` | bool | `true` | Enable uploads persistence |
| `immich.persistence.profile.enabled` | bool | `true` | Enable profiles persistence |
| `immich.persistence.backups.enabled` | bool | `true` | Enable backups persistence |
| `immich.persistence.modelCache.enabled` | bool | `true` | Enable model cache persistence |
### Machine Learning
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| `immich.machineLearning.enabled` | bool | `false` | Enable machine learning module |
| `immich.machineLearning.image.repository` | string | `ghcr.io/immich-app/immich-machine-learning` | ML image repository |
| `immich.machineLearning.replicaCount` | int | `1` | Number of ML replicas |
| `immich.machineLearning.service.port` | int | `3003` | ML service port |
| `immich.machineLearning.persistence.modelCache.enabled` | bool | `true` | Enable model cache persistence |
### Secret Management
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| `immich.secret.enabled` | bool | `false` | Enable secret management |
| `immich.secret.existingSecretName` | string | `""` | Existing secret name |
## ConfigMap
The chart creates a ConfigMap with database and Redis environment variables:
- `TZ`
- `IMMICH_PORT`
- `IMMICH_MACHINE_LEARNING_URL`
- `DB_HOSTNAME`, `DB_PORT`, `DB_USERNAME`, `DB_DATABASE_NAME`
- `REDIS_HOSTNAME`, `REDIS_PORT`, `REDIS_DB`
## Persistence
The chart creates multiple PVCs:
- `immich-library` - Original photos and videos
- `immich-encoded-video` - Transcoded videos
- `immich-thumbs` - Generated thumbnails
- `immich-upload` - Upload queue
- `immich-profile` - User profiles
- `immich-backups` - Backup data
- `immich-model-cache` - ML model cache
The library PVC uses `truenas-nfs-csi` storage class by default with `ReadWriteMany` access mode.
## Troubleshooting
### Debug Mode
Enable debug mode to troubleshoot issues by adding an init container with a shell:
```yaml
immich:
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:
```bash
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
```bash
kubectl get pvc -n apps-roboces -l app.kubernetes.io/name=immich
```
### Check logs
```bash
kubectl logs immich-server-0 -n apps-roboces
```
### Check ML logs (if enabled)
```bash
kubectl logs immich-machine-learning-0 -n apps-roboces
```
### Verify configmap
```bash
kubectl get configmap immich-config -n apps-roboces -o yaml
```