Checklist de déploiement et sécurité
Déployez web et admin avec migrations explicites, cron, readiness, réseau fiable et contrôles de production.
Synchronisé avec le commit
e632762du starter.
Utilisez cette liste finale une fois l’application fonctionnelle en local. Le but n’est pas seulement un déploiement vert, mais une version que vous pouvez authentifier, facturer, exploiter, restaurer et administrer sans raccourci de développement.
Choisir la forme du déploiement
- Web et console admin sont deux builds et doivent avoir deux origines ; ils peuvent partager dépôt, base, secret d’authentification et tag de version.
- Vercel est documenté car
vercel.jsonfournit cron, mais tout hébergeur Node convient avec PostgreSQL, Redis, HTTPS, secrets et planificateur authentifié. - Utilisez une URL PostgreSQL poolée pour le serverless et, si nécessaire, une URL directe pour les migrations. Migrez avant de promouvoir le code ; le build ne migre jamais.
- Commencez CSP en mode report-only, observez les hôtes utilisés par l’analytique, Turnstile, Stripe et le stockage, puis testez la politique avant de l’imposer.
Prêt pour la production signifie : les deux builds viennent de la même version, les migrations sont vérifiées, /api/ready est sain, la sauvegarde est restaurable, le runner de file choisi et le webhook Stripe sont testés, aucun flag demo n’existe et les rôles admin lecture/écriture fonctionnent.
Déployez web et apps/admin comme services et origines séparés. Utilisez Node >=24.22.1 <25 et pnpm 10.22.0, lancez pnpm lint, pnpm test:cov, pnpm build, puis pnpm db:migrate:prod et pnpm db:check:prod. Les migrations ne sont jamais automatiques.
Contrôles obligatoires
BETTER_AUTH_SECRETfort, URL publiques et d’authentification correctes, PostgreSQL de production et sauvegardes restaurées en exercice.- Limites distribuées dans Redis et source d’IP explicitement fiable.
- Clés Turnstile de production si captcha est activé ; démonstrations et journalisation des liens d’authentification désactivées.
CRON_SECRETet un runner par défaut :/api/cron/jobsauthentifié toutes les cinq minutes,pnpm jobs:run --productionplanifié, oupnpm jobs:work --productioncontinu.vercel.jsonconfigure le planning HTTP.- Clés live Stripe, webhook vérifié, Billing Portal sûr et les quatre Price ID principaux exigés par le validateur actuel.
- Identifiants de stockage S3 compatible privé, moindre privilège, CORS correct et URL signées de courte durée.
- Domaine d’expédition vérifié et politiques de conservation et juridiques revues pour vos marchés.
/api/health teste la vie ; /api/ready contrôle environnement, base, migrations, Redis et file. Une file dégradée doit alerter même si le trafic passe.
HSTS est actif en production et CSP dispose d’un mode report-only. Observez avant d’imposer une politique compatible. Après déploiement, testez auth, isolation, checkout/webhooks, exécution de file, export/suppression et MFA admin. Lisez DEPLOYMENT.md, docs/security-headers.md et .env.example.
La version actuelle livre aussi des images durcies web, admin, worker et Content Studio, plus pnpm launch:check qui regroupe configuration, conteneurs, migrations, intégrité, rétention, tests et builds. Continuez avec Conteneurs et lancement et prouvez la restauration via Sauvegardes et exercices.
Vérifier la configuration réelle de production
Exécutez pnpm env:setup:prod pour préparer .env.production.local, puis pnpm env:check:prod. Web et Admin nécessitent PostgreSQL, Redis, secrets auth/cron, origines publiques et auth, Resend et expéditeur, clés privée/webhook Stripe, Portal et quatre Prices, et stockage privé. Le validateur partagé exige ces valeurs même si un écran n’utilise pas le fournisseur. Des clés vides ne désactivent pas facturation ou stockage ; supprimer une capacité implique de modifier explicitement validation et exécution.
Pour Admin, BETTER_AUTH_URL et NEXT_PUBLIC_AUTH_BASE_URL pointent vers Admin ; NEXT_PUBLIC_WEB_URL reste l’app client. Injectez les variables du worker et des commandes de publication depuis le gestionnaire de secrets de l’hôte. Consultez les règles d’environnement. Appliquez 0037_neat_excalibur.sql avant l’auth et la migration indépendante Payload avant Studio.