Sistema Full Stack Next.js
Quand l'utiliser
Utilisez-la pour la connexion, l'inscription, le tableau de bord, les données par utilisateur, les téléchargements, la facturation ou une API personnalisée. Pour les landing pages et les sites institutionnels, utilisez la compétence site-estatico.
Créer un projet
git clone https://github.com/guibean/nextjs-fullstack-template.git <slug>
cd <slug>
pnpm install
cp .env.example .env
Générez BETTER_AUTH_SECRET avec openssl rand -base64 48, configurez DATABASE_URL et exécutez :
pnpm db:migrate
pnpm dev
Ordre d'implémentation
- Modélisez les données, les relations, les permissions et les menaces.
- Modifiez
src/db/schema.tset exécutezpnpm db:generate. - Appliquez les migrations avec
pnpm db:migrate. - Configurez l'environnement dans
src/env.ts; n'utilisez pas de fallback en dehors deSKIP_ENV_VALIDATION. - Implémentez l'authentification et l'autorisation côté serveur.
- Validez toutes les entrées avec Zod côté serveur.
- Ajoutez la limitation de débit, les journaux, les sauvegardes et l'observabilité.
- Construisez ensuite l'interface utilisateur du tableau de bord.
Règles de sécurité
- N'exposez jamais
DATABASE_URL,BETTER_AUTH_SECRET,RESEND_API_KEYouTURNSTILE_SECRET_KEY. - Utilisez
auth.api.getSession({ headers: await headers() })dans les Server Components protégés. - Protégez également les Route Handlers et les Server Actions.
- Ne faites pas confiance à la validation côté client.
- N'utilisez pas
output: "export"lorsqu'il y a authentification, base de données ou mutations. - En production, activez la vérification des e-mails, la limitation de débit et la récupération de mot de passe.
Déploiement sur VPS
- Construisez avec
pnpm buildet sortie.next/standalone. - Dockerfile multi-étapes inclus.
- Appliquez les migrations avant de changer de version.
- Utilisez HTTPS, un proxy inverse et un processus géré.
- Effectuez une sauvegarde de la base de données PostgreSQL avant les migrations destructrices.
Checklist
- env validé
- migrations appliquées
- connexion, déconnexion et session testés
- route protégée redirige sans session
- API protégée rejette sans session
- formulaire avec double validation
-
pnpm lint,pnpm typecheck,pnpm build - Lighthouse ≥ 95 sur les pages publiques
- sauvegardes et limitation de débit définies