Annuaire web des communautés francophones de DCS World. Nuxt 3 full-stack avec PostgreSQL, filtres avancés, panel admin et formulaire de soumission.
- Frontend : Nuxt 3 (Vue 3) + Nuxt UI v3 (Tailwind CSS v4)
- Backend : Nitro (API routes intégrées à Nuxt)
- Base de données : PostgreSQL 16 + Drizzle ORM
- Auth : nuxt-auth-utils (session cookie, mot de passe admin unique)
- Déploiement : Docker (Coolify)
- Node.js 20+
- PostgreSQL 16 (ou Docker)
npm installOption A — Docker Compose (si Docker disponible) :
docker compose up -d # Lance PostgreSQL sur le port 5432Option B — PostgreSQL existant :
# Créer la DB manuellement
createdb commus_dcsDans les deux cas :
cp .env.example .env # Adapter DATABASE_URL si besoin
npm run db:push # Applique le schéma (sans migrations)
npm run db:seed # Importe les 54 communautés depuis .archive/npm run devLe site est accessible sur http://localhost:3000 et l'admin sur http://localhost:3000/admin/login.
| Commande | Description |
|---|---|
npm run db:push |
Applique le schéma sans fichier de migration |
npm run db:generate |
Génère un fichier de migration |
npm run db:migrate |
Exécute les migrations |
npm run db:seed |
Importe les données depuis les MD archivés |
npm run db:studio |
Lance Drizzle Studio (GUI DB) |
| Route | Description |
|---|---|
/ |
Page d'accueil avec stats et communautés featured |
/communautes |
Annuaire avec filtres, recherche et pagination |
/communautes/:slug |
Fiche détaillée d'une communauté |
/trouver |
Assistant de recherche en 5 étapes |
/stats |
Statistiques et distributions |
/soumettre |
Formulaire public pour proposer une communauté |
/contact |
Liens de contact |
/admin/login |
Connexion admin |
/admin |
Dashboard admin |
/admin/communautes |
CRUD des communautés |
/admin/submissions |
Modération des soumissions |
| Endpoint | Méthode | Description |
|---|---|---|
/api/communities |
GET | Liste filtrée + paginée |
/api/communities/:slug |
GET | Détail d'une communauté |
/api/modules |
GET | Liste des modules DCS |
/api/experiences |
GET | Liste des types d'expérience |
/api/stats |
GET | Statistiques agrégées |
/api/submissions |
POST | Soumettre une communauté |
/api/admin/* |
* | Endpoints admin (auth requise) |
Dans Coolify (https://coolify.kerboul.me) :
- New Resource → Database → PostgreSQL
- Configurer :
- Database name :
commus_dcs - Username :
commus - Password : (générer un mot de passe fort)
- Database name :
- Noter l'URL interne (ex:
postgresql://commus:PASSWORD@postgresql-xxx:5432/commus_dcs)
-
New Resource → Application → Dockerfile
-
Source : connecter le repo Git
DaKerboul/commus_dcs -
Build Pack : Dockerfile (le
Dockerfileà la racine sera utilisé) -
Port :
3000 -
Variables d'environnement (toutes obligatoires en production) :
DATABASE_URL=postgresql://commus:PASSWORD@db:5432/commus_dcs NUXT_DATABASE_URL=postgresql://commus:PASSWORD@db:5432/commus_dcs DB_PASSWORD=<mot de passe fort> NUXT_SESSION_SECRET=<openssl rand -hex 32> NUXT_SESSION_PASSWORD=<openssl rand -hex 32> NUXT_ADMIN_PASSWORD=<mot de passe admin ≥ 12 chars> NUXT_PUBLIC_SITE_URL=https://commus.kerboul.me NUXT_TWITCH_CLIENT_ID=<optionnel — désactive les features streamers si absent> NUXT_TWITCH_CLIENT_SECRET=<optionnel> -
Health Check :
GET /api/healthsur le port 3000
Le schéma est géré par des migrations versionnées Drizzle appliquées automatiquement au démarrage du conteneur (server/plugins/db-migrate.ts). Aucune action manuelle n'est requise lors d'un déploiement.
⚠️ Ne jamais exécuterdb:pushcontre la production. Cette commande peut émettre desDROPimplicites et contourner le journal de migrations. Voirdocs/migrations.md.
| Variable | Description | Défaut |
|---|---|---|
DATABASE_URL |
URL de connexion PostgreSQL | postgresql://commus:commus@localhost:5432/commus_dcs |
NUXT_DATABASE_URL |
Alias Nuxt de DATABASE_URL | identique à DATABASE_URL |
DB_PASSWORD |
Mot de passe PostgreSQL (utilisé par le compose) | commus (insécurisé) |
NUXT_SESSION_SECRET |
Secret HMAC pour les cookies de vote | obligatoire en prod |
NUXT_SESSION_PASSWORD |
Clé de chiffrement des sessions admin (nuxt-auth-utils) | obligatoire en prod |
NUXT_ADMIN_PASSWORD |
Mot de passe du panel admin (≥ 12 chars) | obligatoire en prod |
NUXT_PUBLIC_SITE_URL |
URL publique du site | http://localhost:3000 |
NUXT_TWITCH_CLIENT_ID |
Client ID Twitch (features streamers) | optionnel |
NUXT_TWITCH_CLIENT_SECRET |
Secret Twitch | optionnel |
NUXT_RUN_MIGRATIONS |
Passer false pour désactiver le runner de migration |
true |