Add Immich Stack
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: immich
|
||||||
|
namespace: immich
|
||||||
|
resources:
|
||||||
|
- namespace.yaml
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: immich
|
||||||
|
spec: {}
|
||||||
|
status: {}
|
||||||
@@ -2,18 +2,18 @@ apiVersion: apps/v1
|
|||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: linking
|
app: linkding
|
||||||
name: linking
|
name: linkding
|
||||||
namespace: linkding
|
namespace: linkding
|
||||||
spec:
|
spec:
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: linking
|
app: linkding
|
||||||
strategy: {}
|
strategy: {}
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: linking
|
app: linkding
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- env:
|
||||||
@@ -46,5 +46,5 @@ spec:
|
|||||||
volumes:
|
volumes:
|
||||||
- name: data
|
- name: data
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: linking-pvc
|
claimName: linkding-pvc
|
||||||
status: {}
|
status: {}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
metadata:
|
metadata:
|
||||||
name: linking
|
name: linkding
|
||||||
namespace: linkding
|
namespace: linkding
|
||||||
resources:
|
resources:
|
||||||
- namespace.yaml
|
- namespace.yaml
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: PersistentVolumeClaim
|
kind: PersistentVolumeClaim
|
||||||
metadata:
|
metadata:
|
||||||
name: linking-pvc
|
name: linkding-pvc
|
||||||
namespace: linkding
|
namespace: linkding
|
||||||
spec:
|
spec:
|
||||||
accessModes:
|
accessModes:
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ apiVersion: v1
|
|||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: linking
|
app: linkding
|
||||||
name: linking
|
name: linkding
|
||||||
namespace: linkding
|
namespace: linkding
|
||||||
spec:
|
spec:
|
||||||
ports:
|
ports:
|
||||||
@@ -11,7 +11,7 @@ spec:
|
|||||||
port: 9090
|
port: 9090
|
||||||
targetPort: 0
|
targetPort: 0
|
||||||
selector:
|
selector:
|
||||||
app: linking
|
app: linkding
|
||||||
type: NodePort
|
type: NodePort
|
||||||
status:
|
status:
|
||||||
loadBalancer: {}
|
loadBalancer: {}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"danicos.dev/daniel/go-kube/pkg/stack"
|
"danicos.dev/daniel/go-kube/pkg/stack"
|
||||||
"danicos.dev/daniel/homelab/pkg/cnpg"
|
"danicos.dev/daniel/homelab/pkg/cnpg"
|
||||||
"danicos.dev/daniel/homelab/pkg/flux"
|
"danicos.dev/daniel/homelab/pkg/flux"
|
||||||
|
"danicos.dev/daniel/homelab/pkg/immich"
|
||||||
"danicos.dev/daniel/homelab/pkg/linkding"
|
"danicos.dev/daniel/homelab/pkg/linkding"
|
||||||
"danicos.dev/daniel/homelab/pkg/longhorn"
|
"danicos.dev/daniel/homelab/pkg/longhorn"
|
||||||
"danicos.dev/daniel/homelab/pkg/monitoring"
|
"danicos.dev/daniel/homelab/pkg/monitoring"
|
||||||
@@ -37,6 +38,7 @@ func main() {
|
|||||||
|
|
||||||
hydra_apps := map[string]stack.Stack{
|
hydra_apps := map[string]stack.Stack{
|
||||||
"linkding": linkding.Stack(),
|
"linkding": linkding.Stack(),
|
||||||
|
"immich": immich.Stack(),
|
||||||
}
|
}
|
||||||
for name, s := range hydra_apps {
|
for name, s := range hydra_apps {
|
||||||
fmt.Printf("STACK: %s\n", name)
|
fmt.Printf("STACK: %s\n", name)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ metadata:
|
|||||||
spec:
|
spec:
|
||||||
affinity: {}
|
affinity: {}
|
||||||
instances: 3
|
instances: 3
|
||||||
|
managed: {}
|
||||||
postgresql:
|
postgresql:
|
||||||
syncReplicaElectionConstraint:
|
syncReplicaElectionConstraint:
|
||||||
enabled: false
|
enabled: false
|
||||||
|
|||||||
@@ -4,16 +4,16 @@ metadata:
|
|||||||
name: truenas-csi
|
name: truenas-csi
|
||||||
namespace: truenas-csi
|
namespace: truenas-csi
|
||||||
resources:
|
resources:
|
||||||
|
- namespace.yaml
|
||||||
|
- controller-service-account.yaml
|
||||||
- controller-cluster-role.yaml
|
- controller-cluster-role.yaml
|
||||||
- controller-binding.yaml
|
- controller-binding.yaml
|
||||||
- node-cluster-role.yaml
|
|
||||||
- CSIDriver.yaml
|
|
||||||
- nfs-storage-class.yaml
|
|
||||||
- node-service-account.yaml
|
- node-service-account.yaml
|
||||||
- node-binding.yaml
|
|
||||||
- node-deamonset.yaml
|
- node-deamonset.yaml
|
||||||
|
- CSIDriver.yaml
|
||||||
- config.yaml
|
- config.yaml
|
||||||
- iscsi-storage-class.yaml
|
|
||||||
- namespace.yaml
|
|
||||||
- controller-deployment.yaml
|
- controller-deployment.yaml
|
||||||
- controller-service-account.yaml
|
- node-cluster-role.yaml
|
||||||
|
- node-binding.yaml
|
||||||
|
- nfs-storage-class.yaml
|
||||||
|
- iscsi-storage-class.yaml
|
||||||
|
|||||||
@@ -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
|
||||||
|
*/
|
||||||
@@ -4,10 +4,6 @@ import (
|
|||||||
"danicos.dev/daniel/go-kube/pkg/kube"
|
"danicos.dev/daniel/go-kube/pkg/kube"
|
||||||
"danicos.dev/daniel/go-kube/pkg/stack"
|
"danicos.dev/daniel/go-kube/pkg/stack"
|
||||||
"danicos.dev/daniel/homelab/pkg/root"
|
"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
|
var meta kube.Metadata
|
||||||
@@ -28,19 +24,3 @@ func Stack() stack.Stack {
|
|||||||
})
|
})
|
||||||
return s
|
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)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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")
|
||||||
|
}
|
||||||
@@ -19,15 +19,15 @@ var Secret = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var meta kube.Metadata
|
var meta kube.Metadata
|
||||||
var Namespace = kube.Namespace("linkding")
|
var Namespace = kube.Namespace(root.Linkding.Name)
|
||||||
var srv core.Service
|
var srv core.Service
|
||||||
var pvc core.PersistentVolumeClaim
|
var pvc core.PersistentVolumeClaim
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
meta = kube.NewMetadata("linking", Namespace)
|
meta = kube.NewMetadata(root.Linkding.Name, Namespace)
|
||||||
srv = meta.Service(root.Linkding.Port)
|
srv = meta.Service(root.Linkding.Port)
|
||||||
srv.Spec.Type = core.ServiceTypeNodePort
|
srv.Spec.Type = core.ServiceTypeNodePort
|
||||||
srv.Spec.Ports[0].NodePort = 30010
|
srv.Spec.Ports[0].NodePort = int32(root.Linkding.Public.NodePort)
|
||||||
pvc = meta.PVC()
|
pvc = meta.PVC()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ func Stack() stack.Stack {
|
|||||||
func deployment() apps.Deployment {
|
func deployment() apps.Deployment {
|
||||||
storage := kube.NewVolumeFrom(kube.VolumeSourcePVC, "data", pvc.Name)
|
storage := kube.NewVolumeFrom(kube.VolumeSourcePVC, "data", pvc.Name)
|
||||||
envMapping := map[string]string{
|
envMapping := map[string]string{
|
||||||
"LD_CSRF_TRUSTED_ORIGINS": root.Linkding.PublicURL,
|
"LD_CSRF_TRUSTED_ORIGINS": root.Linkding.Public.URL,
|
||||||
}
|
}
|
||||||
secretMapping := map[string]string{
|
secretMapping := map[string]string{
|
||||||
"LD_SUPERUSER_NAME": Secret.SuperUserKey,
|
"LD_SUPERUSER_NAME": Secret.SuperUserKey,
|
||||||
|
|||||||
+19
-2
@@ -3,17 +3,34 @@ package root
|
|||||||
type Service struct {
|
type Service struct {
|
||||||
Name string
|
Name string
|
||||||
Image string
|
Image string
|
||||||
PublicURL string
|
|
||||||
Port int32
|
Port int32
|
||||||
SecurityContextID int64
|
SecurityContextID int64
|
||||||
|
Public *Public
|
||||||
|
Postgres *Postgres
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Public struct {
|
||||||
|
URL string
|
||||||
|
NodePort int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type Postgres struct{}
|
||||||
|
|
||||||
var Linkding = Service{
|
var Linkding = Service{
|
||||||
Name: "linkding",
|
Name: "linkding",
|
||||||
Image: "sissbruecker/linkding:1.45.0",
|
Image: "sissbruecker/linkding:1.45.0",
|
||||||
PublicURL: "https://link.danicos.me",
|
|
||||||
Port: 9090,
|
Port: 9090,
|
||||||
SecurityContextID: 33, // www-data user, group and FS ID
|
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 (
|
var (
|
||||||
|
|||||||
Reference in New Issue
Block a user