From 85307016b110d7cae64d41098def612c9867197c Mon Sep 17 00:00:00 2001 From: Matthieu LEMAIRE Date: Wed, 9 Apr 2025 17:48:20 +0200 Subject: [PATCH] Add Chart Helm Gitea --- .helmignore | 23 ++++++ Chart.yaml | 6 ++ README.md | 94 +++++++++++++++++++++ templates/NOTES.txt | 20 +++++ templates/_helpers.tpl | 45 ++++++++++ templates/gitea-deployment.yaml | 114 ++++++++++++++++++++++++++ templates/gitea-ingress.yaml | 30 +++++++ templates/gitea-pvc.yaml | 22 +++++ templates/gitea-service.yaml | 23 ++++++ templates/issuer.yaml | 16 ++++ templates/postgresql-secret.yaml | 14 ++++ templates/postgresql-service.yaml | 19 +++++ templates/postgresql-statefulset.yaml | 92 +++++++++++++++++++++ values.yaml | 73 +++++++++++++++++ 14 files changed, 591 insertions(+) create mode 100644 .helmignore create mode 100644 Chart.yaml create mode 100644 README.md create mode 100644 templates/NOTES.txt create mode 100644 templates/_helpers.tpl create mode 100644 templates/gitea-deployment.yaml create mode 100644 templates/gitea-ingress.yaml create mode 100644 templates/gitea-pvc.yaml create mode 100644 templates/gitea-service.yaml create mode 100644 templates/issuer.yaml create mode 100644 templates/postgresql-secret.yaml create mode 100644 templates/postgresql-service.yaml create mode 100644 templates/postgresql-statefulset.yaml create mode 100644 values.yaml diff --git a/.helmignore b/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/.helmignore @@ -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/ diff --git a/Chart.yaml b/Chart.yaml new file mode 100644 index 0000000..563f819 --- /dev/null +++ b/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: gitea +description: Un chart Helm simple pour déployer Gitea avec PostgreSQL. +type: application +version: 0.1.0 # Version de votre chart +appVersion: "1.23.6" # Version de Gitea que vous ciblez (vérifiez la dernière version stable) \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3df6162 --- /dev/null +++ b/README.md @@ -0,0 +1,94 @@ +# Chart Helm pour Gitea + +Ce dépôt contient un Chart Helm pour déployer [Gitea](https://gitea.io/), un service Git auto-hébergé simple et léger, sur un cluster Kubernetes. + +## Description + +Gitea offre une solution similaire à GitHub, GitLab ou Bitbucket, mais avec des besoins en ressources beaucoup plus faibles. Ce chart Helm facilite son déploiement et sa configuration dans un environnement Kubernetes. + +**Note:** Il s'agit d'un chart communautaire / personnel et non du chart officiel maintenu par l'équipe Gitea (s'il en existe un que vous n'utilisez pas). + +## Prérequis + +* Cluster Kubernetes (v1.19+ recommandé) +* [Helm](https://helm.sh/) v3.0+ installé et configuré +* `kubectl` configuré pour interagir avec votre cluster +* Un provisionneur de volumes persistants (StorageClass) si vous souhaitez activer la persistance des données (fortement recommandé). + +## Installation du Chart + +1. **Ajouter le dépôt Helm (si vous en hébergez un) :** + Remplacez `` par le nom que vous voulez donner à votre dépôt localement et `` par l'URL où votre chart est hébergé (par exemple, une page GitHub Pages). + + ```bash + helm repo add + helm repo update + ``` + + Si vous utilisez le chart directement depuis ce dépôt Git cloné, vous pouvez sauter cette étape. + +2. **Installer le Chart :** + Remplacez `` par le nom que vous souhaitez donner à cette instance de Gitea (par exemple `my-gitea`). + + * **Depuis le dépôt Git local :** + Naviguez jusqu'au répertoire où se trouve ce README.md. + + ```bash + # Installation simple dans le namespace 'default' + helm install . + + # Installation dans un namespace spécifique (recommandé) + helm install . --namespace gitea --create-namespace + + # Installation avec des valeurs personnalisées + helm install . -f mes-valeurs.yaml --namespace gitea --create-namespace + ``` + +Après l'installation, Gitea devrait être accessible via le Service Kubernetes créé (ClusterIP, NodePort, ou LoadBalancer) ou via l'Ingress si configuré. Utilisez `kubectl get svc,ing -n ` pour vérifier. + +## Configuration + +Les paramètres de configuration principaux sont disponibles dans le fichier `values.yaml`. Vous pouvez les surcharger en utilisant l'option `-f` lors de l'installation ou `--set` pour des valeurs spécifiques. + +Voici quelques paramètres clés : + +| Paramètre | Description | Défaut | +| :------------------------------- | :-------------------------------------------------------------------------- |:---------------------------| +| `image.repository` | Image Docker Gitea à utiliser | `gitea/gitea` | +| `image.tag` | Tag de l'image Gitea | `` | +| `service.type` | Type de service Kubernetes (ClusterIP, NodePort, LoadBalancer) | `ClusterIP` | +| `service.port` | Port HTTP du service | `3000` | +| `ingress.enabled` | Activer/désactiver la création d'une ressource Ingress | `true` | +| `ingress.className` | Classe Ingress à utiliser (si nécessaire, ex: `nginx`, `traefik`) | `""` | +| `ingress.hosts[0].host` | Nom d'hôte pour l'accès via Ingress (ex: `gitea.mondomaine.com`) | `chart-example.local` | +| `ingress.hosts[0].paths[0].path`| Chemin pour l'Ingress | `/` | +| `ingress.tls` | Configuration TLS pour l'Ingress (voir `values.yaml` pour la structure) | `[]` | +| `persistence.enabled` | Activer/désactiver la persistance des données Gitea | `true` | +| `persistence.storageClass` | StorageClass à utiliser pour le PVC (si `"-"`, utilise la classe par défaut) | `"-"` | +| `persistence.size` | Taille du volume persistant (ex: `10Gi`) | `10Gi` | +| `gitea.admin.username` | Nom d'utilisateur de l'administrateur initial Gitea | `gitea_admin` | +| `gitea.admin.password` | Mot de passe de l'administrateur initial Gitea ( **IMPORTANT:** à changer!) | `` | +| `gitea.config` | Permet de surcharger des clés de configuration `app.ini` de Gitea | `{}` | +| `database.type` | Type de base de données (`sqlite3`, `postgres`, `mysql`) | `postgresql` | +| `database.host` | Hôte de la base de données (si externe) | `""` | +| `database.name` | Nom de la base de données (si externe) | `gitea` | +| `database.user` | Utilisateur de la base de données (si externe) | `gitea` | +| `database.password` | Mot de passe de la base de données (si externe, utiliser un secret !) | `""` | +| `database.existingSecret` | Nom d'un secret Kubernetes existant contenant les identifiants DB | `""` | + +**Note sur la base de données :** Par défaut, le chart utilise PostgreSql avec les données stockées sur le volume persistant. Configurez les paramètres `database.*` en conséquence et assurez-vous que Gitea puisse y accéder depuis le cluster. + +Consultez le fichier `values.yaml` pour voir toutes les options de configuration disponibles. + +## Mise à jour + +Pour mettre à jour une release existante avec une nouvelle version du chart ou de nouvelles valeurs : + +```bash +# Mettre à jour le dépôt (si utilisé) +helm repo update + +# Mettre à jour la release +helm upgrade /gitea --namespace -f nouvelles-valeurs.yaml +# Ou depuis le dépôt local: +# helm upgrade . --namespace -f nouvelles-valeurs.yaml \ No newline at end of file diff --git a/templates/NOTES.txt b/templates/NOTES.txt new file mode 100644 index 0000000..3579a76 --- /dev/null +++ b/templates/NOTES.txt @@ -0,0 +1,20 @@ +1. Get the application URL by running these commands: +{{- if .Values.gitea.ingress.enabled }} +{{- range $host := .Values.gitea.ingress.hosts }} + http{{ if $.Values.gitea.ingress.tls }}s{{ end }}://{{ $host }} +{{- end }} +{{- else if contains "NodePort" .Values.gitea.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "gitea.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.gitea.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "gitea.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "gitea.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + echo http://$SERVICE_IP:{{ .Values.gitea.service.httpPort }} +{{- else if contains "ClusterIP" .Values.gitea.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "gitea.fullname" . }},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 }} diff --git a/templates/_helpers.tpl b/templates/_helpers.tpl new file mode 100644 index 0000000..be633d5 --- /dev/null +++ b/templates/_helpers.tpl @@ -0,0 +1,45 @@ +{{/* vim: set filetype=gotpl: */}} +{{- define "gitea.fullname" -}} +{{- printf "%s-%s" .Release.Name "gitea" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "postgresql.fullname" -}} +{{- printf "%s-%s" .Release.Name "postgresql" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* Labels communs */}} +{{- define "gitea.labels" -}} +helm.sh/chart: {{ printf "%s-%s" .Chart.Name .Chart.Version | quote }} +{{ include "gitea.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service | quote }} +{{- end -}} + +{{/* Labels sélecteurs pour Gitea */}} +{{- define "gitea.selectorLabels" -}} +app.kubernetes.io/name: gitea +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end -}} + +{{/* Labels sélecteurs pour PostgreSQL */}} +{{- define "postgresql.selectorLabels" -}} +app.kubernetes.io/name: postgresql +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end -}} + +{{/* Nom du Secret PostgreSQL */}} +{{- define "postgresql.secretName" -}} +{{ template "postgresql.fullname" . }} +{{- end -}} + +{{/* Nom du Service PostgreSQL */}} +{{- define "postgresql.serviceName" -}} +{{ template "postgresql.fullname" . }} +{{- end -}} + +{{/* Nom du PVC Gitea */}} +{{- define "gitea.pvcName" -}} +{{ template "gitea.fullname" . }}-data +{{- end -}} \ No newline at end of file diff --git a/templates/gitea-deployment.yaml b/templates/gitea-deployment.yaml new file mode 100644 index 0000000..0d57b59 --- /dev/null +++ b/templates/gitea-deployment.yaml @@ -0,0 +1,114 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "gitea.fullname" . }} + labels: + {{- include "gitea.labels" . | nindent 4 }} + app.kubernetes.io/component: application +spec: + replicas: {{ .Values.gitea.replicaCount }} + selector: + matchLabels: + {{- include "gitea.selectorLabels" . | nindent 6 }} + app.kubernetes.io/component: application + template: + metadata: + labels: + {{- include "gitea.selectorLabels" . | nindent 8 }} + app.kubernetes.io/component: application + spec: + containers: + - name: gitea + image: "{{ .Values.gitea.image.repository }}:{{ .Values.gitea.image.tag }}" + imagePullPolicy: {{ .Values.gitea.image.pullPolicy }} + ports: + - name: http + containerPort: {{ .Values.gitea.service.httpPort }} + protocol: TCP + - name: ssh + containerPort: {{ .Values.gitea.service.sshPort }} # Port SSH interne Gitea (par défaut 22, mais l'image l'expose souvent sur 2222 pour éviter conflit) + protocol: TCP # Vérifiez la doc de l'image Docker Gitea pour le port SSH interne exact si besoin + env: + # Configuration de base Gitea + - name: USER + value: git # L'utilisateur sous lequel Gitea tourne dans le conteneur (souvent 'git') + - name: GITEA__database__DB_TYPE + value: {{ .Values.gitea.config.database.DB_TYPE }} + {{- if .Values.postgresql.enabled }} + - name: GITEA__database__HOST + value: {{ template "postgresql.serviceName" . }}:{{ .Values.postgresql.service.port }} + - name: GITEA__database__NAME + valueFrom: + secretKeyRef: + name: {{ template "postgresql.secretName" . }} + key: database + - name: GITEA__database__USER + valueFrom: + secretKeyRef: + name: {{ template "postgresql.secretName" . }} + key: username + - name: GITEA__database__PASSWD + valueFrom: + secretKeyRef: + name: {{ template "postgresql.secretName" . }} + key: password + {{- else }} + # Si postgresql.enabled est false, vous devez fournir ces valeurs autrement (ex: via values.yaml ou un autre secret) + # - name: GITEA__database__HOST + # value: : + # - name: GITEA__database__NAME + # value: + # - name: GITEA__database__USER + # value: + # - name: GITEA__database__PASSWD + # valueFrom: + # secretKeyRef: + # name: + # key: password + {{- end }} + - name: GITEA__server__DOMAIN + value: {{ .Values.gitea.ingress.host }} + - name: GITEA__server__ROOT_URL + {{- if .Values.gitea.ingress.tls.enabled }} + value: "https://{{ .Values.gitea.ingress.host }}" + {{- else }} + value: "http://{{ .Values.gitea.ingress.host }}" + {{- end }} + - name: GITEA__server__SSH_DOMAIN + value: {{ .Values.gitea.ingress.host }} # Ou un domaine différent si SSH est exposé autrement + - name: GITEA__server__HTTP_PORT + value: "{{ .Values.gitea.service.httpPort }}" + - name: GITEA__server__SSH_PORT # Port sur lequel le serveur SSH Gitea écoute à l'intérieur du conteneur + value: "{{ .Values.gitea.service.sshPort }}" + # - name: GITEA__security__INSTALL_LOCK # Décommentez et mettez à true après la première config via l'UI + # value: "true" + # - name: GITEA__service__DISABLE_REGISTRATION # Décommentez pour désactiver l'enregistrement public + # value: "true" + # Ajoutez d'autres variables GITEA__
__ ici si nécessaire + {{- if .Values.gitea.persistence.enabled }} + volumeMounts: + - name: gitea-data + mountPath: {{ .Values.gitea.persistence.mountPath }} + {{- end }} + # Ajouter Liveness/Readiness Probes pour Gitea est une bonne pratique + livenessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 60 + periodSeconds: 10 + readinessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 10 + periodSeconds: 5 + volumes: + {{- if .Values.gitea.persistence.enabled }} + - name: gitea-data + persistentVolumeClaim: + claimName: {{ template "gitea.pvcName" . }} + {{- else }} + - name: gitea-data # Volume éphémère si persistance désactivée + emptyDir: {} + {{- end }} \ No newline at end of file diff --git a/templates/gitea-ingress.yaml b/templates/gitea-ingress.yaml new file mode 100644 index 0000000..b65047e --- /dev/null +++ b/templates/gitea-ingress.yaml @@ -0,0 +1,30 @@ +{{- if .Values.gitea.ingress.enabled }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ template "gitea.fullname" . }} + labels: + {{- include "gitea.labels" . | nindent 4 }} + {{- with .Values.gitea.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if .Values.gitea.ingress.tls.enabled }} + tls: + - hosts: + - {{ .Values.gitea.ingress.host | quote }} + secretName: {{ .Values.gitea.ingress.host | quote }} + {{- end }} + rules: + - host: {{ .Values.gitea.ingress.host | quote }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ template "gitea.fullname" . }} + port: + number: {{ .Values.gitea.service.httpPort }} +{{- end }} \ No newline at end of file diff --git a/templates/gitea-pvc.yaml b/templates/gitea-pvc.yaml new file mode 100644 index 0000000..b7a8e08 --- /dev/null +++ b/templates/gitea-pvc.yaml @@ -0,0 +1,22 @@ +{{- if .Values.gitea.persistence.enabled }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: {{ template "gitea.pvcName" . }} + labels: + {{- include "gitea.labels" . | nindent 4 }} + app.kubernetes.io/component: application-data +spec: + accessModes: + - ReadWriteOnce # Généralement suffisant pour Gitea + resources: + requests: + storage: {{ .Values.gitea.persistence.size }} + {{- if .Values.gitea.persistence.storageClass }} + {{- if (eq "-" .Values.gitea.persistence.storageClass) }} + storageClassName: "" + {{- else }} + storageClassName: "{{ .Values.gitea.persistence.storageClass }}" + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/templates/gitea-service.yaml b/templates/gitea-service.yaml new file mode 100644 index 0000000..3ca721b --- /dev/null +++ b/templates/gitea-service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "gitea.fullname" . }} + labels: + {{- include "gitea.labels" . | nindent 4 }} + app.kubernetes.io/component: application +spec: + type: {{ .Values.gitea.service.type }} + ports: + - port: {{ .Values.gitea.service.httpPort }} + targetPort: http + protocol: TCP + name: http + # Si vous voulez exposer SSH via un service (ex: LoadBalancer), ajoutez un port ici. + # Sinon, l'Ingress ne gère que HTTP/S. Pour SSH, une config différente est nécessaire (Service Type LoadBalancer sur le port SSH, ou NodePort) + # - port: 22 # Port externe pour SSH + # targetPort: ssh # Le nom du port dans le pod Gitea + # protocol: TCP + # name: ssh + selector: + {{- include "gitea.selectorLabels" . | nindent 4 }} + app.kubernetes.io/component: application \ No newline at end of file diff --git a/templates/issuer.yaml b/templates/issuer.yaml new file mode 100644 index 0000000..962a3d4 --- /dev/null +++ b/templates/issuer.yaml @@ -0,0 +1,16 @@ +--- +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: letsencrypt-issuer-gitea +spec: + acme: + server: https://acme-v02.api.letsencrypt.org/directory + email: matthieu.lmr@lm-imanager.com + privateKeySecretRef: + name: key-cert-gitea-tls + solvers: + - selector: {} + http01: + ingress: + class: nginx diff --git a/templates/postgresql-secret.yaml b/templates/postgresql-secret.yaml new file mode 100644 index 0000000..76e1df4 --- /dev/null +++ b/templates/postgresql-secret.yaml @@ -0,0 +1,14 @@ +{{- if .Values.postgresql.enabled }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "postgresql.secretName" . }} + labels: + {{- include "gitea.labels" . | nindent 4 }} +type: Opaque +data: + # Note: Les valeurs de secret doivent être encodées en base64 + username: {{ .Values.postgresql.auth.username | b64enc | quote }} + password: {{ .Values.postgresql.auth.password | b64enc | quote }} + database: {{ .Values.postgresql.auth.database | b64enc | quote }} +{{- end }} \ No newline at end of file diff --git a/templates/postgresql-service.yaml b/templates/postgresql-service.yaml new file mode 100644 index 0000000..ed784ff --- /dev/null +++ b/templates/postgresql-service.yaml @@ -0,0 +1,19 @@ +{{- if .Values.postgresql.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "postgresql.serviceName" . }} + labels: + {{- include "gitea.labels" . | nindent 4 }} + app.kubernetes.io/component: database +spec: + type: ClusterIP + ports: + - port: {{ .Values.postgresql.service.port }} + targetPort: postgresql + protocol: TCP + name: postgresql + selector: + {{- include "postgresql.selectorLabels" . | nindent 4 }} + app.kubernetes.io/component: database +{{- end }} \ No newline at end of file diff --git a/templates/postgresql-statefulset.yaml b/templates/postgresql-statefulset.yaml new file mode 100644 index 0000000..252deda --- /dev/null +++ b/templates/postgresql-statefulset.yaml @@ -0,0 +1,92 @@ +{{- if .Values.postgresql.enabled }} +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ template "postgresql.fullname" . }} + labels: + {{- include "gitea.labels" . | nindent 4 }} + app.kubernetes.io/component: database +spec: + serviceName: {{ template "postgresql.serviceName" . }} + replicas: 1 # Un seul pod pour une base simple + selector: + matchLabels: + {{- include "postgresql.selectorLabels" . | nindent 6 }} + app.kubernetes.io/component: database + template: + metadata: + labels: + {{- include "postgresql.selectorLabels" . | nindent 8 }} + app.kubernetes.io/component: database + spec: + terminationGracePeriodSeconds: 10 + containers: + - name: postgresql + image: "{{ .Values.postgresql.image.repository }}:{{ .Values.postgresql.image.tag }}" + imagePullPolicy: {{ .Values.postgresql.image.pullPolicy }} + ports: + - name: postgresql + containerPort: {{ .Values.postgresql.service.port }} + protocol: TCP + env: + - name: POSTGRES_DB + valueFrom: + secretKeyRef: + name: {{ template "postgresql.secretName" . }} + key: database + - name: POSTGRES_USER + valueFrom: + secretKeyRef: + name: {{ template "postgresql.secretName" . }} + key: username + - name: POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + name: {{ template "postgresql.secretName" . }} + key: password + # PGDATA est important pour indiquer où stocker les données + - name: PGDATA + value: {{ .Values.postgresql.persistence.mountPath }}/pgdata + {{- if .Values.postgresql.persistence.enabled }} + volumeMounts: + - name: postgresql-data + mountPath: {{ .Values.postgresql.persistence.mountPath }} + {{- end }} + # Ajouter des Liveness/Readiness Probes est recommandé en production + livenessProbe: + exec: + command: ["pg_isready", "-U", "$(POSTGRES_USER)", "-d", "$(POSTGRES_DB)", "-h", "127.0.0.1", "-p", "{{ .Values.postgresql.service.port }}"] + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + readinessProbe: + exec: + command: ["pg_isready", "-U", "$(POSTGRES_USER)", "-d", "$(POSTGRES_DB)", "-h", "127.0.0.1", "-p", "{{ .Values.postgresql.service.port }}"] + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + {{- if not .Values.postgresql.persistence.enabled }} + volumes: + - name: postgresql-data # Volume éphémère si persistance désactivée + emptyDir: {} + {{- end }} + {{- if .Values.postgresql.persistence.enabled }} + volumeClaimTemplates: + - metadata: + name: postgresql-data + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: {{ .Values.postgresql.persistence.size }} + {{- if .Values.postgresql.persistence.storageClass }} + {{- if (eq "-" .Values.postgresql.persistence.storageClass) }} + storageClassName: "" + {{- else }} + storageClassName: "{{ .Values.postgresql.persistence.storageClass }}" + {{- end }} + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/values.yaml b/values.yaml new file mode 100644 index 0000000..a614c5b --- /dev/null +++ b/values.yaml @@ -0,0 +1,73 @@ +# Valeurs pour Gitea +gitea: + replicaCount: 1 + image: + repository: gitea/gitea + tag: "1.23.6" # Assurez-vous que cette version est compatible avec la config + pullPolicy: IfNotPresent + + service: + type: ClusterIP + httpPort: 3000 + sshPort: 22 # Port SSH interne au pod Gitea + + ingress: + enabled: true +# className: nginx # Important: Spécifiez la classe de votre contrôleur Ingress (nginx, traefik, etc.) + host: gitea.lm-imanager.com + tls: + enabled: true + # Important: Vous DEVEZ créer ce secret manuellement AVANT d'installer le chart. + # kubectl create secret tls gitea-tls --cert=path/to/tls.crt --key=path/to/tls.key -n + secretName: key-cert-gitea-tls + annotations: + kubernetes.io/ingress.class: nginx + cert-manager.io/issuer: letsencrypt-issuer-gitea + acme.cert-manager.io/http01-edit-in-place: "true" + nginx.ingress.kubernetes.io/from-to-www-redirect: "true" + nginx.ingress.kubernetes.io/proxy-body-size: 40m + + + persistence: + enabled: true + # storageClass: "" # Décommentez et spécifiez si vous n'utilisez pas la storage class par défaut + size: 10Gi # Taille du volume pour les données Gitea (repos, etc.) + mountPath: /data + + # Configuration Gitea via variables d'environnement + # Voir https://docs.gitea.com/administration/config-cheat-sheet + config: + # server: + # ROOT_URL: "https://gitea.lm-imanager.com" # Sera généré automatiquement dans le template + database: + DB_TYPE: postgres + # Les autres valeurs (HOST, NAME, USER, PASSWD) seront prises depuis le secret postgresql + # security: + INSTALL_LOCK: true # Mettre à true APRÈS la première installation via l'interface web + # SECRET_KEY: "" # Généré par Gitea si vide, ou spécifiez une longue chaîne aléatoire + # service: + # DISABLE_REGISTRATION: false # Mettre à true pour désactiver l'auto-enregistrement des utilisateurs + +# Valeurs pour PostgreSQL (déploiement interne) +postgresql: + enabled: true # Mettre à false si vous utilisez une base de données externe + + image: + repository: postgres + tag: "14" # Choisissez une version de PostgreSQL supportée par Gitea + pullPolicy: IfNotPresent + + # Attention: Changez ces mots de passe pour la production ! + auth: + username: gitea + password: "change-me-in-production" + database: gitea + + service: + port: 5432 + + persistence: + enabled: true + # storageClass: "" # Décommentez et spécifiez si vous n'utilisez pas la storage class par défaut + size: 8Gi + mountPath: /var/lib/postgresql/data \ No newline at end of file