Quand je changeais la clé Gemini ou le SMTP, je redeployais. Absurde pour un portfolio single-tenant que je maintiens moi-même. J’ai basculé le pattern Carnet de bord / news CMS : options dans l’admin, secrets chiffrés au repos, merge au boot.
Frontière claire
Dans .env |
Dans l’admin (AppConfig) |
|---|---|
APP_KEY, DB_* |
SMTP, from, notify contact |
OWNER_EMAIL (lock login) |
Gemini / modèles IA |
| Rate limits, captcha, maintenance 503 |
La règle « empty keep existing »
if (blank($request->input('smtp_password'))) {
unset($payload['smtp_password']); // ne pas écraser
}
Sans ça, un save honnête de l’admin wype le secret. Je l’ai déjà fait une fois. Une fois de trop.
RuntimeConfigApplier
Au boot, on pousse les valeurs DB dans config('mail'), etc. Les Feature tests seedent AppConfig — pas seulement .env.testing. Sinon les tests passent en local et la prod ment.