Compare commits

..
60 changed files with 786 additions and 320 deletions
+41
View File
@@ -0,0 +1,41 @@
#!/usr/bin/env bash
set -euo pipefail
# Normalise staged manifests to their kubectl kustomize output, so what is
# committed is exactly what Argo CD renders. Requires kubectl and yq.
identity='[.apiVersion, .kind, .metadata.name // ""] | join("|")'
git diff --cached --name-only --diff-filter=ACM -- '*.yaml' |
while IFS= read -r file; do
dir=$(dirname "$file")
name=$(basename "$file")
[ "$name" = kustomization.yaml ] && continue
# only normalise files the sibling kustomization lists as a resource, so
# patches and components are never replaced with build output
yq -r '.resources[]? // ""' "$dir/kustomization.yaml" 2>/dev/null |
grep -Fxq "$name" || continue
rendered=$(mktemp)
kubectl kustomize "$dir" |
yq eval-all "select(($identity) == \"$(yq eval-all "$identity" "$file" | head -1)\")" - >"$rendered"
if [ -s "$rendered" ] && ! diff -q "$file" "$rendered" >/dev/null; then
cat "$rendered" >"$file"
git add "$file"
echo "normalised $file"
fi
rm -f "$rendered"
# normalising may have reverted the change entirely
if git diff --cached --quiet -- "$file"; then
git reset -q HEAD -- "$file"
fi
done
# nothing left staged — prevent an empty commit
if git diff --cached --quiet; then
echo "pre-commit: no meaningful changes, aborting commit"
exit 1
fi
-40
View File
@@ -1,40 +0,0 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: cnpg
namespace: argocd
annotations:
argocd.argoproj.io/sync-wave: "0"
spec:
project: default
sources:
- repoURL: https://cloudnative-pg.github.io/charts
chart: cloudnative-pg
targetRevision: 0.28.2
helm:
values: |
replicaCount: 1
config:
clusterWide: true
- repoURL: https://cloudnative-pg.github.io/charts
chart: cluster
targetRevision: 0.6.1
helm:
values: |
cluster:
instances: 1
enablePDB: false
storage:
size: 500Mi
backups:
enabled: false
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ServerSideApply=true
-18
View File
@@ -1,18 +0,0 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
# add-ons
- add-ons/traefik.yaml
- add-ons/cert-manager.yaml
- add-ons/sealed-secrets.yaml
- add-ons/cnpg.yaml
# services
- services/app-argocd-repos.yaml
- services/app-autoregexbot.yaml
- services/app-betterslcm.yaml
- services/app-jellyfin.yaml
- services/app-legislative-summarization.yaml
- services/app-scriptscribe.yaml
- services/app-seaweedfs.yaml
- services/app-qbit.yaml
- services/app-stirling-pdf.yaml
-36
View File
@@ -1,36 +0,0 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: seaweedfs
annotations:
argocd.argoproj.io/sync-wave: "3"
namespace: argocd
spec:
project: default
sources:
- repoURL: https://seaweedfs.github.io/seaweedfs/helm
chart: seaweedfs
targetRevision: 4.33.0
helm:
values: |
allInOne:
enabled: true
master:
enabled: false
volume:
enabled: false
filer:
enabled: false
- repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
targetRevision: main
path: extras/services/seaweedfs
destination:
server: https://kubernetes.default.svc
namespace: seaweedfs
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ServerSideApply=true
@@ -1,40 +0,0 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: stirling-pdf
annotations:
argocd.argoproj.io/sync-wave: "3"
namespace: argocd
spec:
project: default
sources:
- repoURL: https://docs.stirlingpdf.com/Stirling-PDF-chart
chart: stirling-pdf-chart
targetRevision: "3.1.0"
helm:
values: |
fullnameOverride: stirling-pdf
persistence:
enabled: true
size: 512Mi
deployment:
extraVolumeMounts:
- name: storage-volume
mountPath: /configs
probes:
liveness:
initialDelaySeconds: 90
readiness:
initialDelaySeconds: 60
- repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
targetRevision: main
path: extras/services/stirling-pdf
destination:
server: https://kubernetes.default.svc
namespace: stirling-pdf
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
+45
View File
@@ -0,0 +1,45 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: bentopdf
namespace: bentopdf
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: bentopdf
template:
metadata:
labels:
app.kubernetes.io/name: bentopdf
spec:
containers:
- image: ghcr.io/alam00000/bentopdf-simple:latest@sha256:3d62b8f8eece5fe947026ac3925ff08fda245b3d6ba2c3916b94da91e0010c74
livenessProbe:
httpGet:
path: /
port: http
name: bentopdf
ports:
- containerPort: 8080
name: http
readinessProbe:
httpGet:
path: /
port: http
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 10m
memory: 32Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
@@ -1,24 +1,23 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: stirling-pdf
namespace: stirling-pdf
annotations:
argocd.argoproj.io/sync-wave: "1"
argocd.argoproj.io/sync-wave: "2"
name: bentopdf
namespace: bentopdf
spec:
parentRefs:
- name: traefik-gateway
namespace: traefik
kind: Gateway
sectionName: websecure
hostnames:
- pdf.whyredfire.dev
parentRefs:
- kind: Gateway
name: traefik-gateway
namespace: traefik
sectionName: websecure
rules:
- matches:
- backendRefs:
- name: bentopdf
port: 8080
matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: stirling-pdf
port: 8080
+6
View File
@@ -0,0 +1,6 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
- httproute.yaml
+12
View File
@@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: bentopdf
namespace: bentopdf
spec:
ports:
- name: http
port: 8080
targetPort: http
selector:
app.kubernetes.io/name: bentopdf
@@ -0,0 +1,12 @@
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: anubis-key
namespace: garage
spec:
encryptedData:
ED25519_PRIVATE_KEY_HEX: AgCviDZEvLfdKldhAtWubXmCxvCym6nEFBERMBDbfMftsCQdRdWFwAZ3IkQF5PqyBCjZ8jirQMttmXqL1GNKvJfEDkK4rwwYGkLpRM56IpRtkGhGHgYQOIYTa9RHzJm5OjPKnVppCRpb4Qe2MKczg8Uhp7Z3hW1HMDzK85Rzn2k41qcGqMRwEgDdmFVJxB9gviM76jcrgjnyNJvoIMinNwqRdTHmXnY451xDkBofEzkTXZC7plW42/3Vz/66bdqtHCmM68hZJkluki86ubHJqPIMuA55BJM7CRJTgKhk5va4Ex3j4RlTSF7ai+EGmF+jq6ls8Dn1QU12Osak97MulOEyCBHBQg3nnu5TZoFJKWT/Bgg0M9r1RuFyr6mrphVu6yMIIiROcyl95E3LjtMVC4o7+tWgkYmIOjYafQdpf7p6I2QPG4P6o/6qkEUWL1tqqYjk9RZ+OuOuBWe399in4OnRgfV+ZOJcCKXIsgbW1uVAiQL3lGMGI9/sDLxKtimpybGOX5F9f3O7mqFZ7FzkdvhgUtWkY+PUJIZHFNUSlF+ttmrj3wtq4JOpFdPYZqcnTCFFtwk+yDos8YWWjF0TX1RhM8Yq/+VBOVVaJnlhaolIKHiMds5JBGypsPjEBmP9fJ1ip4TjCyCP3p1/YscksgqjUWOCeASO9b50ce0OJzL9yHMGurffianLWR768q/1Zi5WQv6B9vJxCICa9TCCYgLOz0LUu0iiMd5hlPX0/i4gWi9KykIcSYHJ/RuE9+4jaqkYsTyhOipKPpkpjsqou9y1
template:
metadata:
name: anubis-key
namespace: garage
+44
View File
@@ -0,0 +1,44 @@
apiVersion: anubis.techaro.dev/v1alpha1
kind: AnubisProxy
metadata:
annotations:
argocd.argoproj.io/sync-wave: "1"
name: anubis
namespace: garage
spec:
anubis:
envExtra:
- name: DIFFICULTY
value: "5"
- name: SERVE_ROBOTS_TXT
value: "true"
- name: COOKIE_DOMAIN
value: garage.whyredfire.dev
- name: REDIRECT_DOMAINS
value: garage.whyredfire.dev
- name: COOKIE_PARTITIONED
value: "true"
- name: COOKIE_HTTP_ONLY
value: "true"
- name: COOKIE_SAME_SITE
value: Lax
- name: DIFFICULTY_IN_JWT
value: "true"
image:
tag: v1.26.2
keys:
existingSecret: anubis-key
metrics:
enabled: false
persistence:
enabled: false
resources:
limits:
memory: 128Mi
requests:
cpu: 50m
memory: 64Mi
target:
service:
name: garage-ui
port: 80
+23
View File
@@ -0,0 +1,23 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
annotations:
argocd.argoproj.io/sync-wave: "2"
name: garage-ui
namespace: garage
spec:
hostnames:
- garage.whyredfire.dev
parentRefs:
- kind: Gateway
name: traefik-gateway
namespace: traefik
sectionName: websecure
rules:
- backendRefs:
- name: anubis
port: 80
matches:
- path:
type: PathPrefix
value: /
+7
View File
@@ -0,0 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- sealed-secret.yaml
- anubis-key-sealedsecret.yaml
- anubis-proxy.yaml
- httproute.yaml
+14
View File
@@ -0,0 +1,14 @@
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: garage-ui-secrets
namespace: garage
spec:
encryptedData:
admin-password: AgCQeGAvd1QdDC8IUwNYqHJxRES1jfPbonYTyutCklms6tjebQw1pRKnbDWGRaFmgWg5jFRPYf6TAMRnZnA/1dKJMOrV9vGjqx++r+khWbe5oqvcoQInqVdbkfulHoP/Bf6jc2mj9znGqpW6E7e6Z94pwwYkpaY2CIYhfcs7PiaTh7HiFMmoNWlGmHBh+lIZ//WJblgpFdQRWR9j7CiIJOLC3OmAvGV+Uh5i15fdA9aTBLZaB1pWh/kqug/mmj6q5E3Bp7BlC7Pm20Dbyn85kfA9RjAM/AkWSycGcBgk+FaJKFVJnPzrHcx6CdkbUnczxGVrbs+C89pzCk8ysaOVSNDErW0rCWNaHrflRx6P1+OUamCWWafZdkWTGQ4m0I5pX5IQ40zIK1uE8Zzil8EJPynfs37fNzn54wVBmsaKpsFC/3y+d8UTVgf1shJF0cqPimWjCZPqvUZrimL/20tPhTSERaxtWSq14l39bQUc4sNZdaKc69IkI04geI9OPvE+XXQNYe86XPYlNJ/R5curg1RvQxAR59sb04RmZAfdSvcwYxpK1Ekchq/e9IK4ft6Ul70nE/oN43NE2Ck1+5/EOjucFmIQzZ49Jq2OIjHuBjA/p/BmwAhiZVwPObRJ0VoL9XDv7BVB+S/+RWnFjDW7J5YhWquZ2Y6XwspHhpjvHmH+LLSio/34VpWQgG/lSAhvSPuRkIp/XxhQwemti+3yQNeqfXtvpfKa1IgAg9ic/rbocQIUtQDaT4yYFi7cruTpx7U=
admin-token: AgDBYTHO2ZgJig+h3wIv1ru7VxEDKIq+SUjOygg39lVaF1bH0ADaWOdr1m6nP37LiBCyQSGtqilUGqXPV91VRiJJqFBXLTnYs0JbmXGekkfeImztAd7LL3yqKHThji/Bo+vD00PC3SAbpder2d6BJhOMez2XqFY2vPSY81earoiR+ajzuvHBC4PuwDjNYwnNq5BkGCF/D6EOenVfVJZdWHG4/oCciJzX+fwYQYw0sY8ur5cRxyY6wyWC2QH9YflDKbwFteiqnh8E1+B4mqSFiTcaM79FAU6rYxknXmw/BArNdbXvAxvYDyGKxQA1k6GwW9TWSg/CpKAmuJW2Xv1nMCqt3ZIJCTO/H1PIi24XouNBGc9n0VOWKNWZTI8CIZLRB+/LzLuT/vjhu4qA/LE6SkDXw1dTkgkkUChUKN4PrWfwTVIEgZwjPdewOZ9D9JT8TmPSZtGvVuDVOJl7+wBYGT4SkI9W2qU91h1VT+vmXO/7QyQ/kj2ny092GjT2aJTFAbtusAjV3dKZnfodXaCX/dQ3JnSuP2mWQGZ/2Gj5AB92FNvqeTkiqovS2hGgXjyOYp4JeXVPvBa1tWEo0Cy4FrqBLaycNIHuhGiWAhLrivXTX2YqyM3NfEmEuyzXu5M3E6eQhaF8uveDjqhxF1z07IUXU8zBCvHtC7vX2aYPfSKGWcpvGKa8NnkjamRY1qJbj1Jr15a9UBSM1TyWNGp3pxFHyy707FlayRDIdJOe0iYqQw/5qZQJBl1u4/1zbOldP3dPFtbGuhR257+wNWwKKfACorTsBg==
jwt-key.pem: AgBYRkRh01LSyyozE46odjgrHsZ6gI3ykVOdV7qMPEFt5lILq44BKFt3vVL+yAUz0brVPQeEjz7dg+xsurAKKMjvuxzkOqBsSFhWwBzy+f+GfTSZPBrBNPAX7jI05dUNbcu2UuxYMlgVq6VWa9lf0Gc8yvuEuD0nS2qmpj1ACL6awLBKnkVXL9c5mvoC97DRyk920rPTnERJGU5q7i+zue4sxufYJwJZAJLOmdpzavHfQ3lCcJr6FfboFmGnvD6SM85rXTtImyDY4tsXf4J1rRriYR1OQe91j4SSbvxDFskXYSQ4bTgjimat21SXLCImj/Pqh6LJz7wMd9aW95ju4jDE1q1og0ToIL0Nybl9ANhqlJgFtOfvQRnaJVQQw/2GitlDVejJHCYWsVsSxQtAhvrGdWDOrZ1eTzvsmBnGcWzDwtC1YN3u+Wd0qJBfoRIJLiinwLaJ7ponm5MSb9Qjkym99gXm6XUO0MlHS52pfVaai+OmyWE6B6nF9tf3YVXfjZcNVB1pFHCZZR6XcnIm+wi1EwxXR8NIeFgqiaIm+BwX9u6IMiQOHCVznHD5nc2wfSXpeeT75IX/HAzRWC2cc6a8vPsr+h4A4hqW+cOoMYb9gQQIa+F5X4LcWb6f/0HJHh1IO4vf+P2hVU/5CkpgGJk+x48KgkrX0CE+bafQQjNp8JTdis1gxSGEX0QUaVGl+x7exGhrKlW81ZZTovequibx1JhdNSXNbWZxQ2fXz7SdN+/AjYyEh1gNPI2Zx6RRJc5BlDSSt7TYwqy1NUcPfbJV7hbqV7oDUH8JrsoSk+xxB0WDE+Uh5P4MsQna6NWkWyFV4tvfK4QyMupQaxOAKOYV27DxBaTr
template:
metadata:
name: garage-ui-secrets
namespace: garage
+5
View File
@@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- sealed-secret.yaml
- service-admin.yaml
+12
View File
@@ -0,0 +1,12 @@
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: garage-secrets
namespace: garage
spec:
encryptedData:
rpcSecret: AgDWvOoSUADQx+cExTUDmk6/BWR8a7U5HRGf+T38P24FrP4DJiKl3GJ3Ce9a3eF7SqO/1TXiaN80+c4NX0dMEmnaS8III2Zbaa7x/rOHP608Vh1z2Nnxly11X10okVy+Qym9O5/oA3cue2bu6K3eG8W38mn3hCA9kWC6g9OiAwjBTxJXYmsUFYbj69Iloo9moBBLEtztu8T9vYu8rGqcchKzzjnvcS91kiduq9rY9/ZvYC4zx469DgnV/di8cjGdU6JAtsoHwggDtCVf2hvkyOIHTyPM9Y/EVGCsOsIzhJnTdsyRGn4su3ruLmS8VqbKC22Q86pSHjwdlD5RoZJjYtMWr5Q5YAvFbnTH9/+d0r363BfxlNsVkINd5d2OwlPpagEQ9pg4oFnnk48tsVEoYz1RCy9x/bK3U4B0Jin6l0T2NJ3umXPriLxBQbODWVA9vcv6G1tQiiuOsbYCWigoxe3ACpuYQDV+XujfmEZr3pcIw0hwKXtUWHI079aUkICcMEbtE3gLc1dNVQpja1SimZOUlqf6pz3YLv6L1e2X+yR93p2rN6hc8IJh3KA8ZR1Ymbbq2LaOwdyla50uuhsOkE2TGDTGmf9NyXjGcUys5LgNpRruzXEm/KgUX4tP7iMjHu5HbnDe9oiv66qfuIORiR2P3lbOdx3s+XmPd/87afw6YHA896ccCRkGpGnFanbrR+Z7MRqCOZsSLnQd1JpjnWJJU/bzrSl4q+PUV1Bt+hvAf8wXUrDtES6MdpOKUe4XW8s3QbVHvCx1iOSzP+r59T4N
template:
metadata:
name: garage-secrets
namespace: garage
+13
View File
@@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: garage-admin
namespace: garage
spec:
ports:
- name: admin
port: 3903
targetPort: admin
selector:
app.kubernetes.io/instance: garage
app.kubernetes.io/name: garage
@@ -1,23 +1,23 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: jellyfin-local
namespace: jellyfin
annotations:
argocd.argoproj.io/sync-wave: "1"
name: jellyfin-local
namespace: jellyfin
spec:
parentRefs:
- name: traefik-gateway
namespace: traefik
kind: Gateway
sectionName: websecure
hostnames:
- jellyfin-local.whyredfire.dev
parentRefs:
- kind: Gateway
name: traefik-gateway
namespace: traefik
sectionName: websecure
rules:
- matches:
- backendRefs:
- name: jellyfin
port: 8096
matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: jellyfin
port: 8096
@@ -1,23 +1,23 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: jellyfin
namespace: jellyfin
annotations:
argocd.argoproj.io/sync-wave: "1"
name: jellyfin
namespace: jellyfin
spec:
parentRefs:
- name: traefik-gateway
namespace: traefik
kind: Gateway
sectionName: websecure
hostnames:
- jellyfin.whyredfire.dev
parentRefs:
- kind: Gateway
name: traefik-gateway
namespace: traefik
sectionName: websecure
rules:
- matches:
- backendRefs:
- name: jellyfin
port: 8096
matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: jellyfin
port: 8096
+5
View File
@@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- httproute-local.yaml
- httproute.yaml
+26
View File
@@ -0,0 +1,26 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
annotations:
argocd.argoproj.io/sync-wave: "1"
name: anubis-operator
namespace: argocd
spec:
destination:
namespace: anubis-operator-system
server: https://kubernetes.default.svc
project: default
source:
kustomize:
images:
- public-registry.brunobernard.dev/techarohq/anubis-operator=ghcr.io/eznix86/anubis-kubernetes-operator:0.4.4
path: config/default
repoURL: https://github.com/eznix86/anubis-kubernetes-operator.git
targetRevision: v0.4.4
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ServerSideApply=true
+22
View File
@@ -0,0 +1,22 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
annotations:
argocd.argoproj.io/sync-wave: "3"
name: argocd-dashboard
namespace: argocd
spec:
destination:
namespace: argocd
server: https://kubernetes.default.svc
project: default
source:
path: infra/argocd-dashboard
repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
targetRevision: main
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
@@ -1,19 +1,19 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: argocd-repos
namespace: argocd
annotations:
argocd.argoproj.io/sync-wave: "1"
name: argocd-repos
namespace: argocd
spec:
destination:
namespace: argocd
server: https://kubernetes.default.svc
project: default
source:
path: infra/argocd-repos
repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
targetRevision: main
path: extras/add-ons/argocd-repos
destination:
server: https://kubernetes.default.svc
namespace: argocd
syncPolicy:
automated:
prune: true
@@ -1,16 +1,17 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: cert-manager
namespace: argocd
annotations:
argocd.argoproj.io/sync-wave: "1"
name: cert-manager
namespace: argocd
spec:
destination:
namespace: cert-manager
server: https://kubernetes.default.svc
project: default
sources:
- repoURL: https://charts.jetstack.io
chart: cert-manager
targetRevision: v1.19.3
- chart: cert-manager
helm:
values: |
crds:
@@ -20,12 +21,11 @@ spec:
kind: ControllerConfiguration
featureGates:
ExperimentalGatewayAPISupport: true
- repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
repoURL: https://charts.jetstack.io
targetRevision: v1.21.1
- path: infra/cert-manager
repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
targetRevision: main
path: extras/add-ons/cert-manager
destination:
server: https://kubernetes.default.svc
namespace: cert-manager
syncPolicy:
automated:
prune: true
+28
View File
@@ -0,0 +1,28 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
annotations:
argocd.argoproj.io/sync-wave: "0"
name: cnpg
namespace: argocd
spec:
destination:
namespace: cnpg-system
server: https://kubernetes.default.svc
project: default
source:
chart: cloudnative-pg
helm:
values: |
replicaCount: 1
config:
clusterWide: true
repoURL: https://cloudnative-pg.github.io/charts
targetRevision: 0.29.0
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ServerSideApply=true
+22
View File
@@ -0,0 +1,22 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
annotations:
argocd.argoproj.io/sync-wave: "0"
name: gateway-api
namespace: argocd
spec:
destination:
namespace: default
server: https://kubernetes.default.svc
project: default
source:
path: config/crd
repoURL: https://github.com/kubernetes-sigs/gateway-api.git
targetRevision: v1.6.1
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- ServerSideApply=true
+11
View File
@@ -0,0 +1,11 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- anubis-operator.yaml
- argocd-dashboard.yaml
- argocd-repos.yaml
- cert-manager.yaml
- cnpg.yaml
- gateway-api.yaml
- sealed-secrets.yaml
- traefik.yaml
@@ -1,19 +1,19 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: sealed-secrets
namespace: argocd
annotations:
argocd.argoproj.io/sync-wave: "0"
name: sealed-secrets
namespace: argocd
spec:
destination:
namespace: sealed-secrets
server: https://kubernetes.default.svc
project: default
source:
repoURL: https://bitnami-labs.github.io/sealed-secrets
chart: sealed-secrets
targetRevision: 2.18.5
destination:
server: https://kubernetes.default.svc
namespace: sealed-secrets
repoURL: https://bitnami.github.io/sealed-secrets
targetRevision: 2.19.1
syncPolicy:
automated:
prune: true
@@ -1,16 +1,17 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: traefik
namespace: argocd
annotations:
argocd.argoproj.io/sync-wave: "2"
name: traefik
namespace: argocd
spec:
destination:
namespace: traefik
server: https://kubernetes.default.svc
project: default
sources:
- repoURL: https://traefik.github.io/charts
chart: traefik
targetRevision: v39.0.2
- chart: traefik
helm:
values: |
providers:
@@ -19,9 +20,10 @@ spec:
kubernetesIngress:
enabled: false
service:
type: ClusterIP
externalIPs:
- 192.168.2.5
spec:
type: ClusterIP
externalIPs:
- 192.168.2.5
gateway:
listeners:
web:
@@ -38,12 +40,11 @@ spec:
- kind: Secret
name: wildcard-whyredfire-dev
group: ""
- repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
repoURL: https://traefik.github.io/charts
targetRevision: 41.2.0
- path: infra/traefik
repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
targetRevision: main
path: extras/add-ons/traefik
destination:
server: https://kubernetes.default.svc
namespace: traefik
syncPolicy:
automated:
prune: true
+5
View File
@@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- add-ons
- services
@@ -1,19 +1,19 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: telegram-autoregexbot
annotations:
argocd.argoproj.io/sync-wave: "3"
name: telegram-autoregexbot
namespace: argocd
spec:
destination:
namespace: telegram-bot
server: https://kubernetes.default.svc
project: default
source:
path: k8s
repoURL: https://github.com/santarl/telegram-autoregexbot
targetRevision: main
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: telegram-bot
syncPolicy:
automated:
prune: true
+22
View File
@@ -0,0 +1,22 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
annotations:
argocd.argoproj.io/sync-wave: "3"
name: bentopdf
namespace: argocd
spec:
destination:
namespace: bentopdf
server: https://kubernetes.default.svc
project: default
source:
path: apps/bentopdf
repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
targetRevision: main
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
@@ -1,19 +1,19 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: betterslcm
annotations:
argocd.argoproj.io/sync-wave: "3"
name: betterslcm
namespace: argocd
spec:
destination:
namespace: betterslcm
server: https://kubernetes.default.svc
project: default
source:
path: k8s
repoURL: https://github.com/DK10WS/SLCM_APP.git
targetRevision: web
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: betterslcm
syncPolicy:
automated:
prune: true
+46
View File
@@ -0,0 +1,46 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
annotations:
argocd.argoproj.io/sync-wave: "4"
name: garage-ui
namespace: argocd
spec:
destination:
namespace: garage
server: https://kubernetes.default.svc
project: default
sources:
- chart: garage-ui
repoURL: https://helm.noste.dev/
targetRevision: 0.12.1
helm:
values: |
config:
server:
domain: garage.whyredfire.dev
protocol: https
root_url: https://garage.whyredfire.dev
garage:
admin_endpoint: http://garage-admin:3903
existingSecret:
name: garage-ui-secrets
auth:
admin:
enabled: true
existingSecret:
name: garage-ui-secrets
jwt_private_key_secret:
name: garage-ui-secrets
cors:
enabled: false
- path: apps/garage-ui
repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
targetRevision: main
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ServerSideApply=true
+84
View File
@@ -0,0 +1,84 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
annotations:
argocd.argoproj.io/sync-wave: "3"
name: garage
namespace: argocd
spec:
destination:
namespace: garage
server: https://kubernetes.default.svc
project: default
sources:
- repoURL: https://git.deuxfleurs.fr/Deuxfleurs/garage.git
targetRevision: v2.4.1
path: script/helm/garage
helm:
values: |
garage:
singleNode: true
existingRpcSecret: garage-secrets
noClusterRole: true
# No discovery or website listener is needed for standalone S3.
garageTomlString: |
metadata_dir = "/mnt/meta"
data_dir = "/mnt/data"
db_engine = "sqlite"
metadata_fsync = true
data_fsync = true
replication_factor = 1
rpc_bind_addr = "127.0.0.1:3901"
rpc_public_addr = "127.0.0.1:3901"
rpc_secret = "__RPC_SECRET_REPLACE__"
[s3_api]
s3_region = "garage"
api_bind_addr = "0.0.0.0:3900"
[admin]
api_bind_addr = "0.0.0.0:3903"
metrics_require_token = true
image:
repository: dxflrs/garage
initImage:
tag: "1.37.0"
persistence:
meta:
storageClass: local-path
size: 1Gi
data:
storageClass: local-path
size: 9Gi
podSecurityContext:
seccompProfile:
type: RuntimeDefault
securityContext:
allowPrivilegeEscalation: false
readinessProbe:
httpGet:
path: /health
port: admin
timeoutSeconds: 3
livenessProbe:
tcpSocket:
port: s3-api
initialDelaySeconds: 60
periodSeconds: 20
timeoutSeconds: 3
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
memory: 1Gi
- path: apps/garage
repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
targetRevision: main
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ServerSideApply=true
@@ -1,18 +1,21 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: jellyfin
annotations:
argocd.argoproj.io/sync-wave: "3"
name: jellyfin
namespace: argocd
spec:
destination:
namespace: jellyfin
server: https://kubernetes.default.svc
project: default
sources:
- repoURL: https://jellyfin.github.io/jellyfin-helm
chart: jellyfin
targetRevision: "2.7.0"
- chart: jellyfin
helm:
values: |
image:
tag: "12.0"
service:
type: ClusterIP
port: 8096
@@ -26,12 +29,11 @@ spec:
enabled: true
type: hostPath
hostPath: /srv/media
- repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
repoURL: https://jellyfin.github.io/jellyfin-helm
targetRevision: 3.2.0
- path: apps/jellyfin
repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
targetRevision: main
path: extras/services/jellyfin
destination:
server: https://kubernetes.default.svc
namespace: jellyfin
syncPolicy:
automated:
prune: true
+12
View File
@@ -0,0 +1,12 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- autoregexbot.yaml
- bentopdf.yaml
- betterslcm.yaml
- garage.yaml
- garage-ui.yaml
- jellyfin.yaml
- legislative-summarization.yaml
- qbit.yaml
- scriptscribe.yaml
@@ -1,19 +1,19 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: legislative-summarization
annotations:
argocd.argoproj.io/sync-wave: "3"
name: legislative-summarization
namespace: argocd
spec:
destination:
namespace: legislative-summarization
server: https://kubernetes.default.svc
project: default
source:
path: k8s
repoURL: https://github.com/whyredfire/legislative-summarization
targetRevision: main
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: legislative-summarization
syncPolicy:
automated:
prune: true
@@ -1,19 +1,19 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: qbit
annotations:
argocd.argoproj.io/sync-wave: "3"
name: qbit
namespace: argocd
spec:
destination:
namespace: qbit
server: https://kubernetes.default.svc
project: default
source:
path: qbit
repoURL: https://gitea.whyredfire.dev/whyredfire/gitops-private.git
targetRevision: main
path: qbit
destination:
server: https://kubernetes.default.svc
namespace: qbit
syncPolicy:
automated:
prune: true
@@ -1,19 +1,19 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: scriptscribe
annotations:
argocd.argoproj.io/sync-wave: "3"
name: scriptscribe
namespace: argocd
spec:
destination:
namespace: scriptscribe
server: https://kubernetes.default.svc
project: default
source:
path: k8s
repoURL: https://github.com/whyredfire/scriptscribe
targetRevision: main
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: scriptscribe
syncPolicy:
automated:
prune: true
+6
View File
@@ -0,0 +1,6 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
data:
url: https://argo.whyredfire.dev
@@ -0,0 +1,6 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cmd-params-cm
data:
server.insecure: "true"
@@ -0,0 +1,6 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cmd-params-cm
data:
controller.diff.server.side: "true"
+4 -4
View File
@@ -4,14 +4,14 @@ metadata:
name: root-app
namespace: argocd
spec:
destination:
namespace: argocd
server: https://kubernetes.default.svc
project: default
source:
path: argocd-apps
repoURL: https://gitea.whyredfire.dev/whyredfire/gitops.git
targetRevision: main
path: applications
destination:
server: https://kubernetes.default.svc
namespace: argocd
syncPolicy:
automated:
prune: true
@@ -0,0 +1,6 @@
apiVersion: v1
kind: Service
metadata:
name: argocd-server
spec:
type: ClusterIP
@@ -1,12 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: argocd-server
spec:
type: NodePort
ports:
- name: https
port: 443
protocol: TCP
targetPort: 8080
nodePort: 30443
+14 -2
View File
@@ -2,14 +2,26 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: argocd
resources:
- https://raw.githubusercontent.com/argoproj/argo-cd/v3.2.6/manifests/install.yaml
- https://raw.githubusercontent.com/argoproj/argo-cd/v3.5.2/manifests/install.yaml
- argocd-root-app
patches:
- target:
kind: Service
name: argocd-server
path: argocd-server-nodeport-patch.yaml
path: argocd-server-clusterip-patch.yaml
- target:
kind: ConfigMap
name: argocd-cm
path: argocd-cm-application-health-patch.yaml
- target:
kind: ConfigMap
name: argocd-cm
path: argocd-cm-url-patch.yaml
- target:
kind: ConfigMap
name: argocd-cmd-params-cm
path: argocd-cmd-params-cm-server-side-diff-patch.yaml
- target:
kind: ConfigMap
name: argocd-cmd-params-cm
path: argocd-cmd-params-cm-server-insecure-patch.yaml
@@ -1,27 +0,0 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: seaweedfs-filer
namespace: seaweedfs
annotations:
argocd.argoproj.io/sync-wave: "1"
spec:
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: traefik-gateway
namespace: traefik
sectionName: websecure
hostnames:
- seaweedfs.whyredfire.dev
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- group: ""
kind: Service
name: seaweedfs-all-in-one
port: 8888
weight: 1
@@ -1,27 +0,0 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: seaweedfs-master
namespace: seaweedfs
annotations:
argocd.argoproj.io/sync-wave: "1"
spec:
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: traefik-gateway
namespace: traefik
sectionName: websecure
hostnames:
- seaweedfs-master.whyredfire.dev
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- group: ""
kind: Service
name: seaweedfs-all-in-one
port: 9333
weight: 1
@@ -0,0 +1,12 @@
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: anubis-key
namespace: argocd
spec:
encryptedData:
ED25519_PRIVATE_KEY_HEX: AgCR+UcOTNv+hAcK3jE3fb0AE5lQBuxl0Y7Yqt3Lg/Bhh89aPH2dRs0o2n/1MuCXNGOtBAXdyKtW6W3VtenD1uKsoz8da2UjO3+qvknLmrZzUqjcilmiJCS7POoECHhciCMJu1RrLkSQChjg+Kl6fZUbDSTK5GTh75yy7o1uRtXqbgXFtdVDYA8fwXLoAG4nWlSgRgGTUnTKTKooyx+ADEJOQWrFCP0zFkZJKUcGc60d6+5PyYGODDNjh1qed30O7xWyZcCVVUzeSkH5QCpBvALRzKLGBRjNTHAS4IGVelemPqsN5ti4w6fYGtkqi4OPuAuaC47kdEnLUvZeDB+Qxnwx6Qe7MEI4u8H2N6mP8jMH9MjQv4gzCTtPy90Vqikf7hJ0KFsI5CGXONbQkkyM1B3MNbyqkgmtZJchVbmeN9MZhZOS7JYUuexYosdiqRvyIOAWr1/rSN9LzwesXNAPojq8IZPDjIPcbFCBv1ROjsS/kXKawlLBMX+XEsQZUWUfTh9Cfn3N9muo4Sz+nQ11smXthSkVRaniJLIsd+MPXg/lHayP6MYWncPhj8ZZQHKwBNxsCHljh1cFsjfm/IrIDmre6eaREnsBrxh7QKtsoiWWclqgF4ziA4BVWHwkfpb1LjIQNDIkD+i66ijOmwpQoiCD8tWRKrvcGWy6bTDPMO0ErA5QVzDx8YMFmSC5Ii0iSWIR2ci+qlKgUHFedVnp2kOw4FyOxWsDnfJDBmwyPvXrfrbDcvSfKMTLn6VohWC4Zais5bIuhD0uAmCdfJzyRe+H
template:
metadata:
name: anubis-key
namespace: argocd
+44
View File
@@ -0,0 +1,44 @@
apiVersion: anubis.techaro.dev/v1alpha1
kind: AnubisProxy
metadata:
annotations:
argocd.argoproj.io/sync-wave: "1"
name: anubis
namespace: argocd
spec:
anubis:
envExtra:
- name: DIFFICULTY
value: "5"
- name: SERVE_ROBOTS_TXT
value: "true"
- name: COOKIE_DOMAIN
value: argo.whyredfire.dev
- name: REDIRECT_DOMAINS
value: argo.whyredfire.dev
- name: COOKIE_PARTITIONED
value: "true"
- name: COOKIE_HTTP_ONLY
value: "true"
- name: COOKIE_SAME_SITE
value: Lax
- name: DIFFICULTY_IN_JWT
value: "true"
image:
tag: v1.26.2
keys:
existingSecret: anubis-key
metrics:
enabled: false
persistence:
enabled: false
resources:
limits:
memory: 128Mi
requests:
cpu: 50m
memory: 64Mi
target:
service:
name: argocd-server
port: 80
+23
View File
@@ -0,0 +1,23 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
annotations:
argocd.argoproj.io/sync-wave: "2"
name: argocd-dashboard
namespace: argocd
spec:
hostnames:
- argo.whyredfire.dev
parentRefs:
- kind: Gateway
name: traefik-gateway
namespace: traefik
sectionName: websecure
rules:
- backendRefs:
- name: anubis
port: 80
matches:
- path:
type: PathPrefix
value: /
@@ -0,0 +1,6 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- anubis-key-sealedsecret.yaml
- anubis-proxy.yaml
- httproute.yaml
+4
View File
@@ -0,0 +1,4 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- repo-sealed-secret.yaml
@@ -0,0 +1,13 @@
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: cloudflare-api-token
namespace: cert-manager
spec:
encryptedData:
api-token: AgAWGbxZBGrznQxIKfKmKEqAwNKY025ojuhr1l2vgoj/dBJ3vxpKX2tYAxZse5gu+G5CiI+130atGPCqJxGB0oRTbeTi9Zyxhw+FclxGMcXrfqZtXVUANrNUmpVZMgMF5pzd04rY9WdvK9tQiXnDp4SayzpRpzoHgln5gvTeLaArOQ3NC/2Nx/Ka+ImFUvxPvCI8H3ANXuRlk3dFfnLN8Uwj3NXWmsmTphq4hDzHXc0IWoV26MFwoKftjfVlirlKbP4LBCp65mXdluu3/EsuA0P2AS2S0RkFAucBPCPe2z24bivMZgn61KBGIJJ/waJITQ5CfYMPWwzDhNuabdosNKW0HejIy5cYZxMOBTz1t8xGYhOBsNB3t3KbyOqE9qxDxdZqiPQbvM3zyagRPaucHt15tjUqEzHymi0GGFToixRcnlQAdVrxmcb6JRe7eVrful/PNB3rG29DEuiCbXDOfMPbScjDkxNpKgQTAXnhRaPrjR49dpW0pkNABn11DcU4RsckelfD5cdxt+E0Oe/P8nKcglrgHMFZLSV30JGT+WEv2xx1M7VFz7NdxyrB0K8f8/hf3f5lEEHqTzPfaWQUIL7ZBIOqbtqvlnlx0m70QOzkeMUQdTO5jo1MoZy7MgomOCGPAaXUhDrDtxYCgipmMIbjCo6RokS86YlvqE9BNTpxt1LXX6p0rLKTiN0JeumLTU0rmdvMBxP1dH0LyTd9GWrNvbX8ve6ikbPTo7xAPG9KwlO5M4pY9MJP
template:
metadata:
name: cloudflare-api-token
namespace: cert-manager
type: Opaque
@@ -1,18 +1,18 @@
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
annotations:
argocd.argoproj.io/sync-wave: "1"
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: [email protected]
privateKeySecretRef:
name: letsencrypt-prod
server: https://acme-v02.api.letsencrypt.org/directory
solvers:
- dns01:
cloudflare:
apiTokenSecretRef:
name: cloudflare-api-token
key: api-token
name: cloudflare-api-token
+5
View File
@@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- cloudflare-api-token-sealed-secret.yaml
- cluster-issuer.yaml
+4
View File
@@ -0,0 +1,4 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- wildcard-whyredfire-dev.yaml
@@ -4,11 +4,11 @@ metadata:
name: wildcard-whyredfire-dev
namespace: traefik
spec:
secretName: wildcard-whyredfire-dev
dnsNames:
- '*.whyredfire.dev'
issuerRef:
kind: ClusterIssuer
name: letsencrypt-prod
privateKey:
rotationPolicy: Always
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- "*.whyredfire.dev"
secretName: wildcard-whyredfire-dev