KPI est un système de gestion pour les compétitions de kayak-polo, gérant les équipes, matchs, joueurs et statistiques.
Le projet combine plusieurs technologies :
- Backend PHP : PHP 7.4/8.x avec API REST
- Frontend moderne : Nuxt 4 (Vue 3 + TypeScript + Tailwind CSS) dans
sources/app2/ - Applications legacy : Vue.js dans
sources/app_dev/,app_live_dev/,app_wsm_dev/ - CMS : WordPress pour le contenu éditorial
- Infrastructure : Docker Compose avec Traefik pour le reverse proxy
- Base de données : MySQL/MariaDB (2 bases : KPI + WordPress)
- Docker et Docker Compose
- Make
- Git
- Cloner le repository
git clone https://github.com/FFCK/kpi.git
cd kpi- Initialisation complète
make initCette commande va :
- Créer le fichier
docker/.envdepuisdocker/.env.dist - Créer les fichiers
.env.developmentet.env.productionpour app2 - Créer les réseaux Docker nécessaires (
network_kpi,pma_network,traefiknetwork)
- Configurer les variables d'environnement
Éditer docker/.env et configurer :
APPLICATION_NAME=kpi # Nom de l'application (change selon l'environnement)
USER_ID=1000
GROUP_ID=33
DB_ROOT_PASSWORD=votre_mot_de_passe
DB_USER=votre_utilisateur
DB_PASSWORD=votre_mot_de_passe
# ... etcImportant : Le APPLICATION_NAME définit le nom du réseau Docker (network_${APPLICATION_NAME}).
- Développement local :
APPLICATION_NAME=kpi→ réseaunetwork_kpi - Pré-production :
APPLICATION_NAME=kpi_preprod→ réseaunetwork_kpi_preprod - Production :
APPLICATION_NAME=kpioukpi_prodselon votre configuration
- Démarrer l'environnement de développement
make dev_up- Installer les dépendances Node
make npm_install_app2- Lancer le serveur Nuxt
make run_devL'application est accessible sur :
- KPI : http://kpi.localhost ou http://localhost:8003
- App2 (Nuxt) : http://localhost:3002
- phpMyAdmin : http://kpi-myadmin.localhost
Ajouter à /etc/hosts :
127.0.0.1 kpi.localhost kpi-8.localhost kpi-myadmin.localhost kpi-node.localhost
Utilisez make help pour voir toutes les commandes disponibles.
make init # Initialisation complète (recommandé)
make init_env # Créer docker/.env
make init_env_app2 # Créer les .env de app2
make init_networks # Créer les réseaux Dockermake dev_up # Démarrer les containers
make dev_down # Arrêter les containers
make dev_restart # Redémarrer les containers
make dev_logs # Voir les logs en temps réel
make dev_status # Statut des containersmake preprod_up # Démarrer la pré-production
make preprod_down # Arrêter la pré-production
make preprod_logs # Voir les logsmake prod_up # Démarrer la production
make prod_down # Arrêter la production
make prod_logs # Voir les logsmake run_dev # Serveur dev Nuxt (port 3002)
make run_build # Build pour production
make run_generate # Génération statique
make run_lint # Linter ESLintmake npm_install_app2 # Installer les dépendances
make npm_clean_app2 # Nettoyer node_modules
make npm_add_app2 package=nom-package # Ajouter un packagemake php_bash # Shell PHP 7.4
make php8_bash # Shell PHP 8
make node_bash # Shell Node/App2
make db_bash # Shell MySQLmake networks_create # Créer les réseaux nécessaires (utilise APPLICATION_NAME)
make networks_list # Lister les réseaux du projet
make networks_clean # Supprimer les réseaux (si non utilisés)Note : Les réseaux sont créés en fonction de APPLICATION_NAME dans docker/.env :
- Réseau KPI :
network_${APPLICATION_NAME} - Réseau phpMyAdmin :
pma_network(partagé) - Réseau Traefik :
traefiknetwork(partagé)
make wordpress_backup # Créer une sauvegardekpi/
├── docker/ # Configuration Docker
│ ├── compose.dev.yaml # Docker Compose développement
│ ├── compose.preprod.yaml # Docker Compose pré-production
│ ├── compose.prod.yaml # Docker Compose production
│ ├── .env # Variables d'environnement (non versionné)
│ ├── .env.dist # Template des variables
│ ├── wordpress/ # Contenu WordPress (non versionné)
│ └── config/ # Dockerfiles et configurations
├── sources/
│ ├── app2/ # Application Nuxt 4 (principale)
│ ├── app_dev/ # Application Vue.js legacy
│ ├── app_live_dev/ # Application live Vue.js
│ ├── app_wsm_dev/ # Application WSM Vue.js
│ ├── api/ # API REST PHP
│ ├── commun/ # Classes PHP partagées
│ └── wordpress_archive/ # Archive WordPress
├── SQL/ # Scripts SQL
├── WORKFLOW_AI/ # Documentation technique détaillée
│ ├── README.md # Index de la documentation
│ ├── PHP8_GESTIONDOC_FIXES.md # Correctifs PHP 8
│ ├── MIGRATION.md # Guide de migration
│ └── ... (18 fichiers) # Guides, audits, fixes
├── Makefile # Commandes Make
├── CLAUDE.md # Documentation pour Claude Code
├── GEMINI.md # Documentation pour Gemini
└── README.md # Ce fichier
docker/.env (non versionné)
- Configuration Docker principale
- Ports, chemins, credentials
- Créé depuis
docker/.env.dist
sources/app2/.env.development (non versionné)
- Configuration Nuxt en développement
- Variables :
API_BASE_URL,BACKEND_BASE_URL - Utilisé automatiquement par
npm run dev
sources/app2/.env.production (non versionné)
- Configuration Nuxt en production
- Utilisé pour
npm run buildetnpm run generate
Le contenu WordPress est stocké dans docker/wordpress/ et n'est pas versionné dans Git.
Configuration :
- Le chemin est défini par
HOST_WORDPRESS_PATHdansdocker/.env - Les fichiers de config WordPress sont dans
docker/wordpress/wp-config.php* - Faire une sauvegarde avec
make wordpress_backup
Deux bases de données MySQL/MariaDB :
- KPI : Base principale de l'application
- WordPress : Base pour le CMS
Accès via phpMyAdmin : http://kpi-myadmin.localhost
- Fichier :
docker/compose.dev.yaml - Ports exposés : 8003 (PHP 7.4), 8803 (PHP 8), 3002 (Nuxt)
- Hot reload activé
- Logs verbeux
- Fichier :
docker/compose.preprod.yaml - Configuration proche de la production
- Pour tester avant déploiement
- Fichier :
docker/compose.prod.yaml - Optimisé pour les performances
- Utilise Traefik avec SSL/TLS
- Nuxt 4 : Framework Vue.js avec rendu SSR/SSG
- Vue 3 : Framework JavaScript réactif
- TypeScript : Typage statique
- Tailwind CSS : Framework CSS utility-first
- Pinia : Gestion d'état
- Nuxt UI : Composants UI
- PHP 7.4 / 8.x : Langage serveur
- MySQL/MariaDB 10.4 : Base de données
- WordPress : CMS
- Docker : Conteneurisation
- Docker Compose : Orchestration
- Traefik : Reverse proxy
- Apache : Serveur web
- Les fichiers
.envne sont jamais versionnés - Les credentials sont dans les fichiers
.env - WordPress est isolé dans un volume séparé
- Traefik gère les certificats SSL en production
make networks_create # Créer les réseaux manquants
make dev_status # Vérifier le statut
make dev_logs # Voir les erreursLe nom du réseau dépend de APPLICATION_NAME dans docker/.env.
Solution :
# Vérifier le nom attendu
grep APPLICATION_NAME docker/.env
# Créer les réseaux avec le bon nom
make networks_create
# Vérifier que les réseaux sont créés
make networks_listSi vous avez plusieurs environnements (dev, preprod, prod) sur le même serveur, utilisez des APPLICATION_NAME différents :
- Dev :
APPLICATION_NAME=kpi - Preprod :
APPLICATION_NAME=kpi_preprod - Prod :
APPLICATION_NAME=kpi_prod
Modifier les ports dans docker/.env :
DOCKER_SUFFIXE_PORT=03 # Changer ce suffixemake npm_clean_app2 # Nettoyer
make npm_install_app2 # Réinstaller
make run_dev # Relancer- CLAUDE.md : Guide complet des commandes pour Claude Code
- WORKFLOW_AI/ : Documentation technique détaillée
- Guides de migration (PHP 8, FPDF → mPDF)
- Fixes et optimisations
- Audits de code et recommandations
- Configuration Docker et infrastructure
- Voir WORKFLOW_AI/README.md pour l'index complet
- Makefile : Toutes les commandes disponibles (
make help) - Wiki GitHub : https://github.com/FFCK/kpi/wiki
- Démarrer la journée
make dev_up
make run_dev- Développer
- Modifier le code dans
sources/app2/ - Hot reload automatique
- Tester
make run_lint # Vérifier le code
make run_build # Tester le build- Fin de journée
make dev_downSi vous déployez plusieurs environnements (dev, preprod, prod) sur le même serveur, vous devez configurer des APPLICATION_NAME différents pour éviter les conflits de réseaux et containers.
1. Sur le serveur de pré-production :
Éditer docker/.env :
APPLICATION_NAME=kpi_preprod # Nom unique pour la préprodPuis initialiser :
make init # Crée network_kpi_preprod2. Sur le serveur de production :
Éditer docker/.env :
APPLICATION_NAME=kpi_prod # Nom unique pour la prodPuis initialiser :
make init # Crée network_kpi_prodmake run_build # Build Nuxt
make run_generate # Génération statique (si nécessaire)make preprod_up # Tester en préprod
make preprod_logs # Vérifier les logsmake prod_up # Lancer en production
make prod_status # Vérifier le statutTâches planifiées :
- Mise à jour des licenciés :
commun/cron_maj_licencies.php(quotidien) - Verrouillage des feuilles de présence :
commun/cron_verrou_presences.php(quotidien, J-6 avant événement)
- Créer une branche pour votre fonctionnalité
- Développer et tester localement
- Faire un build de production :
make run_build - Créer une Pull Request
Propriété de la FFCK (Fédération Française de Canoë-Kayak)
Pour toute question ou problème :
- Consulter le wiki : https://github.com/FFCK/kpi/wiki
- Ouvrir une issue sur GitHub