Files
gaufrementbon/README.md
T
gpatruno e45e9f154e update
2026-06-11 17:30:13 +02:00

4.1 KiB
Raw Blame History

Gaufrement Bon — site vitrine

Site vitrine et back-office pour Gaufrement Bon (gaufres artisanales à Bagnols-sur-Cèze) : page daccueil, carte des gaufres, galerie photo, contenus éditables, et interface dadministration.

Fonctionnalités

  • Site public : hero, menu par catégories (sucrées, salées, du mois), galerie, horaires et contact.
  • Administration (/admin) : connexion par session, gestion du menu, de la galerie et des textes / images du site.
  • Upload dimages : redimensionnement via Sharp, stockage dans public/uploads/.
  • Base SQLite : Prisma 7, migrations versionnées, seed au premier démarrage Docker.

Stack

  • Next.js 15 (App Router, Turbopack, sortie standalone)
  • React 19, Tailwind CSS 4
  • Prisma + SQLite (better-sqlite3)
  • Auth JWT en cookie (jose), rate limiting (mémoire ou Upstash Redis)

Prérequis

  • Node.js 22+
  • npm

Développement local

npm install
npx prisma migrate deploy   # crée dev.db si besoin
npm run db:seed             # optionnel : données de démo + compte admin
npm run dev

Ouvrir http://localhost:3000. Ladmin est sur http://localhost:3000/admin.

Sans fichier .env, les valeurs par défaut suivantes sappliquent :

Variable Défaut local
DATABASE_URL file:./dev.db
AUTH_SECRET secret de dev (à changer en prod)
ADMIN_EMAIL admin@lagaufredor.local
ADMIN_PASSWORD changeme123

Exemple .env :

DATABASE_URL="file:./dev.db"
AUTH_SECRET="remplacer-par-une-longue-chaine-aleatoire"
ADMIN_EMAIL="admin@example.com"
ADMIN_PASSWORD="mot-de-passe-fort"
# Optionnel — rate limiting distribué
# UPSTASH_REDIS_REST_URL=
# UPSTASH_REDIS_REST_TOKEN=

Scripts npm

Commande Description
npm run dev Serveur de dev (port 3000)
npm run build Build production (migrations + generate Prisma)
npm run start Serveur Next en production
npm run db:seed Seed manuel (menu, galerie, contenus, admin)
npm run lint ESLint

Docker

Image publiée : foufure/gauffre:latest.

Compose local (build + run)

export AUTH_SECRET="$(openssl rand -base64 32)"
docker compose up -d --build

Application sur http://localhost:3007 (port hôte 3007 → conteneur 3000).

Volumes : base SQLite (gauffre-data) et fichiers uploadés (gauffre-uploads).

Déploiement serveur

Fichier dédié : docker-compose.server.yml (HTTPS assuré par Nginx + Certbot sur lhôte).

export AUTH_SECRET="$(openssl rand -base64 32)"
export ADMIN_EMAIL="admin@example.com"
export ADMIN_PASSWORD="mot-de-passe-fort"
docker compose -f docker-compose.server.yml up -d

Exemple de proxy Nginx : proxy_pass http://127.0.0.1:3007;
Port hôte configurable via HOST_PORT (défaut 3007).

Au démarrage du conteneur, docker/entrypoint.sh exécute les migrations Prisma et le seed, puis lance node server.js.

Publier limage sur Docker Hub

docker login
./scripts/docker-hub-push.sh           # tag latest
./scripts/docker-hub-push.sh v1.0.0    # tag personnalisé

Variables optionnelles : DOCKER_USER (défaut foufure), IMAGE_NAME (défaut gauffre).

Structure (aperçu)

src/app/              # Pages et routes API (public + /admin)
src/components/site/  # UI vitrine
src/components/admin/ # UI back-office
src/lib/              # Prisma, auth, uploads, contenus
prisma/               # Schéma, migrations, seed
public/gallery/       # Images statiques par défaut
public/uploads/       # Images uploadées (persistées en Docker)
docker/               # Entrypoint conteneur

Sécurité en production

  • Définir un AUTH_SECRET long et aléatoire (openssl rand -base64 32).
  • Changer ADMIN_EMAIL et ADMIN_PASSWORD avant le premier seed, ou créer ladmin puis modifier le mot de passe.
  • Servir le site derrière HTTPS (Nginx ou équivalent).
  • Configurer Upstash si plusieurs instances partagent le rate limiting.

Licence

Projet privé.