Helm Charts / Detect changed charts (push) Successful in 1m6s
Helm Charts / Detect changed charts (pull_request) Successful in 1m5s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Sans ça, la synchronisation des vidéos ne peut pas marcher, et ce sont des faits du navigateur : une page servie en https ne peut pas émettre de requête vers http:// (contenu mixte), et `.lab` n'est pas résolvable hors du LAN. L'ingress existant est en entrypoint `web` sans TLS, sur un domaine interne — donc inutilisable depuis kadans.arcodange.fr, en déplacement COMME à la maison. Même motif que grafana/templates/ingress-public.yaml : entrypoint `web`, TLS terminé par le tunnel Cloudflare (wildcard *.arcodange.fr), middleware crowdsec. Le `.lab` interne reste inchangé. PAS de basic-auth, contrairement à kadans-public : une requête S3 porte sa propre signature (SigV4), et un défi HTTP Basic casserait le PUT présigné auquel le navigateur ne peut pas répondre. L'autorisation vient de l'URL signée et de sa durée de vie courte. CORS déclaré sur les origines EXACTES de la PWA (.fr et .lab), jamais « * » : une URL présignée qui fuiterait serait sinon rejouable depuis n'importe quel site. Sans cette liste, le préflight OPTIONS échoue et le PUT ne part même pas. ⚠ Signalé, NON mesuré : le tunnel Cloudflare plafonne probablement le corps d'une requête (~100 Mo sur les offres gratuites). À éprouver avec un vrai téléversement. Contexte utile : sur le corpus réel du fondateur (707 vidéos, ~2 ans), la durée MOYENNE est de 53 s et deux vidéos seulement dépassent 5 min — au palier « travail » de l'ADR-018, 100 Mo valent ~29 min de cours. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01CoafGWmRVESaWX819USUUA
93 lines
3.5 KiB
YAML
93 lines
3.5 KiB
YAML
minio: &minio_config
|
||
# Image officielle MinIO — multi-arch, arm64 inclus (les nœuds sont des Pi 5).
|
||
image:
|
||
repository: quay.io/minio/minio
|
||
pullPolicy: IfNotPresent
|
||
|
||
# STANDALONE : un seul serveur, un seul volume. La donnée servie ici est
|
||
# DÉRIVÉE (le master reste chez l'utilisateur) et Longhorn réplique déjà le
|
||
# volume ; l'erasure coding distribué coûterait de la RAM que les Pi n'ont pas
|
||
# à dépenser pour ça. `replicas` est ignoré en standalone.
|
||
mode: standalone
|
||
replicas: 1
|
||
|
||
# Le rôle Vault du module `app_roles` borne l'authentification au SERVICE
|
||
# ACCOUNT nommé comme l'app (`bound_service_account_names = [minio]`) : on
|
||
# aligne donc le SA du pod sur ce nom, plutôt que le « minio-sa » par défaut
|
||
# du chart amont — un SA pour le pod, le même pour Vault, rien à réconcilier.
|
||
serviceAccount:
|
||
create: true
|
||
name: minio
|
||
|
||
# Identifiants JAMAIS dans le dépôt : le secret est matérialisé par le
|
||
# Vault Secrets Operator depuis kvv2/minio/config (voir resources/ et iac/).
|
||
# Le chart lit `.data.rootUser` et `.data.rootPassword` de ce secret.
|
||
existingSecret: minio-config
|
||
|
||
persistence:
|
||
enabled: true
|
||
storageClass: longhorn
|
||
accessMode: ReadWriteOnce
|
||
# 50 Gi ≈ 250 heures de cours au palier « travail » de Kadans (360p,
|
||
# 3,4 Mo/min — ADR-018 du front). Longhorn réplique ce volume sur les
|
||
# nœuds : compter ×3 sur la capacité du cluster avant d'augmenter.
|
||
size: 50Gi
|
||
|
||
# Des Pi 5 à 8 Go partagés avec le reste de `tools` : on borne franchement.
|
||
# MinIO standalone est frugal ; la limite protège les voisins, pas MinIO.
|
||
resources:
|
||
requests:
|
||
memory: 512Mi
|
||
cpu: 100m
|
||
limits:
|
||
memory: 2Gi
|
||
|
||
# API S3 (les applications parlent ici).
|
||
ingress:
|
||
enabled: true
|
||
ingressClassName: traefik
|
||
path: /
|
||
hosts:
|
||
- s3.arcodange.lab
|
||
|
||
# Console d'administration (humains).
|
||
consoleIngress:
|
||
enabled: true
|
||
ingressClassName: traefik
|
||
path: /
|
||
hosts:
|
||
- minio.arcodange.lab
|
||
|
||
# Buckets créés au déploiement. `versioning: false` assumé : ces objets sont
|
||
# DÉRIVÉS et re-générables depuis le master local — versionner doublerait le
|
||
# stockage pour un filet dont on n'a pas besoin.
|
||
buckets:
|
||
- name: kadans-videos
|
||
policy: none # privé : l'accès passe par des URL signées (ADR-0002 du dossier)
|
||
purge: false
|
||
versioning: false
|
||
|
||
# Métriques : Prometheus (namespace `tools`) scrape déjà la façade et le
|
||
# laptop (ADR-0014 du dossier) — MinIO rejoint la même vue.
|
||
metrics:
|
||
serviceMonitor:
|
||
enabled: false # pas d'opérateur Prometheus ici : scrape par annotation
|
||
environment:
|
||
MINIO_PROMETHEUS_AUTH_TYPE: "public"
|
||
# CORS : le navigateur téléverse DIRECTEMENT vers MinIO depuis la PWA (URL
|
||
# présignées, kadans-api#23) — donc requête inter-origines, donc préflight
|
||
# OPTIONS. Sans cette liste, le PUT est refusé par le navigateur avant même
|
||
# de partir. Origines EXACTES, jamais « * » : une URL présignée qui fuite
|
||
# serait rejouable depuis n'importe quel site.
|
||
# .fr = la PWA publique (le cas réel, en déplacement comme à la maison)
|
||
# .lab = la même app servie en interne, pour la mise au point
|
||
MINIO_API_CORS_ALLOW_ORIGIN: "https://kadans.arcodange.fr,https://kadans.arcodange.lab"
|
||
|
||
tool:
|
||
# kind: 'SubChart' or 'HelmChart', if subchart then uncomment Chart.yaml dependency, else comment and use tool library with helm chart template
|
||
kind: 'SubChart'
|
||
repo: https://charts.min.io/
|
||
chart: minio
|
||
version: 5.4.0
|
||
values: *minio_config
|