Compare commits

..
Author SHA1 Message Date
srv.renovate 1b94b159ce Update neosmemo/memos Docker tag to v0.31 2026-09-20 12:01:31 +00:00
10 changed files with 1 additions and 322 deletions
-176
View File
@@ -1,7 +1,5 @@
# GitOps repository # GitOps repository
## Hypervisor
### 1) Harvester Hyperconverged Infrastructure ### 1) Harvester Hyperconverged Infrastructure
[...] [...]
@@ -9,180 +7,6 @@ Configure Harvester HCI nodes through cloud-init (requires node reboot):
```shell ```shell
kubectl apply -f system/Harvester/cloudinit-disable-nic-offloading.yaml kubectl apply -f system/Harvester/cloudinit-disable-nic-offloading.yaml
``` ```
## Downstream cluster(s)
Cluster configuration for RKE2 cluster using kube-vip with Traefik ingress controller:
```yaml
apiVersion: provisioning.cattle.io/v1
kind: Cluster
spec:
[...]
rkeConfig:
chartValues:
harvester-cloud-provider:
[...]
kube-vip:
env:
svc_election: 'true'
[...]
rke2-traefik:
service:
[...]
spec:
externalTrafficPolicy: Local
```
Traefik advanced configuration:
```yaml
additionalArguments:
- --providers.file.directory=/etc/traefik/dynamic
- --providers.file.watch=true
- --entryPoints.websecure.transport.respondingTimeouts.readTimeout=300s
certificatesResolvers:
default:
acme:
dnsChallenge:
propagation:
delayBeforeChecks: 5m0s
provider: cloudflare
resolvers:
- 1.1.1.1:53
- 1.0.0.1:53
email: <omitted>
storage: /data/acme.json
deployment:
initContainers:
- command:
- sh
- -c
- touch /data/acme.json; chown 65532 /data/acme.json; chmod -v 600 /data/acme.json
image: busybox:latest
name: volume-permissions
securityContext:
runAsGroup: 0
runAsNonRoot: false
runAsUser: 0
volumeMounts:
- mountPath: /data
name: traefik-data
kind: Deployment
env:
- name: CF_API_EMAIL
valueFrom:
secretKeyRef:
key: CF_API_EMAIL
name: traefik-cloudflare
- name: CF_API_KEY
valueFrom:
secretKeyRef:
key: CF_API_KEY
name: traefik-cloudflare
extraObjects:
- apiVersion: v1
data:
config.yml: |
http:
middlewares:
2fa-authentication:
forwardAuth:
address: "https://auth.spamasaurus.com/api/verify?rd=https://auth.spamasaurus.com/"
trustForwardHeader: true
security-headers:
headers:
forceSTSHeader: true
stsSeconds: 315360000
stsIncludeSubdomains: true
stsPreload: true
tls:
options:
defaults:
minVersion: VersionTLS12
sniStrict: false
curvePreferences:
- secp521r1
- secp384r1
- secp256r1
cipherSuites:
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
- TLS_FALLBACK_SCSV
kind: ConfigMap
metadata:
name: traefik-file-provider
namespace: kube-system
ingressRoute:
dashboard:
enabled: true
entryPoints:
- websecure
matchRule: Host(`ingress.lab.spamasaurus.com`)
middlewares:
- name: 2fa-authentication@file
- name: security-headers@file
logs:
general:
level: INFO
persistence:
enabled: true
name: traefik-data
ports:
web:
http:
redirections:
entryPoint:
permanent: true
scheme: https
to: websecure
websecure:
forwardedHeaders:
insecure: true
http:
tls:
certResolver: default
domains:
- main: '*.pvr.spamasaurus.com'
- main: '*.lab.spamasaurus.com'
- main: '*.spamasaurus.com'
sans:
- spamasaurus.com
- main: '*.bessems.com'
sans:
- bessems.com
- main: '*.bessems.eu'
sans:
- bessems.eu
- main: '*.gabaldon.eu'
sans:
- gabaldon.eu
- main: '*.gabaldon.nl'
sans:
- gabaldon.nl
- main: '*.itch.fyi'
sans:
- itch.fyi
options: defaults@file
providers:
kubernetesCRD:
ingressClass: ""
service:
annotations:
cloudprovider.harvesterhci.io/ip-pool: <ippoolname>
cloudprovider.harvesterhci.io/ipam: pool
spec:
externalTrafficPolicy: Local
type: LoadBalancer
volumes:
- mountPath: /etc/traefik/dynamic
name: traefik-file-provider
type: configMap
```
### 2) Persistent storage ### 2) Persistent storage
-4
View File
@@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: kutt
-18
View File
@@ -1,18 +0,0 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kutt
namespace: argo-cd
spec:
destination:
namespace: kutt
server: https://kubernetes.default.svc
project: default
syncPolicy:
automated: {}
syncOptions:
- CreateNamespace=true
sources:
- repoURL: https://code.spamasaurus.com/djpbessems/Kubernetes.K3s.installLog
path: services/Kutt
targetRevision: HEAD
-37
View File
@@ -1,37 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: kutt
namespace: kutt
labels:
app: kutt
spec:
replicas: 1
selector:
matchLabels:
app: kutt
template:
metadata:
labels:
app: kutt
spec:
containers:
- name: kutt
image: kutt/kutt:v3.2.6
ports:
- containerPort: 3000
name: http
env:
- name: JWT_SECRET
value: Gfn2rJaiAPqRQyauxdIVKj6kWcyt2MSj
- name: DEFAULT_DOMAIN
value: renewal.bessems.com
- name: DB_FILENAME
value: /var/lib/kutt/data.sqlite
volumeMounts:
- mountPath: /var/lib/kutt
name: csismb-kutt-db
volumes:
- name: csismb-kutt-db
persistentVolumeClaim:
claimName: csismb-kutt-db
-16
View File
@@ -1,16 +0,0 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: kutt
namespace: kutt
spec:
entryPoints:
- websecure
routes:
- match: Host(`renewal.bessems.com`) || Host(`p.itch.fyi`)
kind: Rule
services:
- name: kutt
port: 3000
middlewares:
- name: security-headers@file
@@ -1,31 +0,0 @@
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/provisioned-by: smb.csi.k8s.io
name: csismb-kutt-db
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: csismb-kutt-db
mountOptions:
- dir_mode=0777
- file_mode=0777
- nobrl
- cache=strict
- mfsymlinks
- noserverino # required to prevent data corruption
csi:
driver: smb.csi.k8s.io
# volumeHandle format: {smb-server-address}#{sub-dir-name}#{share-name}
# make sure this value is unique for every share in the cluster
volumeHandle: 192.168.154.195#kutt#db
volumeAttributes:
source: //192.168.154.195/K3s.Volumes
subDir: kutt/db
nodeStageSecretRef:
name: smb-credentials
namespace: kutt
@@ -1,12 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csismb-kutt-db
namespace: kutt
spec:
accessModes:
- ReadWriteMany
storageClassName: csismb-kutt-db
resources:
requests:
storage: 1Gi
@@ -1,14 +0,0 @@
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: smb-credentials
namespace: kutt
spec:
encryptedData:
password: AgCRyItWRmD4KN9z0PupawuTVVhwvUovcgOC7HThLDiP56uI7WLo45ZmZYDdMZ0PeLv9KH5eWhimSch8+M9gH3dZXwarbXJ5VrSmNUF5fodP3LrL3Tgoq3rijppfLRpYL00mHclldCkCjsBfJpO5YKzPHo5ovmWx/i7p7BzegeokKyOe8l/2Rsn6qeU2UDFarqaUAjYvOWAGmjxwlZwtE3VGy52qujsSEKOcH0whk+GTcqWb8/tdIrT8yiW6OWQaUjI9LS3uBt3ZPKc65AQld4Jk0bS+Kxb3JDletbbo1qBuDTw1IGGziGDHZ1cCYamaywYmgqFs/NvGZ94tiXV66vZaPDRJH7w+2aaGTHAZPU1pCS08Nmd6kgECXm31TbyO4asFZ2bY+wR3Hpo369rjmh0btH829FzKC8xLoqkb9r9HnYX7AGb5hBkKGzboKBsx/RuzNBwdGJKFTGaYX7pVgqFDdtdyjlbppkBNN1WfGwS/Zuyam1ZryjMfgRdg97ihVCQBOoLXgqIKxgqettc1bOzFIGp1qsDyzG530EhCP3c6NE3AQabXTJ6LNTwM9DZROwCcHhekdnlarHif7sjng/jdVlmgxX0VY6L+4hUhDeX8IJ2QBqIwk9voO7QFz4c2CMLupho+EIz9TxF+CHrdsnRa5xKP2gjaggRLtYrD/3O7A3I1uefN7P6sn2Im2KWgXiV4PXQvW50iZmcooQMYTbT1
username: AgAF7+KE/BWxojaQNtIkAGiz4++Eb/Dlu6631vzrYX8T9oFwcnL3X0dUJ3ImmRX11Kn0Xba7U99kinv16RrcYkdBqWSrjSY0V4RvvHZ9Y4B5F5rSHXUavdr9CqHQRa7wvTVBRw2eH44kypnxH+WMR5derLINCKojXPbwWndY+iGQ+I/RhIsCOoY9E0L2YCGLWYJmQFnWLTv1q08w1UJwdo/uOmtrtrneNzkHhtHcg/DNsAZ6oNYpWqspLR0hfwiO2FxHOq0J3Hmf1DIsH/m9BIaIcRX3k0ZlIlIQaxnkHPUT++vSCy1Nrsa0le9K5lsoS53A7F68gRqv/Yj0qawYhcI4CfHndW5IpE7COld4Ko4J6PqBilOtPN1Lzv67grUbi9yOaYCjknZOoUdXJGAaWY8+7n4ajEM5DqOltbarQtZNjYW7U12DNwqDZeJl4gWzKUqHSLyPxLwwXP/MQJCupU4aLBL6U3pheUNfYWe8EHzFRmDB40Gin1YxRshuC+PHndzFuXSi8jvlvwPWpSDDC9/J23NWJENi68iDL6xKnGpgHXwucUZ+WyJj9ItrLSA3AQfbhZCXYQ0fA3TlRRcbtC09L8XVo4O6CO+p7Efu5XWWey24BGx+HphtuDUZDcdiRBTtAKmJZm3v9nyuthrH4xQZoEPh7zZfBsY6b0bubhj7xdoy7tA4l01NJ/eQ9PZyz4Zi2fyVmu8=
template:
metadata:
name: smb-credentials
namespace: kutt
type: Opaque
-13
View File
@@ -1,13 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: kutt
namespace: kutt
spec:
type: ClusterIP
selector:
app: kutt
ports:
- port: 3000
targetPort: 3000
name: http
+1 -1
View File
@@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: app - name: app
image: neosmemo/memos:0.26 image: neosmemo/memos:0.31
imagePullPolicy: Always imagePullPolicy: Always
env: env:
- name: MEMOS_PORT - name: MEMOS_PORT