Trois questions indépendantes, tranchées lors du branchement de Kadans sur MinIO (2026-07-26) : qui déclare les buckets d'une app, qui détient les identifiants capables de les créer, et comment l'app lit les siens. La décision de fond est du fondateur : CHACUN SON PÉRIMÈTRE. Une application déclare ses buckets depuis son propre dépôt ; `tools` fournit le serveur, un module de standardisation et un compte de provisionnement — pas la liste. Une première version faisait tout porter par l'infra partagée : à ce rythme, chaque bucket de chaque app devenait une PR sur le dépôt commun. L'ADR consigne aussi les trois identités et leurs portées (root / provisionneur / compte de service), pourquoi la lecture des identifiants est une propriété inconditionnelle de la plateforme plutôt qu'une déclaration par app, et pourquoi les octets ne transitent pas par l'API — avec les conséquences que ça impose (endpoint public, CORS aux origines exactes, pas de basic-auth sur l'ingress S3). Les alternatives écartées sont listées avec leur motif, dont deux que j'avais moi-même proposées et qui étaient plus faibles. Deux limites assumées y figurent : le provisionneur est un secret PARTAGÉ entre rôles CI (sa compromission permet de créer des buckets, pas de lire des objets), et les noms d'actions d'administration MinIO n'ont pas été éprouvés contre le serveur au moment d'écrire. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01CoafGWmRVESaWX819USUUA
3.2 KiB
3.2 KiB
Bases
Fondamentaux
- Setup DNS, OS, ...
- docker & k3s
- main components
- setup volume, nfs, k8s provisioner
- setup postgres
- setup gitea
- setup mail alert
- setup gitea runners, Argo CD
- sync git repo with github/gitlab
- docker hub
- gitea packages
- devsecops tools
- hashicorp vault
- stockage objet MinIO — qui déclare quoi
- terrakube
- prometheus/grafana
- ansible AWX
- setup hello world web app — 📖 procédure complète : runbook « Nouvelle application web »
- manage postgres credentials → base de données + Vault plateforme
- protect public endpoint (crowdsec) → chart : ingress public
Note
Reference: Arcodange Factory Ansible Collection
Important
duckdns.org offre un sous domaine de duckdns.org gratuitement ainsi que des (sous-)sous domaines. Avec notre token on peut valider le challenge DNS de letsencrypt (pour du SSL gratuit) et configurer un cron job pour mettre à jour l'ip publique référencée par notre sous-domaine.
%%{init: { 'logLevel': 'debug', 'theme': 'base' } }%%
flowchart
net[Internet]
subgraph "Local Network (livebox)"
net_rules{network rules}
subgraph pi1
subgraph Docker_pi1[Docker]
%%subgraph Traefik
%% :web80
%% :websecure443
%%end
gitea_action_runner
end
subgraph k3s_server[K3S Master]
%% Traefik -.-> K3S_Traefik
subgraph K3S_Traefik
subdomain_git[/git.arcodange.duckdns.org/]
end
Pods[hello world web app]
ArgoCD
end
end
subgraph pi2
subgraph Docker_pi2[Docker]
subgraph gitea_network
subgraph postgres_service
end
subgraph gitea_service
end
end
end
subgraph HardDisk[Hard Disk]
pg_data[pg_data partition]
gitea_data[gitea_data partition]
nfs_data[NFS_data partition]
K3S_storage_provisioner --o nfs_data
end
subgraph k3s_agent[K3S Agent]
Pods'[hello world web app]
end
end
end
postgres_service --o pg_data
gitea_service --o gitea_data
net -. "http(s)://(*.)arcodange.duckdns.org" .- net_rules -. :<i>443/80</i> .-> K3S_Traefik
%% Traefik
subdomain_git -.-> gitea_service
classDef k3s fill:#fff,stroke:#f0f,stroke-width:1px;
classDef storage fill:#999,stroke:#000,stroke-width:2px;
class HardDisk storage;
class k3s_server,k3s_agent,K3S_storage_provisioner k3s;