24 Commits

Author SHA1 Message Date
github-actions[bot]
3289b293fc chore: update grainlab production image to 1.1.6 2026-03-28 16:06:56 +00:00
github-actions[bot]
976d444f39 chore: update grainlab production image to 1.1.5 2026-03-28 15:53:38 +00:00
github-actions[bot]
ccb692b891 chore: update grainlab production image to 1.1.4 2026-03-27 21:37:28 +00:00
github-actions[bot]
9eb1a81f42 chore: update grainlab production image to 1.1.3 2026-03-25 12:27:35 +00:00
github-actions[bot]
70eb7c30c3 chore: update grainlab production image to 1.1.2 2026-03-24 22:05:44 +00:00
github-actions[bot]
637d64f2f9 chore: update grainlab production image to 1.1.1 2026-03-24 21:49:09 +00:00
github-actions[bot]
94d5da4794 chore: update grainlab production image to 1.1.0 2026-03-22 12:55:51 +00:00
github-actions[bot]
224112cc4a chore: update grainlab production image to 1.0.8 2026-03-21 21:05:46 +00:00
github-actions[bot]
55902e0276 chore: update grainlab production image to 1.0.7 2026-03-21 15:30:17 +00:00
github-actions[bot]
35c5c790e2 chore: update grainlab production image to 1.0.6 2026-03-20 18:57:11 +00:00
github-actions[bot]
5b10f582fc chore: update grainlab production image to 1.0.5 2026-03-19 22:01:21 +00:00
Daniël Groothuis
da9d29fe26 feat(grainlab): Added Staging SMTP setup. 2026-03-19 09:09:38 +01:00
Daniël Groothuis
bf5f932981 feat(grainlab): Added Staging SMTP setup. 2026-03-19 09:04:19 +01:00
Daniël Groothuis
fbc1ecacc6 feat(grainlab): Added Staging SMTP setup. 2026-03-19 08:54:47 +01:00
github-actions[bot]
43d0002e60 chore: update grainlab production image to 1.0.4 2026-03-18 20:35:43 +00:00
github-actions[bot]
ed27f98cc8 chore: update grainlab production image to 1.0.3 2026-03-17 15:13:08 +00:00
github-actions[bot]
8cc3b60ee8 chore: update grainlab production image to 1.0.2 2026-03-17 10:30:07 +00:00
github-actions[bot]
9855c6ce17 chore: update grainlab production image to 1.0.1 2026-03-17 10:05:39 +00:00
Daniël Groothuis
e5c1087b94 feat(grainlab): Added Production App defs. 2026-03-17 10:59:34 +01:00
Daniël Groothuis
cdbf31d6af feat(grainlab): Added Staging environment to ArgoCD. 2026-03-17 10:58:12 +01:00
Daniël Groothuis
8c8c2e0ff3 feat(grainlab): Added Staging environment to ArgoCD. 2026-03-17 09:36:34 +01:00
Daniël Groothuis
ae0d7ae162 feat(grainlab): Added Staging environment to ArgoCD. 2026-03-17 09:31:46 +01:00
Daniël Groothuis
ccb968f726 feat(grainlab): Added Staging environment to ArgoCD. 2026-03-17 09:28:04 +01:00
Daniël Groothuis
62ba062784 feat(manifests): Added Homebox deployments. 2026-03-13 18:59:40 +01:00
26 changed files with 501 additions and 1 deletions

View File

@@ -0,0 +1,17 @@
---
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: grainlab-production
spec:
description: GrianLab Production environment
sourceRepos:
- '*'
sourceNamespaces:
- '*'
destinations:
- namespace: 'grainlab-production'
server: '*'
clusterResourceWhitelist:
- group: '*'
kind: '*'

View File

@@ -0,0 +1,24 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: grainlab-production
namespace: grainlab-production
labels:
platform.dgse.cloud/cluster: artemis
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: grainlab-production
source:
repoURL: 'https://git.dgse.cloud/DGSE/kubernetes.git'
path: manifests/artemis/grainlab-production
targetRevision: main
destination:
namespace: grainlab-production
name: in-cluster
syncPolicy:
syncOptions:
- CreateNamespace=true
automated:
prune: true
selfHeal: true

View File

@@ -0,0 +1,7 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- app-project.yaml
- application.yaml

View File

@@ -0,0 +1,17 @@
---
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: grainlab-staging
spec:
description: GrianLab Staging environment
sourceRepos:
- '*'
sourceNamespaces:
- '*'
destinations:
- namespace: 'grainlab-staging'
server: '*'
clusterResourceWhitelist:
- group: '*'
kind: '*'

View File

@@ -0,0 +1,24 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: grainlab-staging
namespace: grainlab-staging
labels:
platform.dgse.cloud/cluster: artemis
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: grainlab-staging
source:
repoURL: 'https://git.dgse.cloud/DGSE/kubernetes.git'
path: manifests/artemis/grainlab-staging
targetRevision: main
destination:
namespace: grainlab-staging
name: in-cluster
syncPolicy:
syncOptions:
- CreateNamespace=true
automated:
prune: true
selfHeal: true

View File

@@ -0,0 +1,7 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- app-project.yaml
- application.yaml

View File

@@ -0,0 +1,17 @@
---
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: homebox
spec:
description: Inventory for the home
sourceRepos:
- '*'
sourceNamespaces:
- '*'
destinations:
- namespace: 'homebox'
server: '*'
clusterResourceWhitelist:
- group: '*'
kind: '*'

View File

