Compare commits
187 Commits
app/code-s
...
app/dokuwi
| Author | SHA1 | Date | |
|---|---|---|---|
| c796aacfec | |||
| 17dcd78a31 | |||
| 16d9f1df34 | |||
| 91a305117c | |||
| 62b8ddb6c7 | |||
| a44781a4c7 | |||
| 3e80270ec9 | |||
| d1c71b22af | |||
| 26727e23cd | |||
| 4324087ecb | |||
| 1f86ec4702 | |||
| 8fc1165cc0 | |||
| 72be4562ec | |||
| cd4269e485 | |||
| 55856e8a15 | |||
| ea6032d2fa | |||
| f4eb314c46 | |||
| 46515bdc6d | |||
|
|
a3d1fcd6cd | ||
| 0f014ec66d | |||
| ecd37c7793 | |||
| 0581b3cb40 | |||
| 5edfc815e0 | |||
| d3e62ef96a | |||
| 58e4fbbf56 | |||
| 3b5db030ee | |||
| 672f5b0935 | |||
| 4ead42d438 | |||
| b86d63541a | |||
| 0b7da6761c | |||
| abc995cae1 | |||
| e4f1fc958d | |||
| a76b6cd0b9 | |||
| d5a79df839 | |||
| bc39b04bb4 | |||
| 8059824d42 | |||
| 3bb7305ac9 | |||
| d7ce4a3ccc | |||
| 63dcef953b | |||
| d9f220ac4e | |||
| 82a9957831 | |||
| 21371c5a88 | |||
| e89d22f03d | |||
| 77bf938120 | |||
| 516168d3e5 | |||
| 619fc74394 | |||
| 4628a78f54 | |||
| 57067590b7 | |||
| 86f43d20be | |||
| ccdfee21c2 | |||
| fa832ef64d | |||
| 9e3a5c7488 | |||
| 69bb362d57 | |||
| 4724380c3f | |||
| 525d06a715 | |||
| df768c9031 | |||
| 602cabf041 | |||
| 9f03ea3b30 | |||
| f261b6fac4 | |||
| bd5059863e | |||
| 1348ab51f8 | |||
| e98c99ef9c | |||
| 8f6aa7bd61 | |||
| 74f79898e2 | |||
| 1933ed7a81 | |||
| 5831e1956d | |||
| 70accb15fb | |||
| d6ea1c47e7 | |||
| 63ca2fa1b4 | |||
| caa385be8d | |||
| b05ab8766a | |||
| 2d32ad307a | |||
| 830f49ca6a | |||
| bb6ada6f15 | |||
| 08ffc1aaee | |||
| a84b754903 | |||
| 07e3ea1e8b | |||
| 95299a4d28 | |||
| ff7bec1733 | |||
| 187317ba2e | |||
| 13129c5b0e | |||
| 9f175dd49f | |||
| b2f3f18b4f | |||
| fd2a0e4748 | |||
| 48a280b4aa | |||
| ff57154064 | |||
| 82d7b64322 | |||
| 516f304dbe | |||
| 99ce41c430 | |||
| 949f11769c | |||
| 4bbb33391b | |||
| ef03aa7a25 | |||
| c71b356017 | |||
| 70b64d0213 | |||
| 8a63192c60 | |||
| 47cdb6893f | |||
| 636e1a3267 | |||
| c21960843a | |||
| 1f3700887a | |||
| 252457cc7d | |||
| 2697c0aea6 | |||
| a979145d9e | |||
| 39d344b52e | |||
| 6e0f980bab | |||
| 9a68d82f83 | |||
| 2f8a0d1841 | |||
| 6a75addfa8 | |||
| 23fa5fb6d0 | |||
| 23b62970dd | |||
| ec89adccfc | |||
| ec5a9b2cf6 | |||
| 64f268aed8 | |||
| ddb8ea9a05 | |||
| 9d41316730 | |||
| cf49bbb20c | |||
| 9cf9e1622c | |||
| 901da39e24 | |||
| 6f247e0903 | |||
| c43357c7c4 | |||
| c0731f893a | |||
| e6c2157036 | |||
| ce1ea789c1 | |||
| 23615dbdf1 | |||
| 739d1fa4d7 | |||
| 5b887c5ea3 | |||
| ae8680ce63 | |||
| 81e8425379 | |||
| c8e97f5619 | |||
| 1e5a359aab | |||
| 8bf021c6c3 | |||
| 3b50141790 | |||
| 5f46937a4e | |||
| 4c8a194452 | |||
| 044ea968c0 | |||
| 7be1fbc1f8 | |||
| 57b8332da2 | |||
| fc81537d18 | |||
| 6efb893187 | |||
| 6c6520f3bc | |||
| 9adb0154f1 | |||
| c23a5b2683 | |||
| 16a268c9e7 | |||
| 56e18266e4 | |||
| e3f2fc19d7 | |||
| 42abc7daca | |||
| 39879df061 | |||
| 2db32f6db7 | |||
| eb6e9924ab | |||
| ec1999fb7d | |||
| 1bcba7a4d8 | |||
| 84b7bda9d4 | |||
| 3cf2f4b087 | |||
| c2ca39fb76 | |||
| 6fc79b2526 | |||
| ca8e52a54d | |||
| 36a01ebbb7 | |||
| de8d5d5b58 | |||
| 4c8be01ecf | |||
| 892af5ca7d | |||
| 9cbb18c4f4 | |||
| a226e9b982 | |||
| 8fd546728d | |||
| 205bbbaac9 | |||
| ae9dddfdf5 | |||
| b44527ac20 | |||
| 4538d1ed64 | |||
| 3345136e4b | |||
| 4502e596d1 | |||
| 0e5520c36a | |||
| 5df774a1d1 | |||
| 0d11c779fa | |||
| 74ba1b4204 | |||
| 456384df7d | |||
| ea4f919568 | |||
| a42bf41dea | |||
| 2fed17a433 | |||
| 90e580b1b5 | |||
| e8892b14e9 | |||
| a62f61606a | |||
| c2da7d5d73 | |||
| 11e12e8556 | |||
| a3ecd961d3 | |||
| 34d1b3a594 | |||
| ffafa40208 | |||
| 1a9b0d2686 | |||
| 49d1ac23d4 | |||
| 3da466beab |
@@ -69,12 +69,12 @@ spec:
|
|||||||
name: http-pprof
|
name: http-pprof
|
||||||
env:
|
env:
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: America/New_York
|
value: Australia/Sydney
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: adguard-home-data
|
- name: adguard-home-data
|
||||||
mountPath: /opt/adguardhome/work
|
mountPath: /opt/adguardhome/work
|
||||||
- name: adguard-home-config
|
- name: adguard-home-config
|
||||||
mountPath: /opt/adguardhome/config
|
mountPath: /opt/adguardhome/conf
|
||||||
volumes:
|
volumes:
|
||||||
- name: adguard-home-data
|
- name: adguard-home-data
|
||||||
hostPath:
|
hostPath:
|
||||||
|
|||||||
@@ -29,6 +29,16 @@ spec:
|
|||||||
name: adguard-home
|
name: adguard-home
|
||||||
port:
|
port:
|
||||||
number: 10080
|
number: 10080
|
||||||
|
- host: "setup.adguard-home.cluster.edward.sydney"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: adguard-home
|
||||||
|
port:
|
||||||
|
number: 13000
|
||||||
- host: "setup.adguard-home.cluster.local"
|
- host: "setup.adguard-home.cluster.local"
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
@@ -39,3 +49,13 @@ spec:
|
|||||||
name: adguard-home
|
name: adguard-home
|
||||||
port:
|
port:
|
||||||
number: 13000
|
number: 13000
|
||||||
|
- host: "doh.adguard-home.cluster.edward.sydney"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: adguard-home
|
||||||
|
port:
|
||||||
|
number: 443
|
||||||
|
|||||||
@@ -63,4 +63,56 @@ spec:
|
|||||||
postBuild:
|
postBuild:
|
||||||
substituteFrom:
|
substituteFrom:
|
||||||
- kind: Secret
|
- kind: Secret
|
||||||
name: clusterissuer-secrets
|
name: clusterissuer-secrets
|
||||||
|
---
|
||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: certificate-secrets
|
||||||
|
namespace: cert-manager
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
targetNamespace: cert-manager
|
||||||
|
path: ./certificates
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: home-cluster-ops-secrets
|
||||||
|
dependsOn:
|
||||||
|
- name: repositories
|
||||||
|
namespace: flux-system
|
||||||
|
decryption:
|
||||||
|
provider: sops
|
||||||
|
secretRef:
|
||||||
|
name: cert-manager-sops-age
|
||||||
|
---
|
||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: certificates
|
||||||
|
namespace: cert-manager
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
targetNamespace: cert-manager
|
||||||
|
path: ./kubernetes/apps/cert-manager/certificates
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
|
dependsOn:
|
||||||
|
- name: certificate-secrets
|
||||||
|
namespace: cert-manager
|
||||||
|
- name: cert-manager
|
||||||
|
namespace: cert-manager
|
||||||
|
- name: clusterissuer
|
||||||
|
namespace: cert-manager
|
||||||
|
postBuild:
|
||||||
|
substituteFrom:
|
||||||
|
- kind: Secret
|
||||||
|
name: certificate-secrets
|
||||||
64
kubernetes/apps/cert-manager/certificates/adguard-home.yaml
Normal file
64
kubernetes/apps/cert-manager/certificates/adguard-home.yaml
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
#apiVersion: cert-manager.io/v1
|
||||||
|
#kind: Certificate
|
||||||
|
#metadata:
|
||||||
|
# name: adguard-home-cert
|
||||||
|
# namespace: cert-manager
|
||||||
|
#spec:
|
||||||
|
# # Secret names are always required.
|
||||||
|
# secretName: adguard-home.cluster.edward.sydney-tls
|
||||||
|
#
|
||||||
|
# privateKey:
|
||||||
|
# algorithm: RSA
|
||||||
|
# encoding: PKCS1
|
||||||
|
# size: 2048
|
||||||
|
#
|
||||||
|
# # keystores allows adding additional output formats. This is an example for reference only.
|
||||||
|
# keystores:
|
||||||
|
# pkcs12:
|
||||||
|
# create: true
|
||||||
|
# passwordSecretRef:
|
||||||
|
# name: adguard-home-tls-keystore
|
||||||
|
# key: ${adguard_home_certificate_tls_keystore_password}
|
||||||
|
# profile: Modern2023
|
||||||
|
#
|
||||||
|
# duration: 2160h # 90d
|
||||||
|
# renewBefore: 360h # 15d
|
||||||
|
#
|
||||||
|
# isCA: false
|
||||||
|
# usages:
|
||||||
|
# - server auth
|
||||||
|
# - client auth
|
||||||
|
#
|
||||||
|
# subject:
|
||||||
|
# organizations:
|
||||||
|
# - edward.sydney
|
||||||
|
#
|
||||||
|
# # The literalSubject field is exclusive with subject and commonName. It allows
|
||||||
|
# # specifying the subject directly as a string. This is useful for when the order
|
||||||
|
# # of the subject fields is important or when the subject contains special types
|
||||||
|
# # which can be specified by their OID.
|
||||||
|
# #
|
||||||
|
# # literalSubject: "O=jetstack, CN=example.com, 2.5.4.42=John, 2.5.4.4=Doe"
|
||||||
|
#
|
||||||
|
# # At least one of commonName (possibly through literalSubject), dnsNames, uris, emailAddresses, ipAddresses or otherNames is required.
|
||||||
|
# dnsNames:
|
||||||
|
# - "${adguard_home_certificate_dns_name}"
|
||||||
|
# - "*.${adguard_home_certificate_dns_name}"
|
||||||
|
# emailAddresses:
|
||||||
|
# - ${adguard_home_certificate_email}
|
||||||
|
#
|
||||||
|
# # Issuer references are always required.
|
||||||
|
# issuerRef:
|
||||||
|
# name: clusterissuer
|
||||||
|
# # We can reference ClusterIssuers by changing the kind here.
|
||||||
|
# # The default value is Issuer (i.e. a locally namespaced Issuer)
|
||||||
|
# kind: ClusterIssuer
|
||||||
|
# # This is optional since cert-manager will default to this value however
|
||||||
|
# # if you are using an external issuer, change this to that issuer group.
|
||||||
|
# group: cert-manager.io
|
||||||
|
|
||||||
|
#The certificate request has failed to complete and will be retried:
|
||||||
|
# Failed to wait for order resource "adguard-home-cert-1-1931876784" to become
|
||||||
|
# ready: order is in "errored" state: Failed to create Order: 429 urn:ietf:params:acme:error:rateLimited:
|
||||||
|
# Error creating new order :: too many certificates already issued for "edward.sydney".
|
||||||
|
# Retry after 2024-06-25T21:00:00Z: see https://letsencrypt.org/docs/rate-limits/
|
||||||
31
kubernetes/apps/dokuwiki/app/ingress.yaml
Normal file
31
kubernetes/apps/dokuwiki/app/ingress.yaml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: dokuwiki-ingress
|
||||||
|
namespace: dokuwiki
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||||
|
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: "dokuwiki.cluster.local"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: dokuwiki-dokuwiki
|
||||||
|
port:
|
||||||
|
number: 18000
|
||||||
|
- host: "dokuwiki.cluster.edward.sydney"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: dokuwiki-dokuwiki
|
||||||
|
port:
|
||||||
|
number: 18000
|
||||||
34
kubernetes/apps/dokuwiki/app/release.yaml
Normal file
34
kubernetes/apps/dokuwiki/app/release.yaml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: dokuwiki
|
||||||
|
namespace: dokuwiki
|
||||||
|
spec:
|
||||||
|
targetNamespace: dokuwiki
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: dokuwiki
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: bitnami
|
||||||
|
namespace: flux-system
|
||||||
|
interval: 1h
|
||||||
|
install:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
values:
|
||||||
|
dokuwikiUsername: ${username}
|
||||||
|
dokuwikiPassword: ${password}
|
||||||
|
dokuwikiEmail: ${email}
|
||||||
|
dokuwikiFullName: "Edward Cheng"
|
||||||
|
dokuwikiWikiName: My Doku Wiki
|
||||||
|
containerPorts:
|
||||||
|
http: 18000
|
||||||
|
https: 18443
|
||||||
|
persistence:
|
||||||
|
existingClaim: "dokuwiki-pvc"
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
http: 18000
|
||||||
|
https: 18443
|
||||||
46
kubernetes/apps/dokuwiki/app/volume.yaml
Normal file
46
kubernetes/apps/dokuwiki/app/volume.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: dokuwiki-pv
|
||||||
|
namespace: dokuwiki
|
||||||
|
labels:
|
||||||
|
type: local
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 12Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
local:
|
||||||
|
path: "/mnt/nfs/AppData/dokuwiki"
|
||||||
|
claimRef:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
name: dokuwiki-pvc
|
||||||
|
namespace: dokuwiki
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: dokuwiki-pvc
|
||||||
|
namespace: dokuwiki
|
||||||
|
labels:
|
||||||
|
name: dokuwiki-pvc
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 12Gi
|
||||||
46
kubernetes/apps/dokuwiki/dokuwiki.yaml
Normal file
46
kubernetes/apps/dokuwiki/dokuwiki.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: dokuwiki-secrets
|
||||||
|
namespace: dokuwiki
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
targetNamespace: dokuwiki
|
||||||
|
path: ./dokuwiki
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: home-cluster-ops-secrets
|
||||||
|
dependsOn:
|
||||||
|
- name: repositories
|
||||||
|
namespace: flux-system
|
||||||
|
decryption:
|
||||||
|
provider: sops
|
||||||
|
secretRef:
|
||||||
|
name: dokuwiki-sops-age
|
||||||
|
---
|
||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: dokuwiki
|
||||||
|
namespace: dokuwiki
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
path: ./kubernetes/apps/dokuwiki/app
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
|
dependsOn:
|
||||||
|
- name: dokuwiki-secrets
|
||||||
|
namespace: dokuwiki
|
||||||
|
postBuild:
|
||||||
|
substituteFrom:
|
||||||
|
- kind: Secret
|
||||||
|
name: dokuwiki-secrets
|
||||||
32
kubernetes/apps/gitea/app/ingress.yaml
Normal file
32
kubernetes/apps/gitea/app/ingress.yaml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: gitea-ingress
|
||||||
|
namespace: gitea
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||||
|
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||||
|
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: "gitea.cluster.local"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: gitea-gitea
|
||||||
|
port:
|
||||||
|
number: 10080
|
||||||
|
- host: "gitea.cluster.edward.sydney"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: gitea-gitea
|
||||||
|
port:
|
||||||
|
number: 10080
|
||||||
56
kubernetes/apps/gitea/app/release.yaml
Normal file
56
kubernetes/apps/gitea/app/release.yaml
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: gitea
|
||||||
|
namespace: gitea
|
||||||
|
spec:
|
||||||
|
targetNamespace: gitea
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: gitea
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: bitnami
|
||||||
|
namespace: flux-system
|
||||||
|
interval: 1h
|
||||||
|
install:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
values:
|
||||||
|
image:
|
||||||
|
debug: true
|
||||||
|
updateStrategy:
|
||||||
|
type: Recreate
|
||||||
|
livenessProbe:
|
||||||
|
enabled: true
|
||||||
|
initialDelaySeconds: 600
|
||||||
|
periodSeconds: 60
|
||||||
|
timeoutSeconds: 30
|
||||||
|
failureThreshold: 5
|
||||||
|
successThreshold: 1
|
||||||
|
readinessProbe:
|
||||||
|
enabled: true
|
||||||
|
path: /
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 60
|
||||||
|
timeoutSeconds: 30
|
||||||
|
failureThreshold: 5
|
||||||
|
successThreshold: 1
|
||||||
|
adminUsername: ${admin_username}
|
||||||
|
adminPassword: ${admin_password}
|
||||||
|
adminEmail: ${admin_email}
|
||||||
|
appName: app_name
|
||||||
|
persistence:
|
||||||
|
existingClaim: gitea-pvc
|
||||||
|
service:
|
||||||
|
ports:
|
||||||
|
http: 10080
|
||||||
|
ssh: 10022
|
||||||
|
postgresql:
|
||||||
|
enabled: false
|
||||||
|
externalDatabase:
|
||||||
|
host: ${db_host}
|
||||||
|
port: ${db_port}
|
||||||
|
user: ${db_user}
|
||||||
|
database: ${db_name}
|
||||||
|
password: ${db_password}
|
||||||
46
kubernetes/apps/gitea/app/volume.yaml
Normal file
46
kubernetes/apps/gitea/app/volume.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: gitea-pv
|
||||||
|
namespace: gitea
|
||||||
|
labels:
|
||||||
|
type: local
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 32Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
local:
|
||||||
|
path: "/mnt/nfs/AppData/gitea"
|
||||||
|
claimRef:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
name: gitea-pvc
|
||||||
|
namespace: gitea
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: gitea-pvc
|
||||||
|
namespace: gitea
|
||||||
|
labels:
|
||||||
|
name: gitea-pvc
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 32Gi
|
||||||
47
kubernetes/apps/gitea/gitea.yaml
Normal file
47
kubernetes/apps/gitea/gitea.yaml
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: gitea-secrets
|
||||||
|
namespace: gitea
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
targetNamespace: gitea
|
||||||
|
path: ./gitea
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: home-cluster-ops-secrets
|
||||||
|
dependsOn:
|
||||||
|
- name: repositories
|
||||||
|
namespace: flux-system
|
||||||
|
decryption:
|
||||||
|
provider: sops
|
||||||
|
secretRef:
|
||||||
|
name: gitea-sops-age
|
||||||
|
---
|
||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: gitea
|
||||||
|
namespace: gitea
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
path: ./kubernetes/apps/gitea/app
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
|
dependsOn:
|
||||||
|
- name: gitea-secrets
|
||||||
|
namespace: gitea
|
||||||
|
postBuild:
|
||||||
|
substituteFrom:
|
||||||
|
- kind: Secret
|
||||||
|
name: gitea-secrets
|
||||||
|
|
||||||
31
kubernetes/apps/jellyfin/app/ingress.yaml
Normal file
31
kubernetes/apps/jellyfin/app/ingress.yaml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: jellyfin-ingress
|
||||||
|
namespace: jellyfin
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||||
|
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: "jellyfin.cluster.local"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: jellyfin
|
||||||
|
port:
|
||||||
|
number: 8096
|
||||||
|
- host: "jellyfin.cluster.edward.sydney"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: jellyfin
|
||||||
|
port:
|
||||||
|
number: 8096
|
||||||
51
kubernetes/apps/jellyfin/app/pvc.yaml
Normal file
51
kubernetes/apps/jellyfin/app/pvc.yaml
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: jellyfin-config
|
||||||
|
namespace: jellyfin
|
||||||
|
labels:
|
||||||
|
type: local
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 250Mi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
local:
|
||||||
|
path: "/mnt/nfs/AppData/jellyfin/config"
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: jellyfin-data
|
||||||
|
namespace: jellyfin
|
||||||
|
labels:
|
||||||
|
type: local
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 2Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
local:
|
||||||
|
path: "/mnt/nfs/AppData/jellyfin/data"
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
167
kubernetes/apps/jellyfin/app/release.yaml
Normal file
167
kubernetes/apps/jellyfin/app/release.yaml
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: jellyfin
|
||||||
|
namespace: jellyfin
|
||||||
|
spec:
|
||||||
|
releaseName: jellyfin
|
||||||
|
targetNamespace: jellyfin
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: jellyfin
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: beluga-cloud
|
||||||
|
namespace: flux-system
|
||||||
|
interval: 1h
|
||||||
|
install:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
values:
|
||||||
|
persistence:
|
||||||
|
config:
|
||||||
|
enabled: true
|
||||||
|
volumeClaimSpec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
volumeName: jellyfin-config
|
||||||
|
data:
|
||||||
|
enabled: true
|
||||||
|
volumeClaimSpec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
volumeName: jellyfin-data
|
||||||
|
jellyfin:
|
||||||
|
mediaVolumes:
|
||||||
|
- name: movies
|
||||||
|
readOnly: false
|
||||||
|
volumeSpec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 8Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
|
claimRef:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
name: jellyfin-mediavol-movies
|
||||||
|
namespace: jellyfin
|
||||||
|
hostPath:
|
||||||
|
path: "/mnt/nfs/AppData/jellyfin/media/movies"
|
||||||
|
type: "Directory"
|
||||||
|
- name: series
|
||||||
|
readOnly: false
|
||||||
|
volumeSpec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 8Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
|
claimRef:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
name: jellyfin-mediavol-series
|
||||||
|
namespace: jellyfin
|
||||||
|
hostPath:
|
||||||
|
path: "/mnt/nfs/AppData/jellyfin/media/series"
|
||||||
|
type: "Directory"
|
||||||
|
- name: music-videos
|
||||||
|
readOnly: false
|
||||||
|
volumeSpec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 8Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
|
claimRef:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
name: jellyfin-mediavol-music-videos
|
||||||
|
namespace: jellyfin
|
||||||
|
hostPath:
|
||||||
|
path: "/mnt/nfs/AppData/jellyfin/media/music-videos"
|
||||||
|
type: "Directory"
|
||||||
|
- name: short-videos
|
||||||
|
readOnly: false
|
||||||
|
volumeSpec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 8Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
|
claimRef:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
name: jellyfin-mediavol-short-videos
|
||||||
|
namespace: jellyfin
|
||||||
|
hostPath:
|
||||||
|
path: "/mnt/nfs/AppData/jellyfin/media/short-videos"
|
||||||
|
type: "Directory"
|
||||||
|
- name: gv
|
||||||
|
readOnly: false
|
||||||
|
volumeSpec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 8Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
|
claimRef:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
name: jellyfin-mediavol-gv
|
||||||
|
namespace: jellyfin
|
||||||
|
hostPath:
|
||||||
|
path: "/mnt/nfs/AppData/jellyfin/media/gv"
|
||||||
|
type: "Directory"
|
||||||
|
persistentTranscodes: true
|
||||||
|
|
||||||
16
kubernetes/apps/jellyfin/jellyfin.yaml
Normal file
16
kubernetes/apps/jellyfin/jellyfin.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: jellyfin
|
||||||
|
namespace: jellyfin
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
path: ./kubernetes/apps/jellyfin/app
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
|
|
||||||
58
kubernetes/apps/kavita/app/development.yaml
Normal file
58
kubernetes/apps/kavita/app/development.yaml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: kavita
|
||||||
|
namespace: kavita
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kavita
|
||||||
|
app.kubernetes.io/instance: kavita
|
||||||
|
annotations:
|
||||||
|
kubectl.kubernetes.io/default-container: kavita
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: kavita
|
||||||
|
app.kubernetes.io/instance: kavita
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kavita
|
||||||
|
app.kubernetes.io/instance: kavita
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: jvmilazz0/kavita:latest
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
name: kavita
|
||||||
|
ports:
|
||||||
|
- containerPort: 5000
|
||||||
|
name: http
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: TZ
|
||||||
|
value: Australia/Sydney
|
||||||
|
volumeMounts:
|
||||||
|
- name: kavita-config
|
||||||
|
mountPath: /kavita/config
|
||||||
|
- name: kavita-manga
|
||||||
|
mountPath: /manga
|
||||||
|
- name: kavita-book
|
||||||
|
mountPath: /book
|
||||||
|
- name: kavita-doc
|
||||||
|
mountPath: /doc
|
||||||
|
volumes:
|
||||||
|
- name: kavita-config
|
||||||
|
hostPath:
|
||||||
|
path: /mnt/nfs/AppData/kavita/config
|
||||||
|
type: Directory
|
||||||
|
- name: kavita-manga
|
||||||
|
hostPath:
|
||||||
|
path: /mnt/nfs/AppData/kavita/manga
|
||||||
|
type: Directory
|
||||||
|
- name: kavita-book
|
||||||
|
hostPath:
|
||||||
|
path: /mnt/nfs/AppData/kavita/book
|
||||||
|
type: Directory
|
||||||
|
- name: kavita-doc
|
||||||
|
hostPath:
|
||||||
|
path: /mnt/nfs/AppData/kavita/doc
|
||||||
|
type: Directory
|
||||||
21
kubernetes/apps/kavita/app/ingress.yaml
Normal file
21
kubernetes/apps/kavita/app/ingress.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: kavita-ingress
|
||||||
|
namespace: kavita
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||||
|
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: "kavita.cluster.edward.sydney"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: kavita
|
||||||
|
port:
|
||||||
|
number: 5000
|
||||||
18
kubernetes/apps/kavita/app/service.yaml
Normal file
18
kubernetes/apps/kavita/app/service.yaml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: kavita
|
||||||
|
namespace: kavita
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: kavita
|
||||||
|
app.kubernetes.io/instance: kavita
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
- port: 5000
|
||||||
|
targetPort: 5000
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: kavita
|
||||||
|
app.kubernetes.io/instance: kavita
|
||||||
16
kubernetes/apps/kavita/kavita.yaml
Normal file
16
kubernetes/apps/kavita/kavita.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: kavita
|
||||||
|
namespace: kavita
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
path: ./kubernetes/apps/kavita/app
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
|
|
||||||
@@ -5,7 +5,17 @@ resources:
|
|||||||
- ./capacitor/capacitor.yaml
|
- ./capacitor/capacitor.yaml
|
||||||
- ./cert-manager/cert-manager.yaml
|
- ./cert-manager/cert-manager.yaml
|
||||||
- ./code-server/code-server.yaml
|
- ./code-server/code-server.yaml
|
||||||
|
- ./dokuwiki/dokuwiki.yaml
|
||||||
|
- ./gitea/gitea.yaml
|
||||||
- ./homer/homer.yaml
|
- ./homer/homer.yaml
|
||||||
|
- ./jellyfin/jellyfin.yaml
|
||||||
|
- ./kavita/kavita.yaml
|
||||||
|
- ./nexus/nexus.yaml
|
||||||
- ./podinfo/podinfo.yaml
|
- ./podinfo/podinfo.yaml
|
||||||
- ./postgresql/postgresql.yaml
|
- ./postgresql/postgresql.yaml
|
||||||
|
- ./qbittorrent/qbittorrent.yaml
|
||||||
|
- ./redis/redis.yaml
|
||||||
|
- ./snippet-box/snippet-box.yaml
|
||||||
|
- ./sonarqube/sonarqube.yaml
|
||||||
|
- ./uptime-kuma/uptime-kuma.yaml
|
||||||
- ./weave-gitops/weave-gitops.yaml
|
- ./weave-gitops/weave-gitops.yaml
|
||||||
38
kubernetes/apps/nexus/app/deployment.yaml
Normal file
38
kubernetes/apps/nexus/app/deployment.yaml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: nexus
|
||||||
|
namespace: nexus
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: nexus
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: nexus
|
||||||
|
spec:
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 0
|
||||||
|
runAsGroup: 0
|
||||||
|
containers:
|
||||||
|
- name: nexus
|
||||||
|
image: klo2k/nexus3:3.68.1-02
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: "3Gi"
|
||||||
|
cpu: "500m"
|
||||||
|
requests:
|
||||||
|
memory: "2Gi"
|
||||||
|
cpu: "500m"
|
||||||
|
ports:
|
||||||
|
- containerPort: 8081
|
||||||
|
volumeMounts:
|
||||||
|
- name: nexus-data
|
||||||
|
mountPath: /nexus-data
|
||||||
|
volumes:
|
||||||
|
- name: nexus-data
|
||||||
|
hostPath:
|
||||||
|
path: /mnt/nfs/AppData/nexus
|
||||||
|
type: Directory
|
||||||
17
kubernetes/apps/nexus/app/service.yaml
Normal file
17
kubernetes/apps/nexus/app/service.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: nexus
|
||||||
|
namespace: nexus
|
||||||
|
annotations:
|
||||||
|
prometheus.io/scrape: 'true'
|
||||||
|
prometheus.io/path: /
|
||||||
|
prometheus.io/port: '8081'
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: nexus
|
||||||
|
type: NodePort
|
||||||
|
ports:
|
||||||
|
- port: 8081
|
||||||
|
targetPort: 8081
|
||||||
|
nodePort: 32000
|
||||||
15
kubernetes/apps/nexus/nexus.yaml
Normal file
15
kubernetes/apps/nexus/nexus.yaml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: nexus
|
||||||
|
namespace: nexus
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
path: ./kubernetes/apps/nexus/app
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
31
kubernetes/apps/postgresql/app/ingress.yaml
Normal file
31
kubernetes/apps/postgresql/app/ingress.yaml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: postgresql-ingress
|
||||||
|
namespace: postgresql
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||||
|
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: "postgres.cluster.local"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: postgresql-primary
|
||||||
|
port:
|
||||||
|
number: 5432
|
||||||
|
- host: "replica.postgres.cluster.local"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: postgresql-replica
|
||||||
|
port:
|
||||||
|
number: 5432
|
||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
retries: 3
|
retries: 3
|
||||||
values:
|
values:
|
||||||
auth:
|
auth:
|
||||||
postgresPassword: ${postgresql_password}
|
postgresPassword: ${postgres_password}
|
||||||
username: ${username}
|
username: ${username}
|
||||||
password: ${password}
|
password: ${password}
|
||||||
database: ${database}
|
database: ${database}
|
||||||
@@ -27,7 +27,7 @@ spec:
|
|||||||
replication:
|
replication:
|
||||||
synchronousCommit: "on"
|
synchronousCommit: "on"
|
||||||
numSynchronousReplicas: 1
|
numSynchronousReplicas: 1
|
||||||
applicationName: "postgresqlReplication"
|
applicationName: "postgres_repl"
|
||||||
primary:
|
primary:
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
fsGroup: 1000
|
fsGroup: 1000
|
||||||
|
|||||||
21
kubernetes/apps/qbittorrent/app/ingress.yaml
Normal file
21
kubernetes/apps/qbittorrent/app/ingress.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: qbittorrent-ingress
|
||||||
|
namespace: qbittorrent
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||||
|
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: "qbittorrent.cluster.edward.sydney"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: qbittorrent
|
||||||
|
port:
|
||||||
|
number: 8888
|
||||||
30
kubernetes/apps/qbittorrent/app/release.yaml
Normal file
30
kubernetes/apps/qbittorrent/app/release.yaml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: qbittorrent
|
||||||
|
namespace: qbittorrent
|
||||||
|
spec:
|
||||||
|
targetNamespace: qbittorrent
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: qbittorrent
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: adminafk
|
||||||
|
namespace: flux-system
|
||||||
|
interval: 1h
|
||||||
|
install:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
values:
|
||||||
|
service:
|
||||||
|
web:
|
||||||
|
port: 8888
|
||||||
|
torrent:
|
||||||
|
port: 8388
|
||||||
|
config:
|
||||||
|
persistence:
|
||||||
|
name: "qbittorrent-config-pvc"
|
||||||
|
volumeMounts:
|
||||||
|
- name: qbittorrent-download-pvc
|
||||||
|
mountPath: /download
|
||||||
93
kubernetes/apps/qbittorrent/app/volume.yaml
Normal file
93
kubernetes/apps/qbittorrent/app/volume.yaml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: qbittorrent-config
|
||||||
|
namespace: qbittorrent
|
||||||
|
labels:
|
||||||
|
type: local
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 5Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
local:
|
||||||
|
path: "/mnt/nfs/AppData/qbittorrent/config"
|
||||||
|
claimRef:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
name: qbittorrent-config-pvc
|
||||||
|
namespace: qbittorrent
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
|
---
|
||||||
|
#apiVersion: v1
|
||||||
|
#kind: PersistentVolumeClaim
|
||||||
|
#metadata:
|
||||||
|
# name: qbittorrent-config-pvc
|
||||||
|
# namespace: qbittorrent
|
||||||
|
# labels:
|
||||||
|
# name: qbittorrent-config-pvc
|
||||||
|
#spec:
|
||||||
|
# storageClassName: local-path
|
||||||
|
# volumeMode: Filesystem
|
||||||
|
# accessModes:
|
||||||
|
# - ReadWriteOnce
|
||||||
|
# resources:
|
||||||
|
# requests:
|
||||||
|
# storage: 5Gi
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: qbittorrent-download
|
||||||
|
namespace: qbittorrent
|
||||||
|
labels:
|
||||||
|
type: local
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 5Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
local:
|
||||||
|
path: "/mnt/nfs/AppData/qbittorrent/download"
|
||||||
|
claimRef:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
name: qbittorrent-download-pvc
|
||||||
|
namespace: qbittorrent
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: qbittorrent-download-pvc
|
||||||
|
namespace: qbittorrent
|
||||||
|
labels:
|
||||||
|
name: qbittorrent-download-pvc
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 64Gi
|
||||||
16
kubernetes/apps/qbittorrent/qbittorrent.yaml
Normal file
16
kubernetes/apps/qbittorrent/qbittorrent.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: qbittorrent
|
||||||
|
namespace: qbittorrent
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
path: ./kubernetes/apps/qbittorrent/app
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: torrent-tcp
|
||||||
|
port: 8388
|
||||||
|
targetPort: 8388
|
||||||
|
protocol: TCP
|
||||||
|
- name: torrent-udp
|
||||||
|
port: 8388
|
||||||
|
targetPort: 8388
|
||||||
|
protocol: UDP
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
kubectl patch service ingress-nginx-controller -n ingress-nginx --patch "$(cat kubernetes/apps/qbittorrent/scripts/ingress-nginx-svc-controller-patch.yaml)"
|
||||||
38
kubernetes/apps/redis/app/release.yaml
Normal file
38
kubernetes/apps/redis/app/release.yaml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: redis
|
||||||
|
namespace: redis
|
||||||
|
spec:
|
||||||
|
releaseName: redis
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: redis
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: bitnami
|
||||||
|
namespace: flux-system
|
||||||
|
interval: 1h
|
||||||
|
install:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
values:
|
||||||
|
auth:
|
||||||
|
password: ${password}
|
||||||
|
master:
|
||||||
|
persistence:
|
||||||
|
existingClaim: redis-master-pvc
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
name: redis-master-pvc
|
||||||
|
persistentVolumeClaimRetentionPolicy:
|
||||||
|
enabled: true
|
||||||
|
replica:
|
||||||
|
replicaCount: 1
|
||||||
|
persistence:
|
||||||
|
existingClaim: redis-replica-pvc
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
name: redis-replica-pvc
|
||||||
|
persistentVolumeClaimRetentionPolicy:
|
||||||
|
enabled: true
|
||||||
31
kubernetes/apps/redis/app/volume.yaml
Normal file
31
kubernetes/apps/redis/app/volume.yaml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: redis-master-pvc
|
||||||
|
namespace: redis
|
||||||
|
labels:
|
||||||
|
name: redis-master-pvc
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 8Gi
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: redis-replica-pvc
|
||||||
|
namespace: redis
|
||||||
|
labels:
|
||||||
|
name: redis-replica-pvc
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 8Gi
|
||||||
46
kubernetes/apps/redis/redis.yaml
Normal file
46
kubernetes/apps/redis/redis.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: redis-secrets
|
||||||
|
namespace: redis
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
targetNamespace: redis
|
||||||
|
path: ./redis
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: home-cluster-ops-secrets
|
||||||
|
dependsOn:
|
||||||
|
- name: repositories
|
||||||
|
namespace: flux-system
|
||||||
|
decryption:
|
||||||
|
provider: sops
|
||||||
|
secretRef:
|
||||||
|
name: redis-sops-age
|
||||||
|
---
|
||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: redis
|
||||||
|
namespace: redis
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
path: ./kubernetes/apps/redis/app
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
|
dependsOn:
|
||||||
|
- name: redis-secrets
|
||||||
|
namespace: redis
|
||||||
|
postBuild:
|
||||||
|
substituteFrom:
|
||||||
|
- kind: Secret
|
||||||
|
name: redis-secrets
|
||||||
34
kubernetes/apps/snippet-box/app/development.yaml
Normal file
34
kubernetes/apps/snippet-box/app/development.yaml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: snippet-box
|
||||||
|
namespace: snippet-box
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: snippet-box
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: snippet-box
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: snippet-box
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: snippet-box
|
||||||
|
image: pawelmalak/snippet-box:arm
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
containerPort: 5000
|
||||||
|
name: snippet-box
|
||||||
|
env:
|
||||||
|
- name: TZ
|
||||||
|
value: Australia/Sydney
|
||||||
|
volumeMounts:
|
||||||
|
- name: snippet-box-data
|
||||||
|
mountPath: /app/data
|
||||||
|
volumes:
|
||||||
|
- name: snippet-box-data
|
||||||
|
hostPath:
|
||||||
|
path: /mnt/nfs/AppData/snippet-box
|
||||||
|
type: Directory
|
||||||
21
kubernetes/apps/snippet-box/app/ingress.yaml
Normal file
21
kubernetes/apps/snippet-box/app/ingress.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: snippet-box-ingress
|
||||||
|
namespace: snippet-box
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||||
|
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: "snippet-box.cluster.edward.sydney"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: snippet-box
|
||||||
|
port:
|
||||||
|
number: 5000
|
||||||
17
kubernetes/apps/snippet-box/app/service.yaml
Normal file
17
kubernetes/apps/snippet-box/app/service.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: snippet-box
|
||||||
|
namespace: snippet-box
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: snippet-box
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: snippet-box
|
||||||
|
type: ClusterIP
|
||||||
|
internalTrafficPolicy: Cluster
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 5000
|
||||||
|
targetPort: 5000
|
||||||
|
name: snippet-box
|
||||||
16
kubernetes/apps/snippet-box/snippet-box.yaml
Normal file
16
kubernetes/apps/snippet-box/snippet-box.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: snippet-box
|
||||||
|
namespace: snippet-box
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
targetNamespace: flux-system
|
||||||
|
path: ./kubernetes/apps/snippet-box/app
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
47
kubernetes/apps/sonarqube/app/release.yaml
Normal file
47
kubernetes/apps/sonarqube/app/release.yaml
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: sonarqube
|
||||||
|
namespace: sonarqube
|
||||||
|
spec:
|
||||||
|
releaseName: sonarqube
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: sonarqube
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: bitnami
|
||||||
|
namespace: flux-system
|
||||||
|
interval: 1h
|
||||||
|
install:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
values:
|
||||||
|
sonarqubeUsername: ${sonarqube_username}
|
||||||
|
sonarqubePassword: ${sonarqube_password}
|
||||||
|
sonarqubeEmail: ${sonarqube_email}
|
||||||
|
smtpHost: ${smtp_host}
|
||||||
|
smtpPort: ${smtp_port}
|
||||||
|
smtpUser: ${smtp_user}
|
||||||
|
smtpPassword: ${smtp_password}
|
||||||
|
smtpProtocol: ${smtp_protocol}
|
||||||
|
service:
|
||||||
|
ports:
|
||||||
|
http: 8090
|
||||||
|
elastic: 9091
|
||||||
|
nodePorts:
|
||||||
|
http: 30080
|
||||||
|
elastic: 30091
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
storageClass: "local-path"
|
||||||
|
size: "32Gi"
|
||||||
|
existingClaim: "sonarqube-pvc"
|
||||||
|
postgresql:
|
||||||
|
enabled: false
|
||||||
|
externalDatabase:
|
||||||
|
host: ${db_host}
|
||||||
|
user: ${db_user}
|
||||||
|
password: ${db_password}
|
||||||
|
database: ${db_name}
|
||||||
|
port: ${db_port}
|
||||||
46
kubernetes/apps/sonarqube/app/volume.yaml
Normal file
46
kubernetes/apps/sonarqube/app/volume.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: sonarqube-pv
|
||||||
|
namespace: sonarqube
|
||||||
|
labels:
|
||||||
|
type: local
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 32Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
local:
|
||||||
|
path: "/mnt/nfs/AppData/sonarqube"
|
||||||
|
claimRef:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
name: sonarqube-pvc
|
||||||
|
namespace: sonarqube
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-3
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: sonarqube-pvc
|
||||||
|
namespace: sonarqube
|
||||||
|
labels:
|
||||||
|
name: sonarqube-pvc
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 32Gi
|
||||||
46
kubernetes/apps/sonarqube/sonarqube.yaml
Normal file
46
kubernetes/apps/sonarqube/sonarqube.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: sonarqube-secrets
|
||||||
|
namespace: sonarqube
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
targetNamespace: sonarqube
|
||||||
|
path: ./sonarqube
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: home-cluster-ops-secrets
|
||||||
|
dependsOn:
|
||||||
|
- name: repositories
|
||||||
|
namespace: flux-system
|
||||||
|
decryption:
|
||||||
|
provider: sops
|
||||||
|
secretRef:
|
||||||
|
name: sonarqube-sops-age
|
||||||
|
---
|
||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: sonarqube
|
||||||
|
namespace: sonarqube
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
path: ./kubernetes/apps/sonarqube/app
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
|
dependsOn:
|
||||||
|
- name: sonarqube-secrets
|
||||||
|
namespace: sonarqube
|
||||||
|
postBuild:
|
||||||
|
substituteFrom:
|
||||||
|
- kind: Secret
|
||||||
|
name: sonarqube-secrets
|
||||||
21
kubernetes/apps/uptime-kuma/app/ingress.yaml
Normal file
21
kubernetes/apps/uptime-kuma/app/ingress.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: uptime-kuma-ingress
|
||||||
|
namespace: uptime-kuma
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
||||||
|
nginx.ingress.kubernetes.io/use-regex: "true"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: "uptime-kuma.cluster.edward.sydney"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- pathType: Prefix
|
||||||
|
path: "/"
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: uptime-kuma
|
||||||
|
port:
|
||||||
|
number: 3001
|
||||||
46
kubernetes/apps/uptime-kuma/app/pvc.yaml
Normal file
46
kubernetes/apps/uptime-kuma/app/pvc.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolume
|
||||||
|
metadata:
|
||||||
|
name: uptime-kuma-pv
|
||||||
|
namespace: uptime-kuma
|
||||||
|
labels:
|
||||||
|
type: local
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
capacity:
|
||||||
|
storage: 4Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
local:
|
||||||
|
path: "/mnt/nfs/AppData/uptime-kuma"
|
||||||
|
claimRef:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
name: uptime-kuma-pvc
|
||||||
|
namespace: uptime-kuma
|
||||||
|
nodeAffinity:
|
||||||
|
required:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: kubernetes.io/hostname
|
||||||
|
operator: In
|
||||||
|
values:
|
||||||
|
- rpi5-cluster-node-1
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: uptime-kuma-pvc
|
||||||
|
namespace: uptime-kuma
|
||||||
|
labels:
|
||||||
|
name: uptime-kuma-pvc
|
||||||
|
spec:
|
||||||
|
storageClassName: local-path
|
||||||
|
volumeMode: Filesystem
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 4Gi
|
||||||
25
kubernetes/apps/uptime-kuma/app/release.yaml
Normal file
25
kubernetes/apps/uptime-kuma/app/release.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: uptime-kuma
|
||||||
|
namespace: uptime-kuma
|
||||||
|
spec:
|
||||||
|
releaseName: uptime-kuma
|
||||||
|
targetNamespace: uptime-kuma
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: uptime-kuma
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: irsigler
|
||||||
|
namespace: flux-system
|
||||||
|
interval: 1h
|
||||||
|
install:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
values:
|
||||||
|
volume:
|
||||||
|
enabled: true
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 4Gi
|
||||||
|
existingClaim: "uptime-kuma-pvc"
|
||||||
15
kubernetes/apps/uptime-kuma/uptime-kuma.yaml
Normal file
15
kubernetes/apps/uptime-kuma/uptime-kuma.yaml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: uptime-kuma
|
||||||
|
namespace: uptime-kuma
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
path: ./kubernetes/apps/uptime-kuma/app
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
@@ -10,6 +10,7 @@ data:
|
|||||||
"5433": "postgresql/postgresql-replica:5432"
|
"5433": "postgresql/postgresql-replica:5432"
|
||||||
"5443": "flux-system/adguard-home:5443"
|
"5443": "flux-system/adguard-home:5443"
|
||||||
"6060": "flux-system/adguard-home:6060"
|
"6060": "flux-system/adguard-home:6060"
|
||||||
|
"8388": "qbittorrent/qbittorrent-torrent:8388"
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
@@ -22,3 +23,4 @@ data:
|
|||||||
"68": "flux-system/adguard-home:68"
|
"68": "flux-system/adguard-home:68"
|
||||||
"853": "flux-system/adguard-home:853"
|
"853": "flux-system/adguard-home:853"
|
||||||
"5443": "flux-system/adguard-home:5443"
|
"5443": "flux-system/adguard-home:5443"
|
||||||
|
"8388": "qbittorrent/qbittorrent-torrent:8388"
|
||||||
|
|||||||
@@ -1,15 +1,7 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
resources:
|
resources:
|
||||||
- ./namespaces/adguard-home.yaml
|
- ./namespaces/namespaces.yaml
|
||||||
- ./namespaces/capacitor.yaml
|
|
||||||
- ./namespaces/cert-manager.yaml
|
|
||||||
- ./namespaces/code-server.yaml
|
|
||||||
- ./namespaces/homer.yaml
|
|
||||||
- ./namespaces/ingress-nginx.yaml
|
|
||||||
- ./namespaces/podinfo.yaml
|
|
||||||
- ./namespaces/postgresql.yaml
|
|
||||||
- ./namespaces/prometheus-operator.yaml
|
|
||||||
- ./repositories/repositories.yaml
|
- ./repositories/repositories.yaml
|
||||||
# - ./cilium/cilium.yaml
|
# - ./cilium/cilium.yaml
|
||||||
- ./ingress-nginx/ingress-nginx-config.yaml
|
- ./ingress-nginx/ingress-nginx-config.yaml
|
||||||
|
|||||||
16
kubernetes/infrastructure/namespaces/namespaces.yaml
Normal file
16
kubernetes/infrastructure/namespaces/namespaces.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/source.toolkit.fluxcd.io/gitrepository_v1.json
|
||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: namespaces
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
timeout: 1m30s
|
||||||
|
retryInterval: 30s
|
||||||
|
path: ./kubernetes/infrastructure/namespaces/namespaces
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
namespace: flux-system
|
||||||
|
name: flux-system
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: dokuwiki
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: gitea
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: jellyfin
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: kavita
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: nexus
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: qbittorrent
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: redis
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: snippet-box
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: sonarqube
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: uptime-kuma
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
apiVersion: source.toolkit.fluxcd.io/v1beta2
|
||||||
|
kind: HelmRepository
|
||||||
|
metadata:
|
||||||
|
name: adminafk
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
interval: 6h
|
||||||
|
url: https://helm-charts.adminafk.fr
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
apiVersion: source.toolkit.fluxcd.io/v1beta2
|
||||||
|
kind: HelmRepository
|
||||||
|
metadata:
|
||||||
|
name: beluga-cloud
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
interval: 6h
|
||||||
|
url: https://beluga-cloud.github.io/charts
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
apiVersion: source.toolkit.fluxcd.io/v1beta2
|
||||||
|
kind: HelmRepository
|
||||||
|
metadata:
|
||||||
|
name: irsigler
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
interval: 6h
|
||||||
|
url: https://helm.irsigler.cloud/
|
||||||
40
renovate.json
Normal file
40
renovate.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
|
"extends": [
|
||||||
|
"local>3dwardch3ng/renovate-config"
|
||||||
|
],
|
||||||
|
"kubernetes": {
|
||||||
|
"fileMatch": ["\\.yaml$"]
|
||||||
|
},
|
||||||
|
"helm-values": {
|
||||||
|
"fileMatch": ["\\.yaml$"]
|
||||||
|
},
|
||||||
|
"flux": {
|
||||||
|
"fileMatch": ["\\.yaml$"]
|
||||||
|
},
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"matchDatasources": ["helm"],
|
||||||
|
"commitMessageTopic": "{{depName}} Helm release"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchDatasources": ["github-releases"],
|
||||||
|
"matchPackageNames": ["k3s-io/k3s"],
|
||||||
|
"separateMinorPatch": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchPackagePrefixes": ["ghcr.io/immich-app/"],
|
||||||
|
"groupName": "Immich"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchDatasources": ["github-tags"],
|
||||||
|
"matchPackageNames": ["bjw-s/helm-charts"],
|
||||||
|
"versioning": "regex:^(?<compatibility>.+)-(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)$"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchDatasources": ["docker", "github-tags"],
|
||||||
|
"matchPackageNames": ["ghcr.io/fluxcd/flux-manifests", "fluxcd/flux2"],
|
||||||
|
"groupName": "fluxcd/flux2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#!/usr/bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
filePath=$1
|
|
||||||
|
|
||||||
AGE_PUB_KEY"age1d47q8mlty404pxx378q49hr93aqexca4mkeqtdm00w4gjd09xd0qhxcdcz"
|
|
||||||
|
|
||||||
sops --age=$AGE_PUB_KEY --encrypt --encrypted-regex '^(data|stringData)$' --in-place $filePath
|
|
||||||
echo "File encrypted: $filePath."
|
|
||||||
|
|
||||||
git add $filePath
|
|
||||||
git commit -am "Encrypt file $filePath by Age."
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/usr/bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
filePath=$1
|
|
||||||
|
|
||||||
sops --encrypt --in-place $filePath
|
|
||||||
echo "File encrypted: $filePath."
|
|
||||||
|
|
||||||
git add $filePath
|
|
||||||
git commit -am "Encrypt file $filePath by GPG."
|
|
||||||
Reference in New Issue
Block a user