81 Commits

Author SHA1 Message Date
d11b156f15 adding db port 2024-12-26 10:58:30 +01:00
854f936c13 bad value 2024-12-23 21:07:11 +01:00
88e49484bb forgot targetRevision 2024-12-23 20:29:37 +01:00
d72e29ff16 handle prefix 2024-12-23 19:38:06 +01:00
3bbb2f8240 v2 suffix not to conflict with existing one 2024-12-23 19:01:49 +01:00
c84b0cd754 Prepping to use the linode database for keycloak 2024-12-22 09:54:12 +01:00
b0b300073f Bumped immich to 1.123.0 2024-12-18 21:37:50 +01:00
4c8e4fdda8 Bumped immich to 1.122.3 2024-12-14 11:03:34 +01:00
33ae8790bc Bumped immich to 1.122.3 2024-12-14 11:01:56 +01:00
ef882de1d8 Bumped immich to 1.122.2 2024-12-11 13:00:01 +01:00
975319c401 Bumped immich to 1.122.1 2024-12-06 23:43:14 +01:00
08359d4642 Bumped immich to 1.121.0 2024-11-22 07:43:35 +01:00
7924303a33 added admin token 2024-11-15 00:24:13 +00:00
4092438f95 fixed domain including protocol 2024-11-15 00:00:59 +00:00
180b147897 added accessmode for pvc 2024-11-14 23:48:48 +00:00
beaf854645 fixed errors 2024-11-14 23:44:11 +00:00
c06b8bf2f3 fixed typo 2024-11-14 23:36:01 +00:00
71d8aa9fc5 Refining vaultwarden 2024-11-14 23:25:16 +00:00
b648b0fc49 Merge branch 'vaultwarden' 2024-11-14 23:07:49 +00:00
5ffcfa4039 Finished vaultwarden 2024-11-14 23:07:23 +00:00
d083169e65 Using another chart for vaultwarden 2024-11-14 19:21:30 +00:00
661abbce61 Bumped immich to 1.120.2 2024-11-14 10:17:26 +00:00
d6c0a3c548 Bumped immich to 1.120.1 2024-11-14 10:10:31 +00:00
05f4d90f56 Bumped immich to 1.120.0 2024-11-14 09:58:26 +00:00
9ac2647482 PROPERLY binding immich argocd apps appversion to immich version 2024-11-14 09:42:34 +00:00
a3fa03c9f3 PROPERLY binding immich argocd apps appversion to immich version 2024-11-14 09:41:05 +00:00
d3cb5b4365 PROPERLY binding immich argocd apps appversion to immich version 2024-11-14 09:38:51 +00:00
277ea22a82 Binding immich argocd apps appversion to immich version 2024-11-14 09:36:05 +00:00
529ebc8095 Finished requirements 2024-11-14 08:56:58 +00:00
70118e5aeb Prepared vaultwarden 2024-11-13 18:47:14 +00:00
7250745e1b removed custom trusted domain config file 2024-11-12 00:30:16 +00:00
4bcde27ac1 Added trusted domain 2024-11-12 00:26:43 +00:00
b2cb0216d8 Removed readiness probe 2024-11-12 00:23:42 +00:00
861b2053c1 Removed liveness probe 2024-11-12 00:23:00 +00:00
06857a895c Added postinstall for nextcloud 2024-11-12 00:06:12 +00:00
f9bc508d58 Added postinstall for nextcloud 2024-11-11 23:51:57 +00:00
c362721538 Added postinstall for nextcloud 2024-11-11 23:40:35 +00:00
e2d372571c Added postinstall for nextcloud 2024-11-11 23:38:27 +00:00
a857624a05 Added postinstall for nextcloud 2024-11-11 23:27:38 +00:00
08aad1ca8c Added php configs as per the doc 2024-11-11 23:09:08 +00:00
309d61aa78 Removed db creation - use the cnpg one 2024-11-11 16:35:51 +00:00
0f38692cb2 Added resource presets 2024-11-11 16:21:16 +00:00
c42fd89401 Added ingress and resource presets 2024-11-11 16:04:25 +00:00
820e802cf5 fixed bad indentation 2024-11-11 15:54:17 +00:00
aced9ae111 fixed missing path 2024-11-11 15:50:34 +00:00
e3225f7857 Added odoo 2024-11-11 15:43:45 +00:00
8984a8d724 Remove ingress 2024-11-11 15:00:22 +00:00
f760fb39fa Trying without nginx 2024-11-09 22:47:16 +00:00
e7499cca2e Moved secret to nextcloud namespace 2024-11-09 22:29:36 +00:00
27eb541988 Removed nginx snippets 2024-11-09 22:22:44 +00:00
2830fc02ea Fixed typo 2024-11-09 22:21:15 +00:00
cc2297d2ac Added nextcloud 2024-11-09 22:20:07 +00:00
e6b1d93c84 Added nextcloud 2024-11-09 22:16:03 +00:00
d52e217a0f Added nextcloud 2024-11-09 22:09:30 +00:00
1901e0708a Starting work on nextcloud-syncthing 2024-11-09 16:19:21 +00:00
3242d4f457 fix version and typo 2024-11-09 08:09:50 +00:00
cb4bd089fc Added uptime kuma 2024-11-09 08:04:02 +00:00
f84f9c6b6e Finished keycloak deployment 2024-11-08 23:00:56 +00:00
40957575f9 Finished keycloak deployment 2024-11-08 22:58:54 +00:00
7ad534a148 Finished keycloak deployment 2024-11-08 22:50:47 +00:00
ed9d983be2 Finished keycloak deployment 2024-11-08 22:48:01 +00:00
c708493095 Adding keycloak-requirements 2024-11-08 17:11:24 +00:00
0dea2b2499 keycloak-operator in a folder 2024-11-07 21:16:27 +00:00
f370d89d61 Trying top level path 2024-11-07 21:11:10 +00:00
e7f7665733 Changed keycloak-operator repo to github action one 2024-11-07 21:07:53 +00:00
881245657d trying wget instead of curl 2024-11-07 18:36:04 +00:00
3637c12f41 Fixed typo 2024-11-07 18:30:29 +00:00
81fdbc130c Added keycloak operator 2024-11-07 18:28:36 +00:00
2d58d848db Fix jellyseerr ingress 2024-11-07 00:54:40 +00:00
cb43e2332f Added jellyseerr 2024-11-06 18:42:35 +00:00
d870497573 Added jellyseerr 2024-11-06 18:38:57 +00:00
f3a230c0eb Added jellyfin 2024-11-06 18:30:16 +00:00
225fa64f39 Added filebrowser 2024-11-06 18:13:21 +00:00
64600c00b1 Added radarr 2024-11-06 18:05:24 +00:00
2a81a080f1 fixed config size for sonarr 2024-11-06 17:57:31 +00:00
451d8cd8ba Added sonarr 2024-11-06 17:53:56 +00:00
6654cf081c Added postinstall app and jackett ingress 2024-11-06 17:46:02 +00:00
462ebc4af7 Adding telegram notifications and jackett 2024-11-06 17:30:18 +00:00
29161da328 Adding flaresolverr 2024-11-06 17:22:13 +00:00
008a6d1374 Adding transmission ports in values 2024-11-06 17:11:35 +00:00
1a9babcf15 Adding transmission ports in values 2024-11-06 17:00:14 +00:00
127 changed files with 3092 additions and 354 deletions