@@ -0,0 +1,24 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: homebox
namespace: homebox
labels:
platform.dgse.cloud/cluster: artemis
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: homebox
source:
repoURL: 'https://git.dgse.cloud/DGSE/kubernetes.git'
path: manifests/artemis/homebox
targetRevision: main
destination:
namespace: homebox
name: in-cluster
syncPolicy:
syncOptions:
- CreateNamespace=true
automated:
prune: true
selfHeal: true

View File

@@ -0,0 +1,7 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- app-project.yaml
- application.yaml

View File

@@ -16,4 +16,6 @@ resources:
- penpot - penpot
- immich - immich
- digital-garden - digital-garden
- kaneo - homebox
- grainlab-staging
- grainlab-production

View File

@@ -0,0 +1,59 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: grainlab
namespace: grainlab-production
spec:
replicas: 1
selector:
matchLabels:
app: grainlab
template:
metadata:
labels:
app: grainlab
spec:
imagePullSecrets:
- name: ghcr-cred
containers:
- name: grainlab
image: ghcr.io/daniel-luke/grainlab:1.1.6
imagePullPolicy: Always
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"
- name: PORT
value: "3000"
- name: HOST
value: "0.0.0.0"
envFrom:
- secretRef:
name: grainlab-app
- secretRef:
name: grainlab-database
- secretRef:
name: grainlab-s3
- secretRef:
name: grainlab-smtp
readinessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 6
livenessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
memory: 512Mi

View File

@@ -0,0 +1,25 @@
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grainlab
namespace: grainlab-production
annotations:
cert-manager.io/cluster-issuer: letsencrypt
spec:
rules:
- host: www.grainlab.app
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grainlab
port:
number: 80
tls:
- hosts:
- www.grainlab.app
- grainlab.app
secretName: letsencrypt

View File

@@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: grainlab
namespace: grainlab-production
spec:
selector:
app: grainlab
ports:
- port: 80
targetPort: 3000

View File

@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: grainlab-production

View File

@@ -0,0 +1,24 @@
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: grainlab-db
namespace: grainlab-production
spec:
instances: 1
bootstrap:
initdb:
database: grainlab
owner: grainlab
secret:
name: grainlab-db-credentials
storage:
size: 10Gi
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
memory: 512Mi

View File

@@ -0,0 +1,26 @@
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: www-redirect
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: Host(`grainlab.app`)
middlewares:
- name: redirect-to-www
services:
- kind: TraefikService
name: noop@internal
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: redirect-to-www
spec:
redirectRegex:
permanent: true
regex: "^https?://(?:www\\.)?(.+)"
replacement: "https://www.${1}"

View File

@@ -0,0 +1,59 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: grainlab
namespace: grainlab-staging
spec:
replicas: 1
selector:
matchLabels:
app: grainlab
template:
metadata:
labels:
app: grainlab
spec:
imagePullSecrets:
- name: ghcr-cred
containers:
- name: grainlab
image: ghcr.io/daniel-luke/grainlab:staging
imagePullPolicy: Always
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"
- name: PORT
value: "3000"
- name: HOST
value: "0.0.0.0"
envFrom:
- secretRef:
name: grainlab-app
- secretRef:
name: grainlab-database
- secretRef:
name: grainlab-s3
- secretRef:
name: grainlab-smtp
readinessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 10
periodSeconds: 5
failureThreshold: 6
livenessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
memory: 512Mi

View File

@@ -0,0 +1,24 @@
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grainlab
namespace: grainlab-staging
annotations:
cert-manager.io/cluster-issuer: letsencrypt
spec:
rules:
- host: staging.grainlab.app
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grainlab
port:
number: 80
tls:
- hosts:
- staging.grainlab.app
secretName: letsencrypt

View File

@@ -0,0 +1,11 @@
apiVersion: v1
kind: Service
metadata:
name: grainlab
namespace: grainlab-staging
spec:
selector:
app: grainlab
ports:
- port: 80
targetPort: 3000

View File

@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: grainlab-staging

View File

@@ -0,0 +1,24 @@
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: grainlab-db
namespace: grainlab-staging
spec:
instances: 1
bootstrap:
initdb:
database: grainlab
owner: grainlab
secret:
name: grainlab-db-credentials
storage:
size: 10Gi
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
memory: 512Mi

View File

@@ -0,0 +1,27 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: homebox
spec:
replicas: 1
selector:
matchLabels:
app: homebox
template:
metadata:
labels:
app: homebox
spec:
containers:
- name: homebox
image: ghcr.io/sysadminsmedia/homebox:latest
ports:
- containerPort: 7745
volumeMounts:
- mountPath: /data
name: homebox-data
volumes:
- name: homebox-data
persistentVolumeClaim:
claimName: homebox-pvc

View File

@@ -0,0 +1,23 @@
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: homebox-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt
spec:
rules:
- host: inventory.dgse.cloud
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: homebox-svc
port:
number: 7745
tls:
- hosts:
- inventory.dgse.cloud
secretName: letsencrypt

View File

@@ -0,0 +1,9 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- service.yaml
- ingress.yaml
- deployment.yaml
- pvc.yaml

View File

@@ -0,0 +1,12 @@
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: homebox-pvc
spec:
storageClassName: local-path
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 25Gi

View File

@@ -0,0 +1,12 @@
---
apiVersion: v1
kind: Service
metadata:
name: homebox-svc
spec:
selector:
app: homebox
ports:
- protocol: TCP
port: 7745
targetPort: 7745