# Configuration Centralisée - shared.env ## Vue d'ensemble À partir de maintenant, la configuration commune aux **deux services** (Minecraft + Web Admin) est centralisée dans un seul fichier au niveau du **dossier parent** : `shared.env`. Cela te permet de modifier **une seule fois** : - ✅ `RCON_PASSWORD` → s'applique automatiquement aux 2 services - ✅ `SESSION_SECRET` → s'applique à l'app web - ✅ Tous les ports, mémoire, etc. ## Hiérarchie de configuration ``` Projet/Serveur NationsGlory/ ├── shared.env ← Configuration CENTRALISÉE (priorité basse) ├── shared.env.example ← Template (pour documenter) │ ├── NationsGlory_ServeurBuild_Red/ │ ├── .env ← Surcharge locale (priorité haute) │ ├── .env.example │ └── docker-compose.yml ← Lit: shared.env PUIS .env │ └── WebNationsGlory_ServeurBuild_Red/ ├── .env ← Surcharge locale (priorité haute) ├── .env.example └── docker-compose.yml ← Lit: shared.env PUIS .env ``` ## Ordre de chargement Docker Compose charge les variables dans cet ordre (**les dernières écrasent les premières**) : 1. **`../shared.env`** (parent) - Configuration commune 2. **`.env`** (local) - Surcharges spécifiques au service Cela signifie : si une variable est définie dans les DEUX fichiers, **la version locale gagne**. ## Utilisation ### Première installation 1. **Copie le template** : ```bash cd "Projet/Serveur NationsGlory" cp shared.env.example shared.env ``` 2. **Modifie les valeurs sensibles** (RCON_PASSWORD, SESSION_SECRET) : ```bash nano shared.env ``` 3. **Les deux services utiliseront automatiquement ces valeurs** ### Modification des paramètres globaux Pour changer quelque chose qui concerne **les deux services** : ```bash # Depuis le dossier parent nano shared.env # Puis redémarre les conteneurs docker-compose -f NationsGlory_ServeurBuild_Red/docker-compose.yml down docker-compose -f WebNationsGlory_ServeurBuild_Red/docker-compose.yml down ./deploy.sh ``` ### Configuration spécifique à un service Si tu veux un paramètre **différent** dans un seul service, ajoute-le dans son `.env` local : **Exemple** : Si tu veux une `SESSION_SECRET` différente dans WebNationsGlory : ```bash # Dans WebNationsGlory_ServeurBuild_Red/.env SESSION_SECRET=mon-secret-specifique-au-web ``` Cela écrasera la valeur du `shared.env` **uniquement pour ce service**. ## Variables dans shared.env ### Sécurité - `RCON_PASSWORD` → Mot de passe RCON (utilisé par Minecraft + Web Admin) - `SESSION_SECRET` → Clé de session pour l'app web ### Ports - `SERVER_PORT` → Port Minecraft (25565) - `RCON_PORT` → Port RCON (25575) - `PORT` → Port app web (4001) ### Minecraft - `MEMORY` → RAM allouée (2G, 4G, etc.) - `INIT_MEMORY` → RAM initiale (1G) - `ONLINE_MODE` → Mode authentification Mojang (true/false) ### Environnement - `NODE_ENV` → production/development ## Génération sécurisée (Production) Pour générer un `SESSION_SECRET` sécurisé en production : ```bash # Linux/Mac openssl rand -hex 32 # Windows (PowerShell) [Convert]::ToHexString((1..32 | ForEach-Object { Get-Random -Maximum 256 })) # Node.js (universel) node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" ``` Puis colle la valeur dans `shared.env` : ```bash SESSION_SECRET=a1b2c3d4e5f6... (votre clé générée) ``` ## .gitignore ✅ `shared.env` est dans `.gitignore` → **NE SERA JAMAIS** envoyé au repo Git ✅ `shared.env.example` est versionné → Permet aux autres de savoir quelles variables existent ## Dépannage ### "Cannot find shared.env" au démarrage Assure-toi d'avoir créé le fichier : ```bash cd "Projet/Serveur NationsGlory" cp shared.env.example shared.env ``` ### Le changement ne s'applique pas après modification Docker utilise un cache. Redémarre complètement : ```bash docker-compose -f NationsGlory_ServeurBuild_Red/docker-compose.yml down docker-compose -f WebNationsGlory_ServeurBuild_Red/docker-compose.yml down docker system prune -f ./deploy.sh ``` ## Exemple : Changer le RCON_PASSWORD Avant (2 fichiers à modifier) : ``` NationsGlory_ServeurBuild_Red/.env → RCON_PASSWORD=ancien_mdp WebNationsGlory_ServeurBuild_Red/.env → RCON_PASSWORD=ancien_mdp ``` Après (1 fichier à modifier) : ``` shared.env → RCON_PASSWORD=nouveau_mdp ``` Les deux services récupèrent automatiquement la nouvelle valeur ! 🎉