View File

@@ -2,4 +2,5 @@ apiVersion: v2
name: immich-argocd-apps
description: A Helm chart for deploying Immich as an ArgoCD app
type: application
version: 0.1.0
version: 0.3.0
appVersion: v1.123.0

View File

@@ -17,6 +17,8 @@ spec:
helm:
releaseName: immich
valuesObject:
image:
tag: {{ .Chart.AppVersion }}
immich:
persistence:
library:

View File

@@ -0,0 +1,28 @@
{{- if .Values.keycloakOperator.enable -}}
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: keycloak-operator
namespace: {{ .Values.argocd.namespace }}
annotations:
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "https://github.com/roukydesbois/keycloak-operator.git"
targetRevision: HEAD
path: 'keycloak-operator'
helm:
releaseName: keycloak-operator
destination:
server: {{ .Values.keycloakOperator.destination.server }}
namespace: {{ .Values.keycloakOperator.destination.namespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true
{{- end }}

View File

@@ -41,3 +41,8 @@ traefik:
server: https://kubernetes.default.svc
namespace: kube-system
keycloakOperator:
enable: false
destination:
server: https://kubernetes.default.svc
namespace: keycloak

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: keycloak-argocd-apps
description: A Helm chart for deploying the different argocd apps to deploy Keycloak
type: application
version: 0.2.1

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "keycloak-argocd-apps.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "keycloak-argocd-apps.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "keycloak-argocd-apps.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "keycloak-argocd-apps.labels" -}}
helm.sh/chart: {{ include "keycloak-argocd-apps.chart" . }}
{{ include "keycloak-argocd-apps.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "keycloak-argocd-apps.selectorLabels" -}}
app.kubernetes.io/name: {{ include "keycloak-argocd-apps.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "keycloak-argocd-apps.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "keycloak-argocd-apps.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,43 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: {{ .Values.argocd.prefix }}keycloak-deployment
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "0"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "https://git.blarre.net/thomas/helm-charts.git"
targetRevision: {{ .Values.keycloakDeployment.targetRevision }}
path: keycloak-deployment
helm:
releaseName: keycloak-deployment
valuesObject:
prefix: {{ .Values.argocd.prefix }}
keycloakDeployment:
deploymentName: {{ .Values.keycloakDeployment.deploymentName }}
numInstances: {{ .Values.keycloakDeployment.numInstances }}
hostname: {{ .Values.keycloakDeployment.hostname }}
vendor: {{ .Values.keycloakDeployment.vendor }}
dbHost: {{ .Values.keycloakDeployment.dbHost }}
dbPort: {{ .Values.keycloakDeployment.dbPort }}
usernameSecret:
name: {{ .Values.keycloakDeployment.usernameSecret.name }}
key: {{ .Values.keycloakDeployment.usernameSecret.key }}
passwordSecret:
name: {{ .Values.keycloakDeployment.passwordSecret.name }}
key: {{ .Values.keycloakDeployment.passwordSecret.key }}
database: {{ .Values.keycloakDeployment.database }}
destination:
server: {{ .Values.mainDestination }}
namespace: {{ .Values.mainNamespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true

View File

@@ -0,0 +1,31 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: {{ .Values.argocd.prefix }}keycloak-postinstall
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "1"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "https://git.blarre.net/thomas/helm-charts.git"
targetRevision: {{ .Values.keycloakDeployment.targetRevision }}
path: keycloak-postinstall
helm:
releaseName: keycloak-postinstall
valuesObject:
prefix: {{ .Values.argocd.prefix }}
tailscaleIngresses:
keycloakHostname: {{ .Values.tailscaleIngresses.keycloakHostname }}
destination:
server: {{ .Values.mainDestination }}
namespace: {{ .Values.mainNamespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true

View File

@@ -0,0 +1,34 @@
{{- if .Values.dbCluster.enable -}}
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: {{ .Values.argocd.prefix }}keycloak-requirements
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "-1"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "https://git.blarre.net/thomas/helm-charts.git"
targetRevision: HEAD
path: keycloak-requirements
helm:
releaseName: keycloak-requirements
valuesObject:
prefix: {{ .Values.argocd.prefix }}
dbCluster:
size: {{ .Values.dbCluster.size }}
numInstances: {{ .Values.dbCluster.numInstances }}
destination:
server: {{ .Values.mainDestination }}
namespace: {{ .Values.mainNamespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true
{{- end }}

View File

@@ -0,0 +1,26 @@
argocd:
namespace: argocd
project: default
prefix: null
dbCluster:
enable: true
size: 10Gi
numInstances: 3
mainNamespace: keycloak
mainDestination: https://kubernetes.default.svc
keycloakDeployment:
targetRevision: HEAD
numInstances: 1
hostname: sso.domain.net
vendor: postgres
dbHost: keycloak-db-rw
dbPort: 5432
usernameSecret:
name: keycloak-db-app
key: user
passwordSecret:
name: keycloak-db-app
key: password
database: app
tailscaleIngresses:
keycloakHostname: sso

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: keycloak-deployment
description: A Helm chart for deploying the actual keycloak pod through the keycloak operator
type: application
version: 0.2.1

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "keycloak-deployment.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "keycloak-deployment.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "keycloak-deployment.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "keycloak-deployment.labels" -}}
helm.sh/chart: {{ include "keycloak-deployment.chart" . }}
{{ include "keycloak-deployment.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "keycloak-deployment.selectorLabels" -}}
app.kubernetes.io/name: {{ include "keycloak-deployment.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "keycloak-deployment.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "keycloak-deployment.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,26 @@
apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
name: {{ .Values.prefix }}keycloak
spec:
instances: {{ .Values.keycloakDeployment.numInstances }}
db:
vendor: {{ .Values.keycloakDeployment.vendor }}
host: {{ .Values.keycloakDeployment.dbHost }}
port: {{ .Values.keycloakDeployment.dbPort }}
usernameSecret:
name: {{ .Values.keycloakDeployment.usernameSecret.name }}
key: {{ .Values.keycloakDeployment.usernameSecret.key }}
passwordSecret:
name: {{ .Values.keycloakDeployment.passwordSecret.name }}
key: {{ .Values.keycloakDeployment.passwordSecret.key }}
database: {{ .Values.keycloakDeployment.database }}
ingress:
enabled: false
http:
httpEnabled: true
hostname:
hostname: {{ .Values.keycloakDeployment.hostname }}
strict: false
proxy:
headers: xforwarded # double check your reverse proxy sets and overwrites the X-Forwarded-* headers

View File

@@ -0,0 +1,14 @@
prefix: null
keycloakDeployment:
numInstances: 1
hostname: sso.domain.net
vendor: postgres
dbHost: keycloak-db-rw
dbPort: 5432
usernameSecret:
name: keycloak-db-app
key: user
passwordSecret:
name: keycloak-db-app
key: password
database: app

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,6 @@
apiVersion: v2
name: keycloak-operator
description: A Helm chart for the Keycloak operator
type: application
version: 0.1.0
appVersion: "26.0.5"

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "keycloak-operator.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "keycloak-operator.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "keycloak-operator.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "keycloak-operator.labels" -}}
helm.sh/chart: {{ include "keycloak-operator.chart" . }}
{{ include "keycloak-operator.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "keycloak-operator.selectorLabels" -}}
app.kubernetes.io/name: {{ include "keycloak-operator.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "keycloak-operator.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "keycloak-operator.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,15 @@
apiVersion: batch/v1
kind: Job
metadata:
name: keycloak-crd-job
spec:
template:
spec:
containers:
- name: crd-fetcher
image: bitnami/kubectl:latest # Use Bitnami's kubectl image
command:
- "sh"
- "-c"
- "wget -qO- {{ .Values.baseURL }}/{{ .Release.appVersion }}/kubernetes/keycloaks.k8s.keycloak.org-v1.yml | kubectl apply -f -"
restartPolicy: OnFailure

View File

@@ -0,0 +1,17 @@
apiVersion: batch/v1
kind: Job
metadata:
name: keycloakoperator-job
annotations:
"helm.sh/hook": post-install
spec:
template:
spec:
containers:
- name: crd-fetcher
image: bitnami/kubectl:latest # Use Bitnami's kubectl image
command:
- "sh"
- "-c"
- "wget -qO- {{ .Values.baseURL }}/{{ .Release.appVersion }}/kubernetes/kubernetes.yml | kubectl apply -f -"
restartPolicy: OnFailure

View File

@@ -0,0 +1,15 @@
apiVersion: batch/v1
kind: Job
metadata:
name: keycloakrealmimports-crd-job
spec:
template:
spec:
containers:
- name: crd-fetcher
image: bitnami/kubectl:latest # Use Bitnami's kubectl image
command:
- "sh"
- "-c"
- "wget -qO- {{ .Values.baseURL }}/{{ .Release.appVersion }}/kubernetes/keycloakrealmimports.k8s.keycloak.org-v1.yml | kubectl apply -f -"
restartPolicy: OnFailure

View File

@@ -0,0 +1 @@
baseURL: "https://raw.githubusercontent.com/keycloak/keycloak-k8s-resources"

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: keycloak-postinstall
description: A Helm chart for after deploying keycloak - mainly ingress
type: application
version: 0.1.0

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "keycloak-postinstall.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "keycloak-postinstall.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "keycloak-postinstall.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "keycloak-postinstall.labels" -}}
helm.sh/chart: {{ include "keycloak-postinstall.chart" . }}
{{ include "keycloak-postinstall.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "keycloak-postinstall.selectorLabels" -}}
app.kubernetes.io/name: {{ include "keycloak-postinstall.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "keycloak-postinstall.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "keycloak-postinstall.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,16 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ .Values.prefix }}ts-keycloak
annotations:
tailscale.com/funnel: "true"
spec:
defaultBackend:
service:
name: linode-keycloak-service
port:
number: 8080
ingressClassName: tailscale
tls:
- hosts:
- {{ .Values.tailscaleIngresses.keycloakHostname }}

View File

@@ -0,0 +1,3 @@
prefix: null
tailscaleIngresses:
keycloakHostname: sso

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: keycloak-requirements
description: A Helm chart for deploying the DB used by keycloak
type: application
version: 0.1.1

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "keycloak-requirements.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "keycloak-requirements.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "keycloak-requirements.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "keycloak-requirements.labels" -}}
helm.sh/chart: {{ include "keycloak-requirements.chart" . }}
{{ include "keycloak-requirements.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "keycloak-requirements.selectorLabels" -}}
app.kubernetes.io/name: {{ include "keycloak-requirements.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "keycloak-requirements.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "keycloak-requirements.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,9 @@
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: {{ .Values.prefix }}keycloak-db
spec:
instances: {{ .Values.dbCluster.numInstances }}
storage:
size: {{ .Values.dbCluster.size }}

View File

@@ -0,0 +1,4 @@
prefix: null
dbCluster:
size: 1Gi
numInstances: 3

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: nextcloud-syncthing-argocd-apps
description: A Helm chart to deploy Nextcloud and Syncthing using a common data folder
type: application
version: 0.1.0

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "nextcloud-syncthing-argocd-apps.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "nextcloud-syncthing-argocd-apps.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "nextcloud-syncthing-argocd-apps.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "nextcloud-syncthing-argocd-apps.labels" -}}
helm.sh/chart: {{ include "nextcloud-syncthing-argocd-apps.chart" . }}
{{ include "nextcloud-syncthing-argocd-apps.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "nextcloud-syncthing-argocd-apps.selectorLabels" -}}
app.kubernetes.io/name: {{ include "nextcloud-syncthing-argocd-apps.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "nextcloud-syncthing-argocd-apps.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "nextcloud-syncthing-argocd-apps.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,31 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nc-syncthing-postinstall
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "1"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: {{ .Values.argocd.postinstall.repoURL }}
targetRevision: {{ .Values.argocd.postinstall.targetRevision }}
path: {{ .Values.argocd.postinstall.path }}
helm:
releaseName: nc-syncthing-postinstall
valuesObject:
tailscaleIngresses:
ncHostname: {{ .Values.tailscaleIngresses.ncHostname }}
syncthingHostname: {{ .Values.tailscaleIngresses.syncthingHostname }}
destination:
server: {{ .Values.destination.server }}
namespace: {{ .Values.destination.namespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true

View File

@@ -0,0 +1,134 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nextcloud-main-chart
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "0"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "https://nextcloud.github.io/helm"
chart: nextcloud
targetRevision: 6.x
helm:
releaseName: nextcloud
valuesObject:
# image:
# flavor: fpm
replicaCount: {{ .Values.nextcloud.replicaCount }}
ingress:
enabled: false
# className: nginx
# annotations:
# cert-manager.io/cluster-issuer: letsencrypt
# nginx.ingress.kubernetes.io/server-snippet: |-
# server_tokens off;
# proxy_hide_header X-Powered-By;
# rewrite ^/.well-known/webfinger /index.php/.well-known/webfinger last;
# rewrite ^/.well-known/nodeinfo /index.php/.well-known/nodeinfo last;
# rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
# rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json;
# location = /.well-known/carddav {
# return 301 $scheme://$host/remote.php/dav;
# }
# location = /.well-known/caldav {
# return 301 $scheme://$host/remote.php/dav;
# }
# location = /robots.txt {
# allow all;
# log_not_found off;
# access_log off;
# }
# location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
# deny all;
# }
# location ~ ^/(?:autotest|occ|issue|indie|db_|console) {
# deny all;
# }
# nginx.ingress.kubernetes.io/enable-cors: "true"
# nginx.ingress.kubernetes.io/cors-allow-headers: "X-Forwarded-For"
# tls:
# - hosts:
# - {{ .Values.nextcloud.url }}
# secretName: nextcloud-cert
nextcloud:
host: {{ .Values.nextcloud.url }}
existingSecret:
enabled: true
secretName: nextcloud-user
usernameKey: nc-admin-username
passwordKey: nc-admin-password
trustedDomains: {{ .Values.nextcloud.trustedDomains }}
nextcloud:
configs:
previews.config.php: |-
<?php
$CONFIG = array (
'enable_previews' => true,
'enabledPreviewProviders' => array (
'OC\Preview\Movie',
'OC\Preview\PNG',
'OC\Preview\JPEG',
'OC\Preview\GIF',
'OC\Preview\BMP',
'OC\Preview\XBitmap',
'OC\Preview\MP3',
'OC\Preview\MP4',
'OC\Preview\TXT',
'OC\Preview\MarkDown',
'OC\Preview\PDF'
),
);
proxy.config.php: |-
<?php
$CONFIG = array (
'trusted_proxies' => array(
0 => '127.0.0.1',
1 => '10.0.0.0/8',
),
'forwarded_for_headers' => array('HTTP_X_FORWARDED_FOR'),
);
# extraInitContainers - might be useful to make sure the LUKS secret is present
# nginx:
# enabled: true
redis:
enabled: true
auth:
enabled: false
cronjob:
enabled: true
internalDatabase:
enabled: false
externalDatabase:
enabled: true
type: postgresql
host: "nextcloud-db-rw:5432"
existingSecret:
enabled: true
secretName: nextcloud-db-app
usernameKey: user
passwordKey: password
databaseKey: dbname
persistence:
enabled: true
existingClaim: {{ .Values.nextcloud.configPvc.name }}
nextcloudData:
enabled: true
existingClaim: {{ .Values.dataPvc.name }}
livenessProbe:
enabled: false
readinessProbe:
enabled: false
destination:
server: {{ .Values.destination.server }}
namespace: {{ .Values.destination.namespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true

View File

@@ -0,0 +1,49 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nc-syncthing-requirements
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "-1"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "https://git.blarre.net/thomas/helm-charts.git"
targetRevision: HEAD
path: nextcloud-syncthing-requirements
helm:
releaseName: nc-syncthing-requirements
valuesObject:
mainNamespace: {{ .Values.destination.namespace }}
nextcloud:
enable: {{ .Values.nextcloud.enable }}
dbCluster:
numInstances: {{ .Values.nextcloud.dbCluster.numInstances }}
size: {{ .Values.nextcloud.dbCluster.size }}
configPvc:
name: {{ .Values.nextcloud.configPvc.name }}
storageClassName: {{ .Values.nextcloud.configPvc.storageClassName }}
size: {{ .Values.nextcloud.configPvc.size }}
syncthing:
enable: {{ .Values.syncthing.enable }}
configPvc:
name: {{ .Values.syncthing.configPvc.name }}
storageClassName: {{ .Values.syncthing.configPvc.storageClassName }}
size: {{ .Values.syncthing.configPvc.size }}
dataPvc:
name: {{ .Values.dataPvc.name }}
createEncryptedPvc: {{ .Values.dataPvc.createEncryptedPvc }}
storageClassName: {{ .Values.dataPvc.storageClassName }}
size: {{ .Values.dataPvc.size }}
destination:
server: {{ .Values.destination.server }}
namespace: {{ .Values.destination.namespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true

View File

@@ -0,0 +1,40 @@
argocd:
namespace: argocd
project: default
postinstall:
repoURL: "https://git.blarre.net/thomas/helm-charts.git"
targetRevision: HEAD
path: nextcloud-syncthing-postinstall
destination:
server: https://kubernetes.default.svc
namespace: nextcloud
nextcloud:
enable: true
dbCluster:
numInstances: 3
size: 4Gi
configPvc:
name: nextcloud-config-pvc
storageClassName: default
size: 1Gi
replicaCount: 1
url: nextcloud.domain.net
trustedDomains: nextcloud.domain.net office.domain.net
syncthing:
enable: true
configPvc:
storageClassName: default
size: 100Mi
dataPvc:
name: data-pvc
createEncryptedPvc: true
storageClassName: linode-block-storage-retain-luks
size: 40Gi
tailscaleIngresses:
ncHostname: nextcloud
syncthingHostname: syncthing

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: nextcloud-syncthing-postinstall
description: A Helm chart for deploying the nc and syncthing ingresses
type: application
version: 0.1.0

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "nextcloud-syncthing-postinstall.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "nextcloud-syncthing-postinstall.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "nextcloud-syncthing-postinstall.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "nextcloud-syncthing-postinstall.labels" -}}
helm.sh/chart: {{ include "nextcloud-syncthing-postinstall.chart" . }}
{{ include "nextcloud-syncthing-postinstall.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "nextcloud-syncthing-postinstall.selectorLabels" -}}
app.kubernetes.io/name: {{ include "nextcloud-syncthing-postinstall.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "nextcloud-syncthing-postinstall.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "nextcloud-syncthing-postinstall.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,16 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ts-nextcloud
annotations:
tailscale.com/funnel: "true"
spec:
defaultBackend:
service:
name: nextcloud
port:
name: http
ingressClassName: tailscale
tls:
- hosts:
- {{ .Values.tailscaleIngresses.ncHostname }}

View File

@@ -0,0 +1,3 @@
tailscaleIngresses:
ncHostname: nextcloud
syncthingHostname: syncthing

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: nextcloud-syncthing-requirements
description: A Helm chart for deploying the database and the pvcs for Nextcloud and Syncthing
type: application
version: 0.1.0

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "nextcloud-syncthing-requirements.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "nextcloud-syncthing-requirements.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "nextcloud-syncthing-requirements.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "nextcloud-syncthing-requirements.labels" -}}
helm.sh/chart: {{ include "nextcloud-syncthing-requirements.chart" . }}
{{ include "nextcloud-syncthing-requirements.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "nextcloud-syncthing-requirements.selectorLabels" -}}
app.kubernetes.io/name: {{ include "nextcloud-syncthing-requirements.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "nextcloud-syncthing-requirements.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "nextcloud-syncthing-requirements.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,10 @@
{{- if .Values.nextcloud.enable -}}
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: nextcloud-db
spec:
instances: {{ .Values.nextcloud.dbCluster.numInstances }}
storage:
size: {{ .Values.nextcloud.dbCluster.size }}
{{- end }}

View File

@@ -0,0 +1,16 @@
{{- if .Values.dataPvc.createEncryptedPvc -}}
allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: linode-block-storage-retain-luks
namespace: kube-system
provisioner: linodebs.csi.linode.com
reclaimPolicy: Retain
parameters:
linodebs.csi.linode.com/luks-encrypted: "true"
linodebs.csi.linode.com/luks-cipher: "aes-xts-plain64"
linodebs.csi.linode.com/luks-key-size: "512"
csi.storage.k8s.io/node-stage-secret-namespace: {{ .Values.mainNamespace }}
csi.storage.k8s.io/node-stage-secret-name: nc-syncthing-data-luks-key
{{- end }}

View File

@@ -0,0 +1,11 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Values.dataPvc.name }}
spec:
storageClassName: {{ .Values.dataPvc.storageClassName }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.dataPvc.size }}

View File

@@ -0,0 +1,13 @@
{{- if .Values.nextcloud.enable -}}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Values.nextcloud.configPvc.name }}
spec:
storageClassName: {{ .Values.nextcloud.configPvc.storageClassName }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.nextcloud.configPvc.size }}
{{- end }}

View File

@@ -0,0 +1,13 @@
{{- if .Values.syncthing.enable -}}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Values.syncthing.configPvc.name }}
spec:
storageClassName: {{ .Values.syncthing.configPvc.storageClassName }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.syncthing.configPvc.size }}
{{- end }}

View File

@@ -0,0 +1,24 @@
mainNamespace: nextcloud
nextcloud:
enable: true
dbCluster:
numInstances: 3
size: 4Gi
configPvc:
name: nextcloud-config-pvc
storageClassName: default
size: 1Gi
syncthing:
enable: true
configPvc:
name: syncthing-config-pvc
storageClassName: default
size: 100Mi
dataPvc:
name: data-pvc
createEncryptedPvc: true
storageClassName: linode-block-storage-retain-luks
size: 40Gi

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: odoo-argocd-apps
description: A Helm chart for deploying the requirements, main charts and postinstall as ArgoCD apps for Odoo
type: application
version: 0.1.0

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "odoo-argocd-apps.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "odoo-argocd-apps.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "odoo-argocd-apps.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "odoo-argocd-apps.labels" -}}
helm.sh/chart: {{ include "odoo-argocd-apps.chart" . }}
{{ include "odoo-argocd-apps.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "odoo-argocd-apps.selectorLabels" -}}
app.kubernetes.io/name: {{ include "odoo-argocd-apps.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "odoo-argocd-apps.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "odoo-argocd-apps.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,43 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: odoo-chart
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "0"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: registry-1.docker.io/bitnamicharts
chart: odoo
targetRevision: 28.x
helm:
releaseName: odoo
valuesObject:
odooEmail: {{ .Values.odoo.odooEmail }}
replicaCount: {{ .Values.odoo.replicaCount }}
resourcesPreset: {{ .Values.odoo.resourcesPreset }}
persistence:
existingClaim: {{ .Values.odoo.dataPvc.name }}
postgresql:
enabled: false
externalDatabase:
host: odoo-db-rw
port: 5432
user: app
database: app
create: false
existingSecret: odoo-db-app
existingSecretPasswordKey: password
destination:
server: {{ .Values.destination.server }}
namespace: {{ .Values.destination.namespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true

View File

@@ -0,0 +1,30 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: odoo-postinstall
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "1"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: {{ .Values.argocd.postinstall.repoURL }}
targetRevision: {{ .Values.argocd.postinstall.targetRevision }}
path: {{ .Values.argocd.postinstall.path }}
helm:
releaseName: odoo-postinstall
valuesObject:
tailscaleIngresses:
odooHostname: {{ .Values.tailscaleIngresses.odooHostname }}
destination:
server: {{ .Values.destination.server }}
namespace: {{ .Values.destination.namespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true

View File

@@ -0,0 +1,36 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: odoo-requirements
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "-1"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: {{ .Values.argocd.requirements.repoURL }}
targetRevision: {{ .Values.argocd.requirements.targetRevision }}
path: {{ .Values.argocd.requirements.path }}
helm:
releaseName: odoo-requirements
valuesObject:
odoo:
dbCluster:
numInstances: {{ .Values.odoo.dbCluster.numInstances }}
size: {{ .Values.odoo.dbCluster.size }}
dataPvc:
name: {{ .Values.odoo.dataPvc.name }}
storageClassName: {{ .Values.odoo.dataPvc.storageClassName }}
size: {{ .Values.odoo.dataPvc.size }}
destination:
server: {{ .Values.destination.server }}
namespace: {{ .Values.destination.namespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true

View File

@@ -0,0 +1,30 @@
argocd:
namespace: argocd
project: default
requirements:
repoURL: "https://git.blarre.net/thomas/helm-charts.git"
targetRevision: HEAD
path: odoo-requirements
postinstall:
repoURL: "https://git.blarre.net/thomas/helm-charts.git"
targetRevision: HEAD
path: odoo-postinstall
destination:
server: "https://kubernetes.default.svc"
namespace: odoo
odoo:
dbCluster:
numInstances: 3
size: 10Gi
dataPvc:
name: odoo-data
storageClassName: ''
size: 40Gi
odooEmail: "admin@domain.net"
resourcesPreset: "large"
replicaCount: 1
tailscaleIngresses:
odooHostname: odoo

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: odoo-postinstall
description: A Helm chart for deploying the postinall stuff for odoo, mainly the ingress
type: application
version: 0.1.0

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "odoo-postinstall.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "odoo-postinstall.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "odoo-postinstall.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "odoo-postinstall.labels" -}}
helm.sh/chart: {{ include "odoo-postinstall.chart" . }}
{{ include "odoo-postinstall.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "odoo-postinstall.selectorLabels" -}}
app.kubernetes.io/name: {{ include "odoo-postinstall.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "odoo-postinstall.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "odoo-postinstall.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,16 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ts-odoo
annotations:
tailscale.com/funnel: "true"
spec:
defaultBackend:
service:
name: odoo
port:
name: http
ingressClassName: tailscale
tls:
- hosts:
- {{ .Values.tailscaleIngresses.odooHostname }}

View File

@@ -0,0 +1,2 @@
tailcaleIngresses:
odooHostname: odoo

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: odoo-requirements
description: A Helm chart for the requirements for Odoo
type: application
version: 0.1.0

View File

@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "odoo-requirements.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "odoo-requirements.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "odoo-requirements.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "odoo-requirements.labels" -}}
helm.sh/chart: {{ include "odoo-requirements.chart" . }}
{{ include "odoo-requirements.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "odoo-requirements.selectorLabels" -}}
app.kubernetes.io/name: {{ include "odoo-requirements.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "odoo-requirements.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "odoo-requirements.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,8 @@
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: odoo-db
spec:
instances: {{ .Values.odoo.dbCluster.numInstances }}
storage:
size: {{ .Values.odoo.dbCluster.size }}

View File

@@ -0,0 +1,11 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Values.odoo.dataPvc.name }}
spec:
storageClassName: {{ .Values.odoo.dataPvc.storageClassName }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.odoo.dataPvc.size }}

View File

@@ -0,0 +1,8 @@
odoo:
dbCluster:
numInstances: 3
size: 10Gi
dataPvc:
name: odoo-data
storageClassName: ''
size: 40Gi

View File

@@ -0,0 +1,56 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: filebrowser
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "0"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "tccr.io/truecharts"
chart: filebrowser
targetRevision: 11.x
helm:
releaseName: filebrowser
valuesObject:
persistence:
config:
enabled: true
mountPath: /config
type: pvc
namespace: {{ .Values.mainNamespace }}
accessModes: ReadWriteOnce
size: 100Mi
storageClass: {{ .Values.generalConfigStorageClass }}
database:
enabled: true
mountPath: /database
type: pvc
namespace: {{ .Values.mainNamespace }}
accessModes: ReadWriteOnce
size: 100Mi
storageClass: {{ .Values.generalConfigStorageClass }}
data:
enabled: true
mountPath: /data
type: pvc
namespace: {{ .Values.mainNamespace }}
existingClaim: thomflix-media
destination:
server: {{ .Values.mainDestination }}
namespace: {{ .Values.mainNamespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true
ignoreDifferences:
- group: apps
kind: Deployment
jsonPointers:
- /spec/template/spec/hostUsers

View File

@@ -0,0 +1,42 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: flaresolveer
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "0"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "tccr.io/truecharts"
chart: flaresolverr
targetRevision: 15.x
helm:
releaseName: flaresolverr
valuesObject:
persistence:
config:
enabled: true
mountPath: /config
type: pvc
namespace: {{ .Values.mainNamespace }}
accessModes: ReadWriteOnce
storageClass: {{ .Values.generalConfigStorageClass }}
size: 100Mi
destination:
server: {{ .Values.mainDestination }}
namespace: {{ .Values.mainNamespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true
ignoreDifferences:
- group: apps
kind: Deployment
jsonPointers:
- /spec/template/spec/hostUsers

View File

@@ -0,0 +1,42 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: jackett
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "0"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "tccr.io/truecharts"
chart: jackett
targetRevision: 23.x
helm:
releaseName: jackett
valuesObject:
persistence:
config:
enabled: true
mountPath: "/config"
type: pvc
storageClass: {{ .Values.generalConfigStorageClass }}
namespace: {{ .Values.mainNamespace }}
accessModes: ReadWriteOnce
size: 100Mi
destination:
server: {{ .Values.mainDestination }}
namespace: {{ .Values.mainNamespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true
ignoreDifferences:
- group: apps
kind: Deployment
jsonPointers:
- /spec/template/spec/hostUsers

View File

@@ -0,0 +1,66 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: jellyfin
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "0"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "tccr.io/truecharts"
chart: jellyfin
targetRevision: 20.x
helm:
releaseName: jellyfin
valuesObject:
persistence:
config:
enabled: true
mountPath: "/config"
type: pvc
storageClass: {{ .Values.generalConfigStorageClass }}
size: 8Gi
accessModes: ReadWriteOnce
namespace: {{ .Values.mainNamespace }}
cache:
enabled: true
mountPath: "/cache"
type: pvc
storageClass: {{ .Values.generalConfigStorageClass }}
size: 8Gi
accessModes: ReadWriteOnce
namespace: {{ .Values.mainNamespace }}
transcode:
enabled: true
mountPath: "/config/transcodes"
type: pvc
storageClass: {{ .Values.generalConfigStorageClass }}
size: 1Gi
accessModes: ReadWriteOnce
namespace: {{ .Values.mainNamespace }}
media:
enabled: true
mountPath: "/data/media"
type: pvc
existingClaim: thomflix-media
namespace: {{ .Values.mainNamespace }}
subPath: "data/media"
chartContext.appUrl: {{ .Values.jellyfinURL }}
destination:
server: {{ .Values.mainDestination }}
namespace: {{ .Values.mainNamespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true
ignoreDifferences:
- group: apps
kind: Deployment
jsonPointers:
- /spec/template/spec/hostUsers

View File

@@ -0,0 +1,42 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: jellyseerr
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "0"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "tccr.io/truecharts"
chart: jellyseerr
targetRevision: 12.x
helm:
releaseName: jellyseer
valuesObject:
persistence:
config:
enabled: true
mountPath: "/app/config"
type: pvc
storageClass: {{ .Values.generalConfigStorageClass }}
namespace: {{ .Values.mainNamespace }}
size: 100Mi
accessModes: ReadWriteOnce
destination:
server: {{ .Values.mainDestination }}
namespace: {{ .Values.mainNamespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true
ignoreDifferences:
- group: apps
kind: Deployment
jsonPointers:
- /spec/template/spec/hostUsers

View File

@@ -0,0 +1,58 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: radarr
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "0"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "tccr.io/truecharts"
chart: radarr
targetRevision: 23.x
helm:
releaseName: radarr
valuesObject:
persistence:
config:
type: pvc
storageClass: {{ .Values.generalConfigStorageClass }}
namespace: {{ .Values.mainNamespace }}
accessModes: ReadWriteOnce
size: 512Mi
enabled: true
targetSelector:
main:
main:
mountPath: /config
data:
enabled: true
type: pvc
existingClaim: thomflix-media
namespace: {{ .Values.mainNamespace }}
targetSelector:
main:
main:
subPath: "data"
mountPath: "/data"
metrics:
main:
enabled: false
destination:
server: {{ .Values.mainDestination }}
namespace: {{ .Values.mainNamespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true
ignoreDifferences:
- group: apps
kind: Deployment
jsonPointers:
- /spec/template/spec/hostUsers

View File

@@ -0,0 +1,58 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: sonarr
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "0"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "tccr.io/truecharts"
chart: sonarr
targetRevision: 23.x
helm:
releaseName: sonarr
valuesObject:
persistence:
config:
type: pvc
storageClass: {{ .Values.generalConfigStorageClass }}
namespace: {{ .Values.mainNamespace }}
accessModes: ReadWriteOnce
size: 512Mi
enabled: true
targetSelector:
main:
main:
mountPath: /config
data:
enabled: true
type: pvc
existingClaim: thomflix-media
namespace: {{ .Values.mainNamespace }}
targetSelector:
main:
main:
subPath: "data"
mountPath: "/data"
metrics:
main:
enabled: false
destination:
server: {{ .Values.mainDestination }}
namespace: {{ .Values.mainNamespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true
ignoreDifferences:
- group: apps
kind: Deployment
jsonPointers:
- /spec/template/spec/hostUsers

View File

@@ -0,0 +1,30 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: thomflix-postinstall
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "1"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
repoURL: "https://git.blarre.net/thomas/helm-charts.git"
targetRevision: HEAD
path: thomflix-postinstall
helm:
releaseName: thomflix-postinstall
valuesObject:
jellyfinURL: {{ .Values.jellyfinURL }}
jellyseerrURL: {{ .Values.jellyseerrURL }}
destination:
server: {{ .Values.mainDestination }}
namespace: {{ .Values.mainNamespace }}
syncPolicy:
automated:
prune: true # Automatically remove resources no longer in the repo
selfHeal: true # Automatically self-heal when drift is detected
syncOptions:
- ApplyOutOfSyncOnly=true
- ServerSideApply=true
- CreateNamespace=true

View File

@@ -5,6 +5,7 @@ metadata:
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "-1"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:

View File

@@ -5,6 +5,7 @@ metadata:
namespace: {{ .Values.argocd.namespace }}
annotations:
argocd.argoproj.io/sync-wave: "0"
notifications.argoproj.io/subscribe.on-sync-succeeded.telegram: "-1002270587578"
spec:
project: {{ .Values.argocd.project }}
source:
@@ -80,7 +81,7 @@ spec:
# TRANSMISSION__PEER_ID_TTL_HOURS: 6
# TRANSMISSION__PEER_LIMIT_GLOBAL: 200
# TRANSMISSION__PEER_LIMIT_PER_TORRENT: 50
# TRANSMISSION__PEER_PORT: "{{ .Values.service.torrent.ports.torrent.port }}"
TRANSMISSION__PEER_PORT: "{{ .Values.transmission.torrentPort }}"
# TRANSMISSION__PEER_PORT_RANDOM_HIGH: 65535
# TRANSMISSION__PEER_PORT_RANDOM_LOW: 49152
# TRANSMISSION__PEER_PORT_RANDOM_ON_START: false
@@ -98,7 +99,7 @@ spec:
# TRANSMISSION__RPC_ENABLED: true
# TRANSMISSION__RPC_HOST_WHITELIST: ""
# TRANSMISSION__RPC_HOST_WHITELIST_ENABLED: false
# TRANSMISSION__RPC_PORT: "{{ .Values.service.main.ports.main.port }}"
TRANSMISSION__RPC_PORT: "{{ .Values.transmission.rpcPort }}"
# TRANSMISSION__RPC_URL: "/transmission/"
# TRANSMISSION__RPC_WHITELIST: ""
# TRANSMISSION__RPC_WHITELIST_ENABLED: false

View File

@@ -10,3 +10,10 @@ mediaLibrary:
storageSize: 1Ti
generalConfigStorageClass: default
transmission:
torrentPort: 51414
rpcPort: 10109
jellyfinURL: "jellyfin.domain.net"
jellyseerrURL: "jellyseerr.domain.net"

View File

@@ -1,24 +1,5 @@
apiVersion: v2
name: thomflix-postinstall
description: A Helm chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
description: A Helm chart for the ingresses of Thomflix
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.16.0"

View File

@@ -1,22 +0,0 @@
1. Get the application URL by running these commands:
{{- if .Values.ingress.enabled }}
{{- range $host := .Values.ingress.hosts }}
{{- range .paths }}
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
{{- end }}
{{- end }}
{{- else if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "thomflix-postinstall.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch its status by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "thomflix-postinstall.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "thomflix-postinstall.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }}
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "thomflix-postinstall.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT
{{- end }}

View File

@@ -1,68 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "thomflix-postinstall.fullname" . }}
labels:
{{- include "thomflix-postinstall.labels" . | nindent 4 }}
spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }}
{{- end }}
selector:
matchLabels:
{{- include "thomflix-postinstall.selectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "thomflix-postinstall.labels" . | nindent 8 }}
{{- with .Values.podLabels }}
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "thomflix-postinstall.serviceAccountName" . }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: {{ .Values.service.port }}
protocol: TCP
livenessProbe:
{{- toYaml .Values.livenessProbe | nindent 12 }}
readinessProbe:
{{- toYaml .Values.readinessProbe | nindent 12 }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.volumeMounts }}
volumeMounts:
{{- toYaml . | nindent 12 }}
{{- end }}
{{- with .Values.volumes }}
volumes:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View File

@@ -0,0 +1,14 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: filebrowser-thomflix
spec:
defaultBackend:
service:
name: filebrowser
port:
number: 10187
ingressClassName: tailscale
tls:
- hosts:
- {{ .Values.tailscaleIngresses.filebrowserHostname }}

View File

@@ -1,32 +0,0 @@
{{- if .Values.autoscaling.enabled }}
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "thomflix-postinstall.fullname" . }}
labels:
{{- include "thomflix-postinstall.labels" . | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ include "thomflix-postinstall.fullname" . }}
minReplicas: {{ .Values.autoscaling.minReplicas }}
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
metrics:
{{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
{{- end }}
{{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
{{- end }}
{{- end }}

View File

@@ -1,43 +0,0 @@
{{- if .Values.ingress.enabled -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "thomflix-postinstall.fullname" . }}
labels:
{{- include "thomflix-postinstall.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.ingress.className }}
ingressClassName: {{ . }}
{{- end }}
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
{{- with .pathType }}
pathType: {{ . }}
{{- end }}
backend:
service:
name: {{ include "thomflix-postinstall.fullname" $ }}
port:
number: {{ $.Values.service.port }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -0,0 +1,14 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jackett-thomflix
spec:
defaultBackend:
service:
name: jackett
port:
number: 9117
ingressClassName: tailscale
tls:
- hosts:
- {{ .Values.tailscaleIngresses.jackettHostname }}

View File

@@ -0,0 +1,23 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt
name: jellyfin-ingress
namespace: {{ .Values.mainNamespace }}
spec:
rules:
- host: {{ .Values.jellyfinURL }}
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: jellyfin
port:
number: 8096
tls:
- hosts:
- {{ .Values.jellyfinURL }}
secretName: jellyfin-cert

View File

@@ -0,0 +1,23 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt
name: jellyseerr-ingress
namespace: {{ .Values.mainNamespace }}
spec:
rules:
- host: {{ .Values.jellyseerrURL }}
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: jellyseer-jellyseerr
port:
number: 10241
tls:
- hosts:
- {{ .Values.jellyseerrURL }}
secretName: thomflix-cert

View File

@@ -0,0 +1,16 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: radarr-thomflix
annotations:
tailscale.com/tags: "tag:k8s,tag:thomflix"
spec:
defaultBackend:
service:
name: radarr
port:
number: 7878
ingressClassName: tailscale
tls:
- hosts:
- {{ .Values.tailscaleIngresses.radarrHostname }}

View File

@@ -1,15 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "thomflix-postinstall.fullname" . }}
labels:
{{- include "thomflix-postinstall.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "thomflix-postinstall.selectorLabels" . | nindent 4 }}

View File

@@ -1,13 +0,0 @@
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "thomflix-postinstall.serviceAccountName" . }}
labels:
{{- include "thomflix-postinstall.labels" . | nindent 4 }}
{{- with .Values.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
automountServiceAccountToken: {{ .Values.serviceAccount.automount }}
{{- end }}

View File

@@ -0,0 +1,16 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sonarr-thomflix
annotations:
tailscale.com/tags: "tag:k8s,tag:thomflix"
spec:
defaultBackend:
service:
name: sonarr
port:
number: 8989
ingressClassName: tailscale
tls:
- hosts:
- {{ .Values.tailscaleIngresses.sonarrHostname }}

View File

@@ -1,15 +0,0 @@
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "thomflix-postinstall.fullname" . }}-test-connection"
labels:
{{- include "thomflix-postinstall.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": test
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['{{ include "thomflix-postinstall.fullname" . }}:{{ .Values.service.port }}']
restartPolicy: Never

View File

@@ -1,123 +1,8 @@
# Default values for thomflix-postinstall.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
# This will set the replicaset count more information can be found here: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
replicaCount: 1
# This sets the container image more information can be found here: https://kubernetes.io/docs/concepts/containers/images/
image:
repository: nginx
# This sets the pull policy for images.
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: ""
# This is for the secretes for pulling an image from a private repository more information can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
imagePullSecrets: []
# This is to override the chart name.
nameOverride: ""
fullnameOverride: ""
# This section builds out the service account more information can be found here: https://kubernetes.io/docs/concepts/security/service-accounts/
serviceAccount:
# Specifies whether a service account should be created
create: true
# Automatically mount a ServiceAccount's API credentials?
automount: true
# Annotations to add to the service account
annotations: {}
# The name of the service account to use.
# If not set and create is true, a name is generated using the fullname template
name: ""
# This is for setting Kubernetes Annotations to a Pod.
# For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
podAnnotations: {}
# This is for setting Kubernetes Labels to a Pod.
# For more information checkout: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
podLabels: {}
podSecurityContext: {}
# fsGroup: 2000
securityContext: {}
# capabilities:
# drop:
# - ALL
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000
# This is for setting up a service more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/
service:
# This sets the service type more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
type: ClusterIP
# This sets the ports more information can be found here: https://kubernetes.io/docs/concepts/services-networking/service/#field-spec-ports
port: 80
# This block is for setting up the ingress for more information can be found here: https://kubernetes.io/docs/concepts/services-networking/ingress/
ingress:
enabled: false
className: ""
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: chart-example.local
paths:
- path: /
pathType: ImplementationSpecific
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
# This is to setup the liveness and readiness probes more information can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
livenessProbe:
httpGet:
path: /
port: http
readinessProbe:
httpGet:
path: /
port: http
# This section is for setting up autoscaling more information can be found here: https://kubernetes.io/docs/concepts/workloads/autoscaling/
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 100
targetCPUUtilizationPercentage: 80
# targetMemoryUtilizationPercentage: 80
# Additional volumes on the output Deployment definition.
volumes: []
# - name: foo
# secret:
# secretName: mysecret
# optional: false
# Additional volumeMounts on the output Deployment definition.
volumeMounts: []
# - name: foo
# mountPath: "/etc/foo"
# readOnly: true
nodeSelector: {}
tolerations: []
affinity: {}
tailscaleIngresses:
jackettHostname: thomflix-jackett
sonarrHostname: thomflix-sonarr
radarrHostname: thomflix-radarr
filebrowserHostname: thomflix-files
mainNamespace: thomflix
jellyfinURL: "jellyfin.domain.net"
jellyseerrURL: "jellyserr.domain.net"

View File

@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

View File

@@ -0,0 +1,5 @@
apiVersion: v2
name: uptime-kuma-argocd-apps
description: A Helm chart for deploying uptime kuma
type: application
version: 0.1.0

Some files were not shown because too many files have changed in this diff Show More