Add Immich Stack

This commit is contained in:
Daniel Cosme
2026-04-30 18:05:24 -04:00
parent f945695b61
commit d3cea1aecd
14 changed files with 128 additions and 43 deletions

35
pkg/cnpg/cluster.go Normal file
View File

@@ -0,0 +1,35 @@
package cnpg
import (
"danicos.dev/daniel/go-kube/pkg/kube"
"danicos.dev/daniel/homelab/pkg/root"
kube_cnpg "danicos.dev/daniel/go-kube/pkg/cnpg"
pg "github.com/cloudnative-pg/api/pkg/api/v1"
core "k8s.io/api/core/v1"
)
func Cluster() pg.Cluster {
meta := kube.NewMetadata(root.CloudNativePG+"-cluster", PGClusterNamespace)
spec := pg.ClusterSpec{
Instances: 3,
StorageConfiguration: pg.StorageConfiguration{
StorageClass: new(root.KUBE_LOCAL_STORAGE_CLASS),
Size: "10Gi",
ResizeInUseVolumes: new(true),
PersistentVolumeClaimTemplate: &core.PersistentVolumeClaimSpec{
StorageClassName: new(root.KUBE_LOCAL_STORAGE_CLASS),
},
},
Managed: &pg.ManagedConfiguration{
Roles: []pg.RoleConfiguration{},
},
}
return kube_cnpg.NewCluster(meta, spec)
}
/*
Need a role and secret
- Username
- Password
*/

View File

@@ -4,10 +4,6 @@ import (
"danicos.dev/daniel/go-kube/pkg/kube"
"danicos.dev/daniel/go-kube/pkg/stack"
"danicos.dev/daniel/homelab/pkg/root"
v1 "k8s.io/api/core/v1"
kube_cnpg "danicos.dev/daniel/go-kube/pkg/cnpg"
pg "github.com/cloudnative-pg/api/pkg/api/v1"
)
var meta kube.Metadata
@@ -28,19 +24,3 @@ func Stack() stack.Stack {
})
return s
}
func Cluster() pg.Cluster {
meta := kube.NewMetadata(root.CloudNativePG+"-cluster", PGClusterNamespace)
spec := pg.ClusterSpec{
Instances: 3,
StorageConfiguration: pg.StorageConfiguration{
StorageClass: new(root.KUBE_LOCAL_STORAGE_CLASS),
Size: "10Gi",
ResizeInUseVolumes: new(true),
PersistentVolumeClaimTemplate: &v1.PersistentVolumeClaimSpec{
StorageClassName: new(root.KUBE_LOCAL_STORAGE_CLASS),
},
},
}
return kube_cnpg.NewCluster(meta, spec)
}

37
pkg/immich/immich.go Normal file
View File

@@ -0,0 +1,37 @@
package immich
import (
"danicos.dev/daniel/go-kube/pkg/kube"
"danicos.dev/daniel/go-kube/pkg/stack"
"danicos.dev/daniel/homelab/pkg/root"
core "k8s.io/api/core/v1"
)
var Secret = struct {
Name string
DB_UserKey string
DB_PasswordKey string
}{
Name: root.Immich.Name,
DB_UserKey: "db_username",
DB_PasswordKey: "db_password",
}
var meta kube.Metadata
var Namespace = kube.Namespace(root.Immich.Name)
var srv core.Service
var pvc core.PersistentVolumeClaim
func init() {
meta = kube.NewMetadata(root.Immich.Name, Namespace)
}
func Stack() stack.Stack {
kz := kube.NewKuztomizedStack(
meta,
map[string]any{
"namespace": Namespace,
},
)
return kz.Stack("immich")
}

View File

@@ -19,15 +19,15 @@ var Secret = struct {
}
var meta kube.Metadata
var Namespace = kube.Namespace("linkding")
var Namespace = kube.Namespace(root.Linkding.Name)
var srv core.Service
var pvc core.PersistentVolumeClaim
func init() {
meta = kube.NewMetadata("linking", Namespace)
meta = kube.NewMetadata(root.Linkding.Name, Namespace)
srv = meta.Service(root.Linkding.Port)
srv.Spec.Type = core.ServiceTypeNodePort
srv.Spec.Ports[0].NodePort = 30010
srv.Spec.Ports[0].NodePort = int32(root.Linkding.Public.NodePort)
pvc = meta.PVC()
}
@@ -47,7 +47,7 @@ func Stack() stack.Stack {
func deployment() apps.Deployment {
storage := kube.NewVolumeFrom(kube.VolumeSourcePVC, "data", pvc.Name)
envMapping := map[string]string{
"LD_CSRF_TRUSTED_ORIGINS": root.Linkding.PublicURL,
"LD_CSRF_TRUSTED_ORIGINS": root.Linkding.Public.URL,
}
secretMapping := map[string]string{
"LD_SUPERUSER_NAME": Secret.SuperUserKey,

View File

@@ -3,17 +3,34 @@ package root
type Service struct {
Name string
Image string
PublicURL string
Port int32
SecurityContextID int64
Public *Public
Postgres *Postgres
}
type Public struct {
URL string
NodePort int32
}
type Postgres struct{}
var Linkding = Service{
Name: "linkding",
Image: "sissbruecker/linkding:1.45.0",
PublicURL: "https://link.danicos.me",
Port: 9090,
SecurityContextID: 33, // www-data user, group and FS ID
Public: &Public{
URL: "https://link.danicos.me",
NodePort: 30010,
},
}
var Immich = Service{
Name: "immich",
Image: "",
// PublicURL: "https://photos.danicos.me",
}
var (