Add Immich photo management + migrate forge URLs #62

Merged
eblume merged 12 commits from feature/immich into main 2026-01-26 11:20:12 -08:00
Owner

Summary

  • Migrate all ArgoCD app repo URLs from indri.tail8d86e.ts.net:2200 to forge.ops.eblu.me:2222
  • Add Immich self-hosted photo management service with:
    • Helm chart deployment via ArgoCD
    • PostgreSQL cluster with pgvecto.rs for AI vector search (immich-pg)
    • NFS storage on sifaka for photo library (2Ti)
    • Tailscale Ingress + Caddy proxy for photos.ops.eblu.me
    • Machine learning service for face/object recognition

Deployment and Testing

  • Update ArgoCD repo-creds-forge secret with new URL (one-time manual step)
  • Sync apps to pick up new applications
  • Sync all existing apps to verify new forge URL works
  • Sync blumeops-pg to deploy immich-pg cluster
  • Wait for immich-pg to be healthy
  • Create immich-db secret from auto-generated password
  • Sync immich-storage (PV, PVC, Ingress)
  • Sync immich (Helm chart)
  • Run mise run provision-indri -- --tags caddy to add photos.ops.eblu.me
  • Verify Immich UI is accessible

🤖 Generated with Claude Code

## Summary - Migrate all ArgoCD app repo URLs from `indri.tail8d86e.ts.net:2200` to `forge.ops.eblu.me:2222` - Add Immich self-hosted photo management service with: - Helm chart deployment via ArgoCD - PostgreSQL cluster with pgvecto.rs for AI vector search (immich-pg) - NFS storage on sifaka for photo library (2Ti) - Tailscale Ingress + Caddy proxy for `photos.ops.eblu.me` - Machine learning service for face/object recognition ## Deployment and Testing - [x] Update ArgoCD repo-creds-forge secret with new URL (one-time manual step) - [ ] Sync `apps` to pick up new applications - [ ] Sync all existing apps to verify new forge URL works - [ ] Sync `blumeops-pg` to deploy immich-pg cluster - [ ] Wait for immich-pg to be healthy - [ ] Create immich-db secret from auto-generated password - [ ] Sync `immich-storage` (PV, PVC, Ingress) - [ ] Sync `immich` (Helm chart) - [ ] Run `mise run provision-indri -- --tags caddy` to add photos.ops.eblu.me - [ ] Verify Immich UI is accessible 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Update all ArgoCD application repo URLs and SSH known hosts to use
the new Caddy-proxied forge endpoint instead of the legacy Tailscale
MagicDNS hostname.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Deploy Immich via Helm chart with:
- PostgreSQL cluster with pgvecto.rs (immich-pg) for AI vector search
- NFS storage on sifaka for photo library
- Tailscale Ingress + Caddy proxy for photos.ops.eblu.me access
- Machine learning service for face/object recognition

Immich provides a self-hosted Google Photos/iCloud alternative with
AI-powered search, face recognition, and support for RAW files.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Prevent accidental operations against work clusters by requiring
explicit context specification on all kubectl commands.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
CloudNativePG webhook rejects shared_preload_libraries as a "fixed"
parameter - it's managed by the container image itself.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The image is ghcr.io/tensorchord/cloudnative-pgvecto.rs:17.5,
not tensorchord/cloudnative-vectorchord which doesn't exist.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use cloudnative-vectorchord:17.7-1.0.0 image (not pgvecto.rs)
- Add shared_preload_libraries at postgresql level (not parameters)
- Create vector, vchord, cube, earthdistance extensions

Immich v1.133.0+ uses VectorChord as successor to pgvecto.rs.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
kustomization.yaml is not a K8s resource - ArgoCD was trying to apply
it directly which fails. Only include the actual manifest files.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 'data:' key under valkey.persistence
- Add 'enabled: true' for machine-learning cache

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Will reset to main after PR merge.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The bjw-s common library expects env vars under
controllers.main.containers.main.env, not at the top level.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update Helm chart from immich-0.10.0 to immich-0.10.3
- Update Immich to v2.4.1 (latest)
- Fix image tag structure for bjw-s common library

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Immich v2.4.1 requires VectorChord >=0.3 <0.6, but the 17.7-1.0.0
image has VectorChord 1.0.0. Use the 17-0.5.0 tag instead.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
eblume merged commit 8621996343 into main 2026-01-26 11:20:12 -08:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
eblume/blumeops!62
No description provided